基于FPGA的DDS任意波形發(fā)生器_第1頁
基于FPGA的DDS任意波形發(fā)生器_第2頁
基于FPGA的DDS任意波形發(fā)生器_第3頁
基于FPGA的DDS任意波形發(fā)生器_第4頁
基于FPGA的DDS任意波形發(fā)生器_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、西北工業(yè)大學(xué) 電子信息學(xué)院學(xué)院 08021101班課 程 設(shè) 計 報 告題 目: 學(xué) 院: 班 級: 學(xué)生(學(xué)號): 學(xué)生(姓名): 學(xué)生(學(xué)號): 學(xué)生(姓名): 摘 要DDS采用全數(shù)字技術(shù),并從相位角度出發(fā)進行頻率合成,DDS的設(shè)計大多是應(yīng)用HDL對其進行邏輯描述,整個設(shè)計可以實現(xiàn)參數(shù)改變和設(shè)計移植。利用時鐘信號作為地址計數(shù)器的計數(shù)時鐘,地址計數(shù)器的輸出作為波形存儲器的掃描地址,波形存儲器輸出相應(yīng)地址的數(shù)字幅度序列,再經(jīng)過數(shù)模轉(zhuǎn)換成模擬階梯波形,最后通過低通濾波器平滑濾波得到最后的輸出波形本文所設(shè)計的內(nèi)容就是基于Altera公司的現(xiàn)場可編程門陣列(FPGA)實現(xiàn)數(shù)字信號發(fā)生器的設(shè)計,F(xiàn)PG

2、A具有密度高,功耗低,體積小,可靠性高等特點,設(shè)計時可以不必過多考慮具體硬件連接;本設(shè)計中應(yīng)用Verilog硬件描述語言進行描述,使該數(shù)字信號發(fā)生器可以產(chǎn)生正弦波、方波、三角波、鋸齒波四個獨立的波形,并能對所產(chǎn)生的四種波形的頻率和進行調(diào)節(jié)。設(shè)計輸出頻率范圍是1kHz10kHz,步進是1KHZ,測量的結(jié)果在數(shù)碼管上顯示 。關(guān)鍵詞: FPGA DDS 相位累加 ROM表 Verilog 目 錄i. 課程設(shè)計目的   4 ii. 設(shè)計任務(wù)與要求 4 iii. 方案設(shè)計與論證 5 iv. 單元電路設(shè)計與參數(shù)計算 9 v. 遇到問題的解決方法&

3、#160;17 vi. 結(jié)論與心得  18 vii. 參考文獻 18 題目:波形發(fā)生器一、 課程設(shè)計目的 1)鞏固和加深所學(xué)數(shù)字電子技術(shù)課程的基本知識,提高綜合運用所學(xué)知識的能力;2)提高獨立解決工程實際問題的能力3)培養(yǎng)學(xué)習(xí)能力,掌握FPGA設(shè)計的方法和技巧。掌握verilog語言。4)調(diào)試電路,發(fā)現(xiàn)問題。解決問題。二、 設(shè)計任務(wù)與要求1、 顯示學(xué)號2. 根據(jù)按鍵輸出波形具體要求:1、 采用數(shù)碼管顯示2、 循環(huán)顯示2個人的學(xué)號后四位3、 根據(jù)開關(guān)輸入不同,分別輸出正弦波、方波、三角波(頻率=1KHz)4、 根據(jù)按鍵改變頻率(頻率變化范圍:1KHz-10KHz,每

