主要介绍DDFS的主要结构
源代码在线查看: DDS在FPGA中的实现.txt
1.基本实现方法
2.电路图
3.软件实现流程图
4.器件清单
DDS在FPGA中的实现
考虑到本系统的规模以及以后的扩展需要,该系统中的DDS电路采用VHDL硬件描述语言来实现,因为VHDL语言设计的电路模块可以方便地移植到不同的FPGA芯片中。由于硬件原因,本系统的最高频率为100kHz,因此,采用常规设计即可满足要求,但若要应用于高速系统,还要采用一些提高系统运行速度的措施,如采用流水线技术,即在设计中把延时较大的组合逻辑块切割成两块大致相等的组合逻辑块,并在这两个逻辑块中插入触发器,也可通过多个触发器时钟来提高系统速度,还可以采用ALTREA 公司的FPGA器件所特有的进位链来设计高速电路。
图2所示为一个具有频率、相位与幅度调制的DDS系统的FPGA组成框图。它的频率调制可以在调谐寄存器与相位累加器之间插入一加法器来实现,频率调制与相位调制有相同的分辨率,因此,频率可以覆盖整个调谐频段。相位调制器可通过在相位累加器后插入一个加法器来实现。幅度调制则是在正弦查找表后插入一个乘法器来实现。该系统具有高精度、高稳定性等特点。
2.1 ROM查找表的设计
ROM查找表在整个设计中是一个比较重要的部分。为了保证波形的平滑,设计时可将一个周期分为1024个点。但是,点数太多时,用文本方式输入可能有很多困难。因此,应当用C语言描述正弦方程式,最后再将其转化为所需的mif文件。以下是其C语言的源程序:
main()
{int i;float s;
for(i=0;i<1024;i++)
{ s = sin(atan(1)*8*i/1024);
......
2.2 DDS主模块设计
DDS主模块部分可根据上述原理,采用VHDL来描述,以下是部分源程序:
BEGIN
PROCESS (clk)
BEGIN
IF(clk'event AND clk='1') THEN
\\时钟上升沿触发
freqw<=freqin;
acc<=acc+freqw; \\开始累加
END IF;
END PROCESS;
romaddr<=acc(adder width-1 downto adder width-10);