一種基于Spartan3E的DDS優(yōu)化設計
在高可靠應用領域,如果設計得當,將不會存在類似于MCU的復位不可靠和PC可能跑飛等問題。CPLD/FPGA的高可靠性還表現(xiàn)在,幾乎可將整個系統(tǒng)下載于同一芯片中,實現(xiàn)所謂片上系統(tǒng),從而大大縮小了體積,易于管理和屏蔽。所以,本文將在對DDS的基本原理進行深入理解的基礎上,采用多級流水線控制技術對DDS的VHDL語言實現(xiàn)進行優(yōu)化,同時考慮到系統(tǒng)設計中的異步接口的同步化設計問題,把該設計適配到Xilinx公司的最新90nm工藝的Spartan3E系列的FPGA中。
1 DDS基本原理及工作過程
一個基本的DDS由相位累加器、波形存儲器ROM、D/A轉換器和低通濾波器組成,如圖1所示。
![DDS基本組成模塊](http://editerupload.eepw.com.cn/fetch/20140213/225864_1_0.jpg)
在圖1中,fc為時鐘頻率,K為頻率控制字(N位),m為ROM地址線位數(shù),n為ROM數(shù)據(jù)線寬度(一般也為D/A轉換器的位數(shù)),f0為輸出頻率。DDS的基本工作過程如下:每來一個時鐘脈沖fc,加法器將頻率控制字K與累加寄存器輸出的累加相位數(shù)據(jù)相加,把相加后的結果送至累加寄存器的數(shù)據(jù)輸入端。其中相位累加器由N位加法器與N位累加寄存器級聯(lián)構成,累加寄存器將加法器在上一個時鐘脈沖作用后所產(chǎn)生的新相位數(shù)據(jù)反饋到加法器的輸入端,以使加法器在下一個時鐘脈沖的作用下繼續(xù)與頻率控制字相加。這樣,相位累加器在時鐘作用下,不斷對頻率控制字進行線性相位累加。由此可見,相位累加器在每一個時鐘脈沖輸入時,把頻率控制字累加一次,相位累加器輸出的數(shù)據(jù)就是合成信號的相位,相位累加器的溢出頻率就是DDS輸出的信號頻率。用相位累加器輸出的數(shù)據(jù)作為波形存儲器ROM的相位取樣地址,可把存儲在波形存儲器內的波形抽樣值(二進制編碼)經(jīng)查找表查出,完成相位到幅值轉換。波形存儲器的輸出送到D/A轉換器,D/A轉換器將數(shù)字量形式的波形幅值轉換成所要求合成頻率的模擬量形式信號,由低通濾波器濾除雜散波和諧波以后,輸出一個頻率為f0的正弦波。輸出頻率f0與時鐘頻率fc之間的關系滿足下式:
![一種基于Spartan3E的DDS優(yōu)化設計](http://editerupload.eepw.com.cn/fetch/20140213/225864_1_1.jpg)
由式(1)可見,輸出頻率f0由fc和K共同決定,保持時鐘頻率一定,改變一次K值,即可合成一個新頻率的正弦波。DDS的最小輸出頻率(頻率分辨率)△f可由方程△f=f0/2N確定。可見,頻率分辨率在fc固定時,取決于相位累加器的位數(shù)N。只要N足夠大,理論上就可以獲得足夠高的頻率分辨精度。另外,由采樣定理,合成信號的頻率不能超過時鐘頻率的一半,即f0≤f0/2,因此頻率控制值的最大值Kmax應滿足Kmax≤2N-1。
2 DDS的優(yōu)化設計與實現(xiàn)
采用VHDL硬件描述語言實現(xiàn)整個電路,不僅利于設計文檔的管理,而且方便了設計的修改和擴充,還可以實現(xiàn)在不同FPGA器件[4]之間的移植。以下采用VHDL語言,探討對FPGA實現(xiàn)DDS電路的三點優(yōu)化方法。
2.1 流水線累加器
在用FPGA設計DDS電路時,相位累加器是決定DDS電路性能的一個關鍵部分。為使輸出波形具有較高的分辨率,本系統(tǒng)采用32位累加器。但若直接用32位加法器構成累加器,則加法器的延時會大大限制累加器的操作速度。因此,這里引入了流水線算法,即采用4個8位累加器級聯(lián)結構,每級用一個8位累加器實現(xiàn)該部分相位相加,然后將進位值傳給下一級做進一步累加。這樣可大幅提高系統(tǒng)的工作速度。但由于累加器是一個閉環(huán)反饋電路,因此必須使用寄存器,以保證系統(tǒng)的同步、準確運行。具體實現(xiàn)如圖2所示。
![流水累加器原理](http://editerupload.eepw.com.cn/fetch/20140213/225864_1_2.jpg)
2.2 相位/幅度轉換電路
相位/幅度轉換電路是DDS電路中的另一個關鍵部分,設計中面臨的主要問題就是資源的開銷。該電路通常采用ROM結構,相位累加器的輸出是一種數(shù)字式鋸齒波,通過取它的若干位作為ROM的地址輸入,而后通過查表和運算,ROM就能輸出所需波形的量化數(shù)據(jù)。考慮到正弦函數(shù)的對稱性:在[0,2π]內,正弦函數(shù)關于x=π成奇對稱,在[0,π]內,關于x=π/2成軸對稱。因此,在正弦查找表中只須存儲相位在[0,π/2]的函數(shù)值。這樣,通過一個正弦碼表的前1/4周期就可以變換得到整個周期碼表,節(jié)省了近3/4的資源,非??捎^。具體實現(xiàn)如表1所示,為節(jié)省ROM資源,取相位累加器輸出的高8位做為ROM的輸入地址,其中最高位(MSB)控制對輸出信號符號的處理,次高位(MSB-1)控制對輸入地址的處理。
![一種基于Spartan3E的DDS優(yōu)化設計](http://editerupload.eepw.com.cn/fetch/20140213/225864_1_3.jpg)
architecture Behavioral of rom is
signal sin:STD_LOGIC_VECTOR(8 downto 0);
signal temp:STD_LOGIC_VECTOR(5 downto 0);
begin
temp=phase when MSB-1=′0′ else
not phase;
process(temp)
begin
case temp is
when ″000000″=>
sin=″000000000″;
…… --正弦查找表由MATLAB生成
end case;
end process;
data_out=″0″ sin when MSB=′0′ else
″1″ not sin+″000000001″;
end Behavioral;
2.3 同步接口電路設計
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論