4、次頻率變化1KHz)5、 輸出頻率在數(shù)碼管上顯示 三、 方案設(shè)計與論證1、 學(xué)號循環(huán)變化的實現(xiàn):方案一:采用計數(shù)器計數(shù),分別控制四個數(shù)碼管移位循環(huán)顯示優(yōu)點:方案簡單,容易實現(xiàn)。方案二:直接給數(shù)碼管賦值顯示學(xué)號,設(shè)計時鐘頻率,控制跳變。我們選擇方案一。開發(fā)板硬件結(jié)構(gòu)如上圖所示。2、 波形變化及頻率變換的實現(xiàn):方案一:(一) 總體方案實現(xiàn)及系統(tǒng)框圖該設(shè)計以FPGA開發(fā)平臺為核心,將各波形的幅值相位量化數(shù)據(jù)存儲在ROM內(nèi),按照設(shè)定頻率,以相應(yīng)頻率控制字k為步進,對相位進行累加,以累加相位值作為地址碼讀取存放在存儲器內(nèi)的波形數(shù)據(jù),經(jīng)DA轉(zhuǎn)換和幅度控制、濾波即可得到所需波形。波形發(fā)生器采取全數(shù)字化結(jié)構(gòu),

5、用硬件描述語言Verilog設(shè)計實現(xiàn)其頻率可調(diào)可顯示。經(jīng)開發(fā)平臺的DA轉(zhuǎn)化和外加濾波整形處理波形數(shù)據(jù),理論上能夠?qū)崿F(xiàn)任意頻率的各種波形。DDS電路一般由參考時鐘、相位累加器、波形存儲器、D/A轉(zhuǎn)換器(DAC)和低通濾波器(LPF)組成7。其結(jié)構(gòu)框圖如圖2.5所示。圖2.5 DDS基本結(jié)構(gòu)框圖其中,為參考時鐘頻率,為頻率控制字,為相位累加器位數(shù),為波形存儲器位數(shù),為波形存儲器的數(shù)據(jù)位字長和D/A轉(zhuǎn)換器位數(shù)。(二)直接數(shù)字頻率合成技術(shù)原理DDS系統(tǒng)中的參考時鐘通常由一個高穩(wěn)定度的晶體振蕩器來產(chǎn)生,用來作為整個系統(tǒng)各個組成部分的同步時鐘。頻率控制字(Frequency Control Word,F(xiàn)C

6、W)實際上是二進制編碼的相位增量值,它作為相位累加器的輸入累加值。相位累加器由加法器和寄存器級聯(lián)構(gòu)成,它將寄存器的輸出反饋到加法器的輸入端實現(xiàn)累加的功能。在每一個時鐘脈沖,相位累加器把頻率字累加一次,累加器的輸出相應(yīng)增加一個步長的相位增量,由此可以看出,相位累加器的輸出數(shù)據(jù)實質(zhì)上是以為步長的線性遞增序列(在相位累加器產(chǎn)生溢出以前),它反映了合成信號的相位信息。相位累加器的輸出與波形存儲器的地址線相連,相當(dāng)于對波形存儲器進行查表,這樣就可以把存儲在波形存儲器中的信號抽樣值(二進制編碼值)查出。在系統(tǒng)時鐘脈沖的作用下,相位累加器不停的累加,即不停的查表。波形存儲器的輸出數(shù)據(jù)送到D/A轉(zhuǎn)換器,D/A

7、轉(zhuǎn)換器將數(shù)字量形式的波形幅度值轉(zhuǎn)換成所要求合成頻率的模擬量形式信號,從而將波形重新合成出來。若波形存儲器中存放的是正弦波幅度量化數(shù)據(jù),那么D/A轉(zhuǎn)換器的輸出是近似正弦波的階梯波,還需要后級的低通平滑濾波器進一步抑制不必要的雜波就可以得到頻譜比較純凈的正弦波信號。圖2.6所示為DDS各個部分的輸出信號。由于受到字長的限制,相位累加器累加到一定值后,就會產(chǎn)生一次累加溢出,這樣波形存儲器的地址就會循環(huán)一次,輸出波形循環(huán)一周。相位累加器的溢出頻率即為合成信號的頻率??梢?,頻率控制字K越大,相位累加器產(chǎn)生溢出的速度越快,輸出頻率也就越高。故改變頻率字(即相位增量),就可以改變相位累加器的溢出時間,在參考

