基于FPGA的DDS设计
1. 簡介
? ? ? ? DDS(direct digital synthesizer),直接數字合成器,實現快速頻率切換,容易實現頻率、相位、幅度的數控調制。DDS在通信領域應用尤為廣泛。
2.DDS原理
????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2.1 基本DDS結構
????????
????????基本公式:?
?????????是輸出信號頻率,是相位增量,為時鐘頻率,N是相位累加器的數據位寬,也是頻率輸入字的數據位寬。
? ? ? ? 下面采用更形象的方式理解這個公式。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2.1 32個采樣點的正弦波形
????????
????????
????????假設=1,即=1000
? ? ? ? (1)若取點間隔為1,輸出頻率?
????????要輸出整個正弦波需要32ms(),則
? ? ? ? (2)若取點間隔為2,輸出頻率?
? ? ? ??,則
? ? ? ? (3)若取點間隔為0.5(同一個值取樣兩次),輸出頻率?
????????,則
????????
? ? ? ? 由上面分析和規律,清晰得到基本公式。
????????又稱頻率控制字(在上述形象的分析中,為取點間隔,也就是增量),也是相位增量。只要對相位的量化值進行簡單的累加運算,就可以得到正弦信號當前的相位值。相位累加器是整個DDS的核心。在圖2.1中,頻率控制字輸入還經過了一組同步寄存器(將頻率控制字延遲一拍),使得頻率控制字改變時不會干擾相位累加器正常工作。
? ? ? ? 波形數據表ROM完成相位-幅度的轉換,圖2.1中相位累加寄存器和相位控制字相加后作為ROM的地址。
3.Verilog代碼
module DDS_Module(Clk,Reset_n,Fword,//頻率控制字Pword,//相位控制字Data);input Clk;input Reset_n;input [31:0]Fword;input [11:0]Pword;output [13:0]Data;//頻率控制字同步寄存器reg [31:0]Fword_r;always@(posedge Clk )beginFword_r <= Fword;end////相位控制字同步寄存器reg [11:0]Pword_r;always@(posedge Clk )beginPword_r <= Pword;end////相位累加器reg [31:0]Freq_ACC;always@(posedge Clk or negedge Reset_n)beginif(!Reset_n)Freq_ACC <= 0;elseFreq_ACC <= Fword_r + Freq_ACC;end///波形數據表地址wire [11:0]Rom_Addr;assign Rom_Addr = Freq_ACC[31:20] + Pword_r;rom rom_inst1(.clka(Clk),.addra(Rom_Addr),.douta(Data));endmodule注意:相位累加器的高12位與相位控制字(Pword)相加作為ROM的地址。
rom數據寬度為14位,深度為4096(12位),用來存放正弦波數據。
4.testbench
`timescale 1ns / 1ps module DDS_Module_tb();reg Clk;reg Reset_n;reg [31:0]FwordA,FwordB ;reg [11:0]PwordA,PwordB;wire [13:0]DataA,DataB;DDS_Module DDS_Module_inst0(Clk,Reset_n,FwordA,//頻率控制字PwordA,//相位控制字DataA);DDS_Module DDS_Module_inst1(Clk,Reset_n,FwordB,//頻率控制字PwordB,//相位控制字DataB);initial Clk = 1;always #10 Clk = ~Clk;initial beginReset_n = 0;FwordA = 65536;PwordA = 0;FwordB = 65536;PwordB = 1024;#201;Reset_n = 1;#5000000;FwordA = 65536 * 1024;FwordB = 65536 * 1024;PwordA = 0;PwordB = 2048;#1000000;$stop;end endmodule5.仿真波形、
????????輸出頻率驗證:測量仿真正弦波的周期,計算輸出頻率;與用公式計算出的輸出頻率比較。若相等,則設計正確。
? ? ? ? 輸出相位驗證:ROM深度為4096,圖中PwordB=1024,理論上DataB的相位為90度。從圖中可以看出DataB的相位確實為90度,所以設計正確。
總結
以上是生活随笔為你收集整理的基于FPGA的DDS设计的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux 笔记本电脑_符合Linux的
- 下一篇: 自锁开关和轻触按键
