当前位置: 首页 > news >正文

电路笔记(信号) : 一个极简的DDS信号发生器

DDS原理

  • 直接数字合成(DDS)是一种利用数字技术生成精确频率和波形的信号的技术。一般有高精度、快速频率切换以及良好的相位噪声性能。

在这里插入图片描述

相位-幅度查找表(图中使用的ROM)

  • ROM起一个字典作用,根据相位值输出对应的幅值。

相位累加器

  • 相位累加

    • 相位累加器由一个M位宽的寄存器和一个M位宽的加法器组成。
    • 每个时钟周期,加法器将当前的相位值(寄存器中的值)与一个增量值(K)相加。
    • 结果被存储回寄存器,并用作下一个时钟周期的相位值。
  • 频率计算

    • DDS生成的输出信号频率 f o u t f_{out} fout可以通过相位累加器的增量值 K K K 和系统时钟频率 f c l k f_{clk} fclk计算。

    • 频率 f o u t f_{out} fout 的公式是:
      f o u t = K × f c l k 2 M f_{out} = \frac{K \times f_{clk}}{2^M} fout=2MK×fclk
      其中, 2 M 2^M 2M 是相位累加器的最大值加1(即累加器的计数范围)。

    • 相位累加器的位宽(M)影响频率分辨率。位宽越大,能够精确表示的频率增量越小,从而提供更高的频率分辨率。

    • 位宽越大,生成的频率范围也越广,但同时也要求更高的硬件资源和更复杂的设计。

DAC的作用

  • DAC的作用:为什么通过FPGA实现正弦波形信号发生器还需要通过FPGA驱动ADC?
    • 因为FPGA本身只能生成数字信号。要生成连续不断的模拟波形,通常需要将FPGA产生的数字信号通过DAC转换为模拟信号。8/10/12位、高带宽、并行接口乘法DAC
    • 常用的DAC芯片包括AD9708、MAX5216、DAC8568、MCP4725和LTC1668等。具体选择会根据精度、分辨率和速度等需求来决定。

实现

mydds

`timescale 1ns / 1psmodule mydds(clk,led,dac_data );
parameter CNT_W =  21;        // 参数控制存储计数器向量的宽度,如4Mhz约为22位
parameter LED_W =  18;        // 控制LED闪动频率的参数:时钟频率/2^{LED_W} HZ  2^18 = 262144input clk;                 // 时钟                           
output led;                   // 指示状态的LED                             
output [9:0] dac_data;        // 10位数据输出给外部的DAC器件reg [CNT_W:0] cnt;               // 计数器
always@(posedge clk) begincnt <= cnt + 1'b1;
endassign led= cnt[LED_W];          lookup_tables u_lookup_tables(.address(cnt), .out(dac_data));// 简化代码,cnt输入香味值endmodule

lookup_tables

`timescale 1ns / 1psmodule lookup_tables(address, out);
input  	[7:0] 	address;// 7位输入端口,地址
output 	[9:0] 	out;// 10位输出端口,值
reg      [9:0]    out;always @(address)begincase(address)	7'h0: out=10'd0;// 数值根据想显示的波形确定7'h1: out=10'd10;7'h2: out=10'd100;7'h3: out=10'd1000;7'h4: out=10'd2000;7'h5: out=10'd3000;7'h6: out=10'd4000;7'h7: out=10'd5000;7'h8: out=10'd6000;7'h9: out=10'd7000;7'ha: out=10'd7000;7'hb: out=10'd8000;7'hc: out=10'd9000;7'hd: out=10'd10000;7'he: out=10'd9000;7'hf: out=10'd8000;7'h10: out=10'd7000;default: out = 10'd6000;endcaseend
endmodule

CG

  • 参考视频:DDS原理详解与实现

资源限制

  • XC9572 System frequency up to 178 MHz,但是存储资源有限,如果存储太多数据会报错:
Considering device XC9572XL-5-PC44.
Flattening design..
Multi-level logic optimization...
Timing optimization....................................................................................................................................................
Timing driven global resource optimization
General global resource optimization........
Re-checking device resources ...
ERROR:Cpld:853 - Insufficient number of product terms.  This design needs atleast 451 but only 360 left after allocating other resources.
Device 9572XL44PC was disqualified.
ERROR:Cpld:868 - Cannot fit the design into any of the specified devices withthe selected implementation options.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 巨魔商店2安装教程,支持最新iOS 17.0的所有型号
  • camera: TypeError: Cannot read properties of undefined reading ‘getUserMedia
  • linux 权限解读
  • 【云计算】什么是云计算服务|为什么出现了云计算|云计算的服务模式
  • 【算法每日一练及解题思路】判断数字是否为偶数
  • 成为一名厉害的黑客,必须知道的12个步骤,黑客入门
  • 斗破C++编程入门系列之二十:数组、指针和字符串:数组的声明和使用(一星斗师)
  • mysql与es数据同步
  • 考拉悠然董事长申恒涛受邀出席2024AGIC深圳通用人工智能大会
  • 视频结构化从入门到精通——行为分析类应用
  • GAMES202——作业4 Kulla-Conty BRDF(BRDF的预计算、重要性采样)
  • NTFS安全权限和文件共享
  • 宝藏!《联盟自控基础班筑基题库》(凤凰篇) 1-8章:甄选部分
  • 超详细步骤——Keil MDK-ARM 如何修改工程名字
  • Scrcpy手机投屏投屏到电脑上(windows/mac)
  • [NodeJS] 关于Buffer
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 07.Android之多媒体问题
  • 78. Subsets
  • Angular2开发踩坑系列-生产环境编译
  • CSS 提示工具(Tooltip)
  • Debian下无root权限使用Python访问Oracle
  • EventListener原理
  • httpie使用详解
  • Java IO学习笔记一
  • JavaScript DOM 10 - 滚动
  • Java比较器对数组,集合排序
  • js算法-归并排序(merge_sort)
  • js中forEach回调同异步问题
  • Linux下的乱码问题
  • Octave 入门
  • PAT A1050
  • react-native 安卓真机环境搭建
  • Spring框架之我见(三)——IOC、AOP
  • Windows Containers 大冒险: 容器网络
  • 高度不固定时垂直居中
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 浅谈Golang中select的用法
  • 深入 Nginx 之配置篇
  • 实习面试笔记
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用SAX解析XML
  • 思否第一天
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 你对linux中grep命令知道多少?
  • linux 淘宝开源监控工具tsar
  • 数据可视化之下发图实践
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # centos7下FFmpeg环境部署记录
  • #数据结构 笔记一
  • $GOPATH/go.mod exists but should not goland
  • ()、[]、{}、(())、[[]]等各种括号的使用