8、頻率不變的條件下就可以改變輸出信號的頻率。圖2.6 DDS各部分輸出波形DDS系統(tǒng)的優(yōu)點有很多,它的很多特性是其他頻率合成技術(shù)所沒有的,其中最主要的特性有以下三點:(1)DDS技術(shù)可以用于產(chǎn)生任意波形基于前面對DDS系統(tǒng)的基本結(jié)構(gòu)分析,很容易理解,只要改變存儲在波形存儲器中的波形數(shù)據(jù),就可以改變輸出波形。所以對于任何周期性波形,只要滿足采樣定理,都可以利用DDS技術(shù)來實現(xiàn)。(2)DDS系統(tǒng)具有很高的頻率分辨率DDS系統(tǒng)輸出頻率的分辨率和頻點數(shù)隨相位累加器的位數(shù)成指數(shù)增長,由可知,在系統(tǒng)時鐘頻率不變的情況下,只要增大相位累加器的位數(shù),就可以得到幾乎是任意小的頻率分辨率,可以滿足精細頻率控制的要求

9、。DDS如此精細的頻率分辨率,使其輸出頻率已十分逼近連續(xù)變化。(3)輸出頻率切換速度快且相位保持連續(xù)與鎖相頻率合成相比,由于DDS系統(tǒng)是一個開環(huán)系統(tǒng),所以當(dāng)一個新的頻率控制字送到時,它會迅速合成這個新的頻率,實際的頻率切換時間可以達ns級。同時,頻率切換時,DDS系統(tǒng)的輸出波形的相位是連續(xù)的。DDS系統(tǒng)的頻率字改變時,輸出波形的變化過程可以用圖2.12描述。圖2.12 頻率控制字改變時累加器的輸出值和輸出波形的變化(仿真)在波形輸出到點時,頻率字發(fā)生了改變(變?。?,相位累加器的累加值即相位步進變小,其輸出值斜率也變小,系統(tǒng)的輸出波形的頻率也在同時刻變小。DDS系統(tǒng)在頻率字發(fā)生改變后的一個時鐘周

10、期,其輸出頻率就可以就轉(zhuǎn)換到了新的頻率上,也即在頻率字的值改變以后,累加器在經(jīng)過一個時鐘周期后就按照新的頻率字進行累加,開始合成新的頻率。所以我們可以認為DDS的頻率切換是在一個系統(tǒng)時鐘周期內(nèi)完成的,系統(tǒng)時鐘頻率越高,切換速度越快。另外,從前面對DDS技術(shù)原理的分析可知,要改變輸出頻率,實際上改變的是頻率字,也就是相位增量。當(dāng)頻率字的值從改變?yōu)橹?,相位累加器是在已有的累積相位上,再對進行累加,相位函數(shù)曲線是連續(xù)的。從圖2.12也可以看出,只是在頻率字改變的瞬間相位函數(shù)曲線的斜率發(fā)生了突變,相位值并沒有發(fā)生跳躍,因此DDS能夠在頻率切換的過程中保持相位連續(xù),輸出波形能夠平滑地從一個頻率過渡到另

11、外一個頻率。(三)系統(tǒng)組成模塊 1、頂層模塊 頂層模塊是系統(tǒng)程序的主模塊,它負責(zé)將rom查找表、相位累加等模塊組裝在一起,通過調(diào)用的關(guān)系使它們組合成為一個有機的整體。在頂層模塊中,定義了參考時鐘的輸入,復(fù)位端口,波形輸出、頻率控制字等。 2、相位累加器模塊 相位累加器是決定系統(tǒng)性能的關(guān)鍵部分,主要是利用頻率控制字和相位控制字來累加出尋址地址。相位累加器在基準頻率信號clk的控制下以頻率控制字data為步長進行累加運算,產(chǎn)生需要的頻率控制數(shù)據(jù),在時鐘的控制下把累加的結(jié)果作為波形存儲器ROM的地址,實現(xiàn)對波形存儲器ROM的尋址。3、查找表 本模塊實現(xiàn)的是一個

