当前位置:   article > 正文

基于FPGA的DDS设计_fpga dds

fpga dds

1. 简介

        DDS(direct digital synthesizer),直接数字合成器,实现快速频率切换,容易实现频率、相位、幅度的数控调制。DDS在通信领域应用尤为广泛。

2.DDS原理

        

                                                           图2.1 基本DDS结构

        

        基本公式: f_{out}=B_{\Delta \theta }\frac{f_{clk}}{2^{N}}

         f_{out}是输出信号频率,B_{\Delta \theta }相位增量,f_{clk}时钟频率,N是相位累加器的数据位宽,也是频率输入字的数据位宽。

        下面采用更形象的方式理解这个公式。

                                                        图2.1 32个采样点的正弦波形

        

        

        假设T_{clk}=1ms,即f_{clk}=1000

        (1)若取点间隔为1,输出频率?

        要输出整个正弦波需要32ms(T_{out}=32ms),则f_{out}=\frac{1s}{32ms}=\frac{1000}{2^{5}}*1

        (2)若取点间隔为2,输出频率?

        T_{out}=16ms,则f_{out}=\frac{1s}{16ms}=\frac{1000}{2^{5}}*2

        (3)若取点间隔为0.5(同一个值取样两次),输出频率?

        T_{out}=64ms,则f_{out}=\frac{1s}{16ms}=\frac{1000}{2^{5}}*0.5

        

        由上面分析和规律,清晰得到基本公式f_{out}=B_{\Delta \theta }\frac{f_{clk}}{2^{N}}

        B_{\Delta \theta }又称频率控制字(在上述形象的分析中,为取点间隔,也就是增量),也是相位增量。只要对相位的量化值进行简单的累加运算,就可以得到正弦信号当前的相位值。相位累加器是整个DDS的核心。在图2.1中,频率控制字输入还经过了一组同步寄存器(将频率控制字延迟一拍),使得频率控制字改变时不会干扰相位累加器正常工作。

        波形数据表ROM完成相位-幅度的转换,图2.1中相位累加寄存器和相位控制字相加后作为ROM的地址。

3.Verilog代码

  1. module DDS_Module(
  2. Clk,
  3. Reset_n,
  4. Fword,//频率控制字
  5. Pword,//相位控制字
  6. Data
  7. );
  8. input Clk;
  9. input Reset_n;
  10. input [31:0]Fword;
  11. input [11:0]Pword;
  12. output [13:0]Data;
  13. //频率控制字同步寄存器
  14. reg [31:0]Fword_r;
  15. always@(posedge Clk )
  16. begin
  17. Fword_r <= Fword;
  18. end
  19. //
  20. //相位控制字同步寄存器
  21. reg [11:0]Pword_r;
  22. always@(posedge Clk )
  23. begin
  24. Pword_r <= Pword;
  25. end
  26. //
  27. //相位累加器
  28. reg [31:0]Freq_ACC;
  29. always@(posedge Clk or negedge Reset_n)
  30. begin
  31. if(!Reset_n)
  32. Freq_ACC <= 0;
  33. else
  34. Freq_ACC <= Fword_r + Freq_ACC;
  35. end
  36. /
  37. //波形数据表地址
  38. wire [11:0]Rom_Addr;
  39. assign Rom_Addr = Freq_ACC[31:20] + Pword_r;
  40. rom rom_inst1(
  41. .clka(Clk),
  42. .addra(Rom_Addr),
  43. .douta(Data)
  44. );
  45. endmodule

注意:相位累加器的高12位与相位控制字(Pword)相加作为ROM的地址。

rom数据宽度为14位,深度为4096(12位),用来存放正弦波数据。

4.testbench

  1. `timescale 1ns / 1ps
  2. module DDS_Module_tb(
  3. );
  4. reg Clk;
  5. reg Reset_n;
  6. reg [31:0]FwordA,FwordB ;
  7. reg [11:0]PwordA,PwordB;
  8. wire [13:0]DataA,DataB;
  9. DDS_Module DDS_Module_inst0(
  10. Clk,
  11. Reset_n,
  12. FwordA,//频率控制字
  13. PwordA,//相位控制字
  14. DataA
  15. );
  16. DDS_Module DDS_Module_inst1(
  17. Clk,
  18. Reset_n,
  19. FwordB,//频率控制字
  20. PwordB,//相位控制字
  21. DataB
  22. );
  23. initial Clk = 1;
  24. always #10 Clk = ~Clk;
  25. initial begin
  26. Reset_n = 0;
  27. FwordA = 65536;
  28. PwordA = 0;
  29. FwordB = 65536;
  30. PwordB = 1024;
  31. #201;
  32. Reset_n = 1;
  33. #5000000;
  34. FwordA = 65536 * 1024;
  35. FwordB = 65536 * 1024;
  36. PwordA = 0;
  37. PwordB = 2048;
  38. #1000000;
  39. $stop;
  40. end
  41. endmodule

5.仿真波形、


        输出频率验证:测量仿真正弦波的周期,计算输出频率;与用公式f_{out}=B_{\Delta \theta }\frac{f_{clk}}{2^{N}}计算出的输出频率比较。若相等,则设计正确。

        输出相位验证:ROM深度为4096,图中PwordB=1024,理论上DataB的相位为90度。从图中可以看出DataB的相位确实为90度,所以设计正确。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/355867
推荐阅读
相关标签
  

闽ICP备14008679号