基于FPGA的直接數(shù)字頻率合成技術(shù)設(shè)計
直接數(shù)字頻率合成(DirectDigital FraquencySyn-thesis?即DDFS,一般簡稱DDS)是從相位概念出發(fā)直接合成所需波形的一種新的頻率合成技術(shù)。它在相對帶寬、頻率轉(zhuǎn)換時間、相位連續(xù)性、正交輸出、高分辨率以及集成化等一系列性能指標(biāo)方面已遠(yuǎn)遠(yuǎn)超過了傳統(tǒng)頻率合成技術(shù)。當(dāng)累加器的N很大時,最低輸出頻率可達(dá)Hz、mHz?甚至μHz。也就是說:DDS的最低合成頻率接近于零頻。如果fc為50MHz, 那么當(dāng)N為48位時,其分辨率可達(dá)179nHz。轉(zhuǎn)換時間最快可達(dá)10ns的量級,這都是傳統(tǒng)頻率合成所不能比擬的。但它的不足之處是最高工作頻率會受限、噪聲和雜波不夠理想。
本設(shè)計采用ALTERA公司的FPGA芯片EP1K30TC-144來實現(xiàn)DDS技術(shù)。EP1K30芯片屬ALTERA公司的ACEX系列,該系列是ALTERA公司著眼于通信、音頻處理及類似場合應(yīng)用而推出的FPGA器件系列芯片,它采用0.22/0.18微米混合工藝,密度從10000門到100000門。所有ACEX系列器件均兼容64bit、66MHz的PCI,并支持鎖相環(huán)電路。ACEX1K采用查找表(LUT)和EAB(嵌入式陣列塊)相結(jié)合的結(jié)構(gòu),可用來實現(xiàn)存儲器、專用邏輯功能和通用邏輯功能,每個EBA能提供4096比特的存儲空間,每個LE包含4個輸入LUT、一個可編程的觸發(fā)器、進(jìn)位鏈和一個層疊鏈。合理運用進(jìn)位鏈能夠提高系統(tǒng)運行速度。
EP1K30TC-144的最大系統(tǒng)門數(shù)為119000,它有1728個邏輯宏單元數(shù)和5個嵌入式陣列塊,最大可提供2kB的ROM/RAM位,因而可完全滿足DDS設(shè)計的要求。
1?。模模拥膶崿F(xiàn)過程
圖1為DDS系統(tǒng)的基本原理圖,圖中的相位累加器由N位全加器和N位累加寄存器級聯(lián)而成,可對頻率控制字的2進(jìn)制碼進(jìn)行累加運算,是典型的反饋電路,產(chǎn)生的累加結(jié)果的高M位作為ROM查找表的取樣地址值,而此查找表中儲存了一個周期的正弦波幅度值。顯然,此處存儲器ROM可以看作一個從相位到正弦幅值的轉(zhuǎn)換器。這樣,用ROM的輸出值來驅(qū)動DAC,然后經(jīng)濾波即可轉(zhuǎn)換成所需要的模擬正弦波形;同時N位累加輸出又可作為全加器的下一輪數(shù)據(jù)與頻率數(shù)據(jù)相加,直到相位累加器加滿產(chǎn)生溢出,從而完成一個周期,也就是DDS信號的頻率周期。
2 DDS在FPGA中的實現(xiàn)
考慮到本系統(tǒng)的規(guī)模以及以后的擴展需要,該系統(tǒng)中的DDS電路采用VHDL硬件描述語言來實現(xiàn),因為VHDL語言設(shè)計的電路模塊可以方便地移植到不同的FPGA芯片中。由于硬件原因,本系統(tǒng)的最高頻率為100kHz,因此,采用常規(guī)設(shè)計即可滿足要求,但若要應(yīng)用于高速系統(tǒng),還要采用一些提高系統(tǒng)運行速度的措施,如采用流水線技術(shù),即在設(shè)計中把延時較大的組合邏輯塊切割成兩塊大致相等的組合邏輯塊,并在這兩個邏輯塊中插入觸發(fā)器,也可通過多個觸發(fā)器時鐘來提高系統(tǒng)速度,還可以采用ALTREA 公司的FPGA器件所特有的進(jìn)位鏈來設(shè)計高速電路。
圖2所示為一個具有頻率、相位與幅度調(diào)制的DDS系統(tǒng)的FPGA組成框圖。它的頻率調(diào)制可以在調(diào)諧寄存器與相位累加器之間插入一加法器來實現(xiàn),頻率調(diào)制與相位調(diào)制有相同的分辨率,因此,頻率可以覆蓋整個調(diào)諧頻段。相位調(diào)制器可通過在相位累加器后插入一個加法器來實現(xiàn)。幅度調(diào)制則是在正弦查找表后插入一個乘法器來實現(xiàn)。該系統(tǒng)具有高精度、高穩(wěn)定性等特點。
2.1 ROM查找表的設(shè)計
ROM查找表在整個設(shè)計中是一個比較重要的部分。為了保證波形的平滑,設(shè)計時可將一個周期分為1024個點。但是,點數(shù)太多時,用文本方式輸入可能有很多困難。因此,應(yīng)當(dāng)用C語言描述正弦方程式,最后再將其轉(zhuǎn)化為所需的mif文件。以下是其C語言的源程序:
main()
{int i;float s;
for(i=0;i<1024;i++)
{ s = sin(atan(1)*8*i/1024);
......
2.2 DDS主模塊設(shè)計
DDS主模塊部分可根據(jù)上述原理,采用VHDL來描述,以下是部分源程序:
BEGIN
PROCESS (clk)
BEGIN
IF(clk'event AND clk='1') THEN
\\時鐘上升沿觸發(fā)
freqw<=freqin;
acc<=acc+freqw; \\開始累加
END IF;
END PROCESS;
romaddr<=acc(adder width-1 downto adder width-10);? \\累加結(jié)果的高11位作為
查找表的地址位
i_rom:lpm_rom \\調(diào)用ROM查找表
......
2.3 DDS控制模塊設(shè)計
DDS部分的系統(tǒng)控制是根據(jù)所需要的功能(如相位調(diào)制、幅度調(diào)制等)要求而設(shè)計的,這一點也是利用了FPGA的靈活性。其部分程序如下:
COMPONENT ddsc IS \調(diào)用DDS主模塊
......
END COMPONENT ;
SIGNAL clkcnt :integer RANGE 4 DOWNTO 0;
\\內(nèi)部信號定義
SIGNAL clk:std_logic;
SIGNAL freqind:std_logic_vector(15 DOWNTO 0);?
BEGIN
i_ddsc:ddsc \\調(diào)用DDS主模塊
PORT MAP(clk=>clk,ddsout =>ddsout,freqin=>freqind);
clk<=sclk; \\連接內(nèi)部端口
PROCESS (sclk)
BEGIN
IF?sclk'event AND sclk='1' THEN
\\系統(tǒng)時鐘的上升沿觸發(fā)
freqind<=fpin;
END IF;
3 結(jié)論
本系統(tǒng)在頻率不高于100kHz時能產(chǎn)生精確的正弦波形,而且十分穩(wěn)定。由于基準(zhǔn)時鐘為50MHz,且分辨率為16位,因此,該系統(tǒng)能產(chǎn)生的最低頻率為500Hz,若要產(chǎn)生更低頻率及更精確的波形,可以提高分辨率并相應(yīng)減小基準(zhǔn)時鐘,這在FPGA中實現(xiàn)起來相當(dāng)容易。
實踐證明:用FPGA設(shè)計DDS電路較采用專用DDS芯片更為靈活。因為,只要改變FPGA中的ROM數(shù)據(jù),DDS就可以產(chǎn)生任意波形,因而具有相當(dāng)大的靈活性。相比之下:FPGA的功能完全取決于設(shè)計需求,可以復(fù)雜也可以簡單,而且FPGA芯片還支持在系統(tǒng)現(xiàn)場升級,雖然在精度和速度上略有不足,但也能基本滿足絕大多數(shù)系統(tǒng)的使用要求。另外,將DDS設(shè)計嵌入到FPGA芯片所構(gòu)成的系統(tǒng)中,其系統(tǒng)成本并不會增加多少,而購買專用芯片的價格則是前者的很多倍。因此,采用FPGA來設(shè)計DDS系統(tǒng)具有很高的性價比。