12、rom存貯器,用于存儲采樣的波形數(shù)據(jù),并提供地址查找的功能。具體實現(xiàn)的過程: 1)首先使用數(shù)學(xué)工具計算得到波形采樣點,生成mif文件 2)導(dǎo)入數(shù)據(jù)采樣點,給每一個采樣點分配地址,并提供外部尋址的接口,此過程可以通過Quartas來輔助完成。方案二:采用VHDL語言直接編程實現(xiàn)我們選擇方案一實現(xiàn)設(shè)計要求。四、 單元電路設(shè)計與參數(shù)計算 一:16為DA轉(zhuǎn)換電路設(shè)計根據(jù)DA轉(zhuǎn)換的原理,設(shè)計R-2R電阻網(wǎng)絡(luò),實現(xiàn)數(shù)字量到模擬量的轉(zhuǎn)換。電路圖如上所示。 二:DDS輸出頻率關(guān)系式計算N=32 fc=50MHz輸出頻率1kHz1000=M*50000000/232 M=85899.35輸出

13、頻率2kHz2000=M*50000000/232 M=171798.7輸出頻率3kHz3000=M*50000000/232 M=257698.0輸出頻率4kHz4000=M*50000000/232 M=343597.4輸出頻率5kHz5000=M*50000000/232 M=429496.7輸出頻率6kHz6000=M*50000000/232 M=515396.1輸出頻率7kHz7000=M*50000000/232 M=601295.4輸出頻率8kHz8000=M*50000000/232 M=687194.8輸出頻率9kHz9000=M*50000000/232 M=773094

14、.1輸出頻率10kHz10000=M*50000000/232 M=858993.5通過控制M,來控制輸出頻率關(guān)系的變化。3 ROM的設(shè)計在QUARTUS環(huán)境下,新建文件,選擇建立一個mif 文件。選擇所建立的ROM的位數(shù)和字寬。在彈出的界面上編輯MIF文件并保存。 MIF是Mapinfo用來向外交換數(shù)據(jù)的一種中間交換文件。當(dāng)用戶在Mapinfo中將一張Mapinfo地圖表以MIF格式轉(zhuǎn)出來MIF文件中后,Mapinfo會同時在用戶指定的保存目錄下生成兩個文件(*.mif,*.mid)。其中*.mif文件保存了該Mapinfo表的表結(jié)構(gòu)及表中所有空間對象的空間信息(如:每個點對象的符號樣式、點

15、位坐標;每個線對象的線樣式、節(jié)點數(shù)據(jù)、節(jié)點坐標;區(qū)域?qū)ο蟮奶畛淠J?、每個區(qū)域包含的子區(qū)域個數(shù)及每個區(qū)域的節(jié)點數(shù)、節(jié)點數(shù)等)。而*.mid文件則按記錄順序保存了每個空間對象的所有屬性信息。這兩個文件都為文本性質(zhì)的文件,用戶可以通過相應(yīng)的文件讀寫方法實現(xiàn)對文件內(nèi)容的讀寫. mif文件是在編譯和仿真過程中作為存儲器(ROM或RAM)初始化輸入的文件,即memory initialization file.mif文件格式為:mif文件的創(chuàng)建很簡單,主要有兩種方法,一種,新建文件,選文本輸入,保存為mif文件。另一種方法是建立一個txt文件,然后將擴展名改成mif即可.4 數(shù)碼管顯示通過頻率控

16、制字M的大小換算頻率,控制數(shù)碼管的顯示,設(shè)計程序如下所示。 always(M) beginif(M=32'd85899) begin smg<=seg1;smg1<=segoff;end else if (M=32'd171798) begin smg<=seg2;smg1<=segoff; end else if (M=32'd257697) begin smg<=seg3;smg1<=segoff; end else if (M=32'd343596) begin smg<=seg4;smg1<=segoff;

