DDS直接数字合成1 - 简介
让我们看看FPGA DSS实现是多么容易。
本文引用地址://www.cazqn.com/article/202401/454847.htmDAC接口
好的,您的新FPGA板具有快速DAC(数模转换器)模拟输出。 下面是一个运行频率为10MHz的100位DAC的电路板设置。
在100MHz频率下,FPGA每10ns向DAC提供一个新的10位值。
DAC输出模拟信号,对于周期性信号,奈奎斯特限值表示可以达到高达50MHz的速度。
一个简单的DDS
DDS 通常用于生成周期性信号。 现在,让我们尝试一些简单的东西并生成一个方波。
module SimpleDDS(DAC_clk, DAC_data);
input DAC_clk;
output [9:0] DAC_data;
// let's create a 16 bits free-running binary counter
reg [15:0] cnt;
always @(posedge DAC_clk) cnt <= cnt + 16'h1;
// and use it to generate the DAC signal output
wire cnt_tap = cnt[7]; // we take one bit out of the counter (here bit 7 = the 8th bit)
assign DAC_data = {10{cnt_tap}}; // and we duplicate it 10 times to create the 10-bits DAC value
// with the maximum possible amplitude
endmodule
我们使用计数器的第 8 位来生成输出。 当计数器时钟频率为100MHz时,第8位以100MHz/2^8=390KHz的频率切换。 所以DAC输出是一个390KHz的方波信号。
现在,如果我们想要一个锯齿波,让我们用这行代码替换代码的最后两行:
assign DAC_data = cnt[9:0];
三角形信号也不难。
assign DAC_data = cnt[10] ? ~cnt[9:0] : cnt[9:0];
我们创建了一个 DSS,好吧。 但是,真实世界的 DDS 将允许我们:
创建任何形状的信号。
创建任何频率信号。
评论