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