17、 end else if (M=32'd429495) begin smg<=seg5;smg1<=segoff; end else if (M=32'd515394) begin smg<=seg6;smg1<=segoff; end else if (M=32'd601293) begin smg<=seg7;smg1<=segoff; end else if(M=32'd687192) begin smg<=seg8;smg1<=segoff; end else if(M=32'd773091) be

18、gin smg<=seg9;smg1<=segoff; endelse begin smg<=seg0;smg1<=seg1; end end五、遇到問題的解決方法第一,應(yīng)該注意傳遞函數(shù)中的輸出端口應(yīng)該是wire型的,如果定義為reg將會出錯。 設(shè)計初期,會定義出錯。第二,開始時波形數(shù)據(jù)按照圖放入初值時,有負數(shù)、小數(shù)等,當(dāng)裝入負數(shù)小數(shù)后在仿真中無法正確顯示數(shù)字。(解決辦法:將波形平移擴大將小數(shù)和負數(shù)換算成整數(shù)裝入即可顯示波形數(shù)據(jù)) 第三,頻率計算出錯,調(diào)試程序后發(fā)現(xiàn)步進值達不到要求,檢查后發(fā)現(xiàn)頻率控制字值設(shè)置錯誤。六、結(jié)論與心得對于我們來說,課程設(shè)計

19、是一次學(xué)習(xí)的機會。因為總會遇到一些自己從來沒有遇到的問題,鍛煉了自己解決問題的能力,也學(xué)會了與人合作。這次課設(shè)讓我加深了對verilog語言的理解,因為掌握不熟練,常會犯一些低級錯誤,在做的過程中,理解,并運用到實際中,真的提升了自己的能力。當(dāng)調(diào)試出錯時,我們認真分析問題,并請教老師和同學(xué),找到問題,并解決。做設(shè)計是個綜合的工程,需要從整體把握,將復(fù)雜逐漸變?yōu)楹唵?,做到最后,我們發(fā)現(xiàn)一開始的困難都不算什么了,因為我們更深的理解了設(shè)計概念和方法。在以后的學(xué)習(xí)中,我們會更加認真,用心。把知識靈活運用。真正做到設(shè)計。7、 參考文獻1 張永瑞 等著. 電子測量技術(shù)基礎(chǔ). 西安:西安電子科技大學(xué)出版社.

20、 2004. 1-152 林占江,林放 著. 電子測量儀器原理與使用. 北京:電子工業(yè)出版社. 2006. 1-213 張學(xué)峰,胡長江. 功能各異的各種任意波形發(fā)生器. 國外電子測量技術(shù). 2000,4. 17-184 毛敏. 基于DDS的高精度方波信號發(fā)生器的研究. 西安電子科技大學(xué)工學(xué)碩士論文. 2006. 5-65 張有正 等著. 頻率合成技術(shù). 北京:人民郵電出版社. 1984. 1-336杜慧敏、趙全良著基于Verilog的FPGA設(shè)計基礎(chǔ)西安電子科技大學(xué)出版社7王金明Verilog HDL程序設(shè)計教程人民郵電出版社八 附錄/*/ 文件名稱: DDS_wave_top.v/

21、 功能描述: 頂層設(shè)計/*/ module DDS_wave_top ( clk, /內(nèi)部時鐘 reset, set_waveform_key_in,/波形設(shè)置按鍵set_f_key_in,/頻率設(shè)置按鍵 dout,smg,smg1 );input clk;input reset;input set_waveform_key_in;input set_f_key_in;output dout;output smg;output smg1;wire clk;wire reset;wire 15:0 dout;wire 6:0 smg;wire 6:0 smg1;/*連接線*/wire set_w

