电路笔记(信号) : 一个极简的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.