直接數(shù)字頻率合成技術(shù)(Direct Digital Synthesize,,DDS)是繼直接頻率合成技術(shù)和鎖相式頻率合成技術(shù)之后的第三代頻率合成技術(shù),。它采用全數(shù)字技術(shù),,并從相位角度出發(fā)進(jìn)行頻率合成。隨著微電子技術(shù)和數(shù)字集成電路的飛速發(fā)展,,以及電子工程領(lǐng)域的實際需要,,DDS日益顯露出優(yōu)于傳統(tǒng)頻率合成技術(shù)的一些性能,高分辨率,、極短的頻率切換時間,、相位噪聲低、便于集成等,,逐步成為現(xiàn)代頻率合成技術(shù)中的佼佼者,。
目前,DDS的設(shè)計大多是應(yīng)用HDL(Hardware Description Language)對其進(jìn)行邏輯描述,。整個設(shè)計可以很容易地實現(xiàn)參數(shù)改變和設(shè)計移植,,給設(shè)計者帶來很大的方便。Verilog HDL就是其中一種標(biāo)準(zhǔn)化的硬件描述語言,,它不僅可以進(jìn)行功能描述,,還可以對仿真測試矢量進(jìn)行設(shè)計。Altera公司開發(fā)的QuartusⅡ設(shè)計軟件,,提供了Verilog HDL的設(shè)計界面以及編譯平臺,,并且該公司還集成了可供程序下載的FPGA器件CYCLONEⅡ系列芯片,這樣大大縮短了DDS的設(shè)計周期,。
1 DDS的設(shè)計原理
DDS的原理圖如圖1所示。DDS實現(xiàn)頻率合成主要是通過查表的方式進(jìn)行的,。
正弦查詢表是一個只讀存儲器(ROM),,以相位為地址,存有1個或多個按0°~360°相位劃分幅值的正弦波幅度信息,。相位累加器對頻率控制字進(jìn)行累加運算,,若需要還可以加入相位控制字,得到的結(jié)果作為正弦波查詢表的地址,。正弦查詢表的輸出為數(shù)字化正弦幅度值,,通過D/A轉(zhuǎn)換器轉(zhuǎn)化為近似正弦波的階梯波,再通過低通濾波器濾除高頻成分和噪聲最終得到一個純正度很高的正弦波,。
1.1 建模
如圖2所示正弦波y=sin(2πx),,若以f量化的量化頻率對其幅度值進(jìn)行量化,一個周期可以得到M=f量化個幅度值,。將這些幅度值按順序存入到ROM,。相位累加器在參考時鐘的驅(qū)動下,每來1個脈沖,,輸出就會增加1個步長相位增量X,,輸出數(shù)據(jù)作為地址送入ROM中,,讀出對應(yīng)的幅度值形成相應(yīng)的波形。
1.2 參數(shù)設(shè)定
DDS輸出信號頻率:
其中,,X為頻率累加器設(shè)定值;N為相位累加器位數(shù);fc為參考時鐘頻率,。
例如,假定基準(zhǔn)時鐘為200 MHz,,累加器的位數(shù)為32,,頻率控制字X為:
0x08000000H,即為227,,則:
再設(shè)定頻率控制字X為0x80000000H,,即為231,則:
可見,,理論上通過設(shè)定DDS相位累加器位數(shù)N,、頻率控制字X和基準(zhǔn)時鐘fc的值,就可以得到任一頻率的輸出,。
頻率分辨率為:fres=fc/2N,,由參考時鐘和累加器的位數(shù)決定,當(dāng)參考時鐘的頻率越高,,相位累加器的位數(shù)越高,,所得到的頻率分辨率就越高。
1.3 方案的選擇
在利用FPGA制作DDS時,,相位累加器是決定DDS性能的一個關(guān)鍵部分,。一方面可以利用進(jìn)位鏈來實現(xiàn)快速、高效的電路結(jié)構(gòu),,同時長的進(jìn)位鏈會減少其他邏輯的布線資源,,限制整個系統(tǒng)速度的提高;另一方面可以利用流水線技術(shù)提高工作頻率,但系統(tǒng)頻率轉(zhuǎn)換速度會相對降低,。在選擇累加器實現(xiàn)方案時需要綜合考慮,。
正弦波查詢表ROM也是制作的重點。在FPGA中ROM表的尺寸隨著地址位數(shù)或數(shù)據(jù)位數(shù)的增加呈指數(shù)遞增,,如何在滿足性能的前提下節(jié)省資源開銷,。一方面通過相位累加器的輸出截斷方式,例如從32位的相位累加器結(jié)果中提取高16位作為ROM的查詢地址,,由此而產(chǎn)生的誤差會對頻譜純度有影響,,但是對波形的精度的影響是可以忽略的;另一方面可以根據(jù)信號周期對稱性來壓縮ROM的尺寸,這時系統(tǒng)硬件設(shè)計復(fù)雜度會有所增加,。因此,,需要選取合適的參數(shù)和ROM壓縮技術(shù),在滿足系統(tǒng)性能的前提下使得系統(tǒng)盡量優(yōu)化,。
2 Verilog HDL實現(xiàn)DDS模塊
2.1 相位累加器
上述為相位累加器的Verilog HDL功能實現(xiàn),,其中數(shù)據(jù)寬度為32位,。同時利用QuartusⅡ進(jìn)行波形仿真見圖3。對應(yīng)的模塊符號見圖4,。
2.2 ROM正弦查詢表
根據(jù)DDS的原理,,將正弦波形的量化數(shù)據(jù)存儲于波形查詢表ROM中,即可完成正弦波發(fā)生的功能,。Altera公司提供了LPM ROM(ROM兆函數(shù)),,這里只需借助Matlab生成.mif文件,并加載到LPM ROM中即可得到所需的正弦查詢表ROM,。
在Matlab中,,運行下面的語句可以得到儲存正弦波數(shù)字幅度值的.mif文件。例如產(chǎn)生214×12 b的正弦波0~27π幅度值,,語句如下:
由此而生成的rom.mif文件內(nèi)容是正弦波0~2π數(shù)字幅度值,,但是格式不符合.mif。文件的格式,,需要對其進(jìn)行修改,。.mif文件的格式如下:
這樣通過例化LPM ROM得到了正弦波查詢表ROM的模塊,地址寬度為14位,,輸出數(shù)據(jù)為12位,。模塊符號見圖5。
2.3 DDS頂層模塊的實現(xiàn)
上述代碼為DDS模塊的Verilog HDL頂層文件,。對應(yīng)的模塊圖見圖6,。
若需要利用NIOSⅡ?qū)ζ溥M(jìn)行控制,需要并將DDS模塊加載到NIOSⅡ的系統(tǒng)中,。例如,,通過NIOSⅡ為DDS模塊的頻率控制字freq和相位控制字phase置數(shù)。此時DDS的代碼應(yīng)改為:
模塊的輸入端口添加了寫信號iwr,、地址信號addr和與NIOSⅡ同步的時鐘信號iclk,這樣是為了將DDS模塊連接到Avalon總線上,,利用總線和NIOSⅡ進(jìn)行通信,。加載到NIOSⅡ系統(tǒng)之前,需要將該模塊進(jìn)行仿真和調(diào)試,。仿真結(jié)果如圖7所示,。
結(jié)論:
對于整個模塊的驅(qū)動時鐘,若時鐘源器件的頻率不符合實際需要,,需要再設(shè)計一個倍(分)頻器將其倍頻或是分頻,。例如現(xiàn)有時鐘源為50 MHz,可以使用FPGA中的PLL(鎖相環(huán))實現(xiàn)4倍頻得到200 MHz,。