22、aveform_key;/按鍵輸出wire set_f_key_in;wire 1:0 set_waveform;/波形輸出選擇wire 31:0f_control;wire set_f_key;/*元件例化*/ DDS u7 ( .clk(clk), .set_waveform(set_waveform),.f_control(f_control), .dds_data_out(dout),.smg(smg),.smg1(smg1) ); key_coding u8 ( .reset(reset), .set_waveform_key(set_waveform_key),.set_f_key

23、(set_f_key), .set_waveform(set_waveform),.f_control(f_control) ); key u9 ( .clk(clk), .key(set_waveform_key_in), .key_out(set_waveform_key) ); key1 u10 ( .clk(clk), .key1(set_f_key_in), .key_out1(set_f_key) /FIN_G3實際引腳 ); Endmodule/*/ 文件名稱: DDS.v/ 功能描述:DDS信號發(fā)生(f=50M*X/232,X->initial),步進1Khz/*/ mo

24、dule DDS(clk,set_waveform,f_control,dds_data_out,smg,smg1);input clk;/時鐘輸入input 1:0 set_waveform;/按鍵控制波形輸出選擇input 31:0 f_control;output 15:0 dds_data_out;output 6:0 smg;output 6:0 smg1;wire clk;wire 1:0 set_waveform;wire 31:0 f_control;wire 15:0 dds_data_out;/*連接線*/wire 31:0 f32_bus;/頻率控制字輸入 wire ke

25、y_out;/按鍵輸出 wire 31:0 reg32_out;/32位寄存器輸出wire 31:0 reg32_in;/32位寄存器輸入 /*/wire 15:0 sin_data;wire 15:0 tri_data;wire 15:0 squ_data;wire 15:0 saw_data;reg 15:0 dds_data_reg;reg 6:0 smg1;reg 6:0 smg;wire 31:0 M;/parameter 15:0 f32_bus_init=16'b0000_0000_0000_0001;/assign f32_bus31:16=f32_bus_init;/

26、初始化,高位置低 assign f32_bus31:0=f_control;/assign f32_bus31:0=f_control;/16'b101001111100010110;/低位可以設(shè)置DDS的輸出頻率(232/50,000,000=86->1Khz)/(20M=0110_0110_0110_0110_0110_0110_0110_0110)/(10M=0011_0011_0011_0011_0011_0011_0011_0011)/(1K=0000_0000_0000_0001_0100_1111_1000_1011)/*元件例化*/ adder_32 u1(.da

27、ta1(f32_bus),.data2(reg32_out),.sum(reg32_in); reg32 u2(.clk(clk),.data_in(reg32_in),.data_out(reg32_out);/*波形選擇*/ sin16 u3(.address(reg32_out31:22),.clock(clk),.q(sin_data);/正弦 tri16 u4(.address(reg32_out31:22),.clock(clk),.q(tri_data); squ16 u5(.address(reg32_out31:22),.clock(clk),.q(squ_data); st

28、w16 u6(.address(reg32_out31:22),.clock(clk),.q(saw_data); always (set_waveform,sin_data,tri_data,squ_data,saw_data) begin case (set_waveform) 2'b00: dds_data_reg<=sin_data; 2'b01: dds_data_reg<=tri_data; 2'b10: dds_data_reg<=squ_data; 2'b11: dds_data_reg<=saw_data; defaul

29、t:dds_data_reg<=sin_data; endcase end assign M=f_control;parameter seg0 = 7'h40,/數(shù)碼管顯示的表示 seg1 = 7'h79, seg2 = 7'h24, seg3 = 7'h30, seg4 = 7'h19, seg5 = 7'h12, seg6 = 7'h02, seg7 = 7'h78, seg8 = 7'h00, seg9 = 7'h10, segoff = 7'b1111111; always(M) begini

30、f(M=32'd85899) begin smg<=seg1;smg1<=segoff;end else if (M=32'd171798) begin smg<=seg2;smg1<=segoff; end else if (M=32'd257697) begin smg<=seg3;smg1<=segoff; end else if (M=32'd343596) begin smg<=seg4;smg1<=segoff; end else if (M=32'd429495) begin smg<=seg5;smg1<=segoff; end else if (M=32'd515394) begin smg<=seg6;smg1<=segoff; end else if (M=32'd601293) begin smg<=seg7;smg1<=segoff;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論