日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于FPGA的DDS设计

發布時間:2023/12/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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 endmodule

5.仿真波形、


????????輸出頻率驗證:測量仿真正弦波的周期,計算輸出頻率;與用公式計算出的輸出頻率比較。若相等,則設計正確。

? ? ? ? 輸出相位驗證:ROM深度為4096,圖中PwordB=1024,理論上DataB的相位為90度。從圖中可以看出DataB的相位確實為90度,所以設計正確。

總結

以上是生活随笔為你收集整理的基于FPGA的DDS设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。