夏少峰,黃世震
(福州大學(xué)物理與信息工程學(xué)院,福州 350002)
在現(xiàn)代數(shù)字信號(hào)處理中,特別是在通信、雷達(dá)和導(dǎo)航等系統(tǒng)中高精度的DDS有著廣泛的應(yīng)用。近年來(lái)隨著電子技術(shù)的迅速發(fā)展,傳統(tǒng)的查表、多項(xiàng)式展開或近似的方法漸漸不能適應(yīng)現(xiàn)代電子系統(tǒng)在速度、精度、簡(jiǎn)單性和高效實(shí)現(xiàn)方面的綜合要求,而用CORDIC算法實(shí)現(xiàn)的DDS系統(tǒng)則能很好的兼顧這些方面,由于該算法僅涉及移位與加減運(yùn)算,便于軟硬件實(shí)現(xiàn)。因而受到了人們的廣泛關(guān)注。目前該算法已經(jīng)應(yīng)用到FFT、DCT、DWT、DDFS以及極化調(diào)制等諸多領(lǐng)域。
本文先介紹DDS的原理,然后再?gòu)腃ORDIC算法的基本原理出發(fā),論述了其流水線結(jié)構(gòu)的FPGA實(shí)現(xiàn)的具體方法及其system generator模型,文中的模型經(jīng)ISE編譯并經(jīng)過(guò)modelsim驗(yàn)證通過(guò),仿真結(jié)果表明文中的設(shè)計(jì)方法是完全可行的,且運(yùn)算結(jié)果具有較高的精度。
DDS一般由相位累加器、相幅轉(zhuǎn)換器組成。具體工作原理為:相位累加器在時(shí)鐘控制下以頻率控制字為步長(zhǎng)進(jìn)行累加,累加的結(jié)果經(jīng)過(guò)量化處理后送入相幅轉(zhuǎn)換器輸出為正弦和余弦波形。 DDS的輸出頻率為F=FcwFclk/2N,頻率分辨率Δf=Fclk/2N,其中Fcw為頻率控制字, Fclk為系統(tǒng)時(shí)鐘頻率, N為頻率控制字的字長(zhǎng)。
傳統(tǒng)的相幅轉(zhuǎn)換器采用查找表結(jié)構(gòu),為了達(dá)到高分辨率和較高的頻譜程度, Fcw一般取值較大,本文的頻率控制字為32位,如果存儲(chǔ)全部的正、余弦值,需要大量的ROM資源,這在實(shí)際應(yīng)用是不現(xiàn)實(shí)的。而采用CORDIC算法代替查找表結(jié)構(gòu)的相幅轉(zhuǎn)換器既能滿足高精度、高分辨率、實(shí)時(shí)運(yùn)算的要求,又減少了ROM資源,是一種好的實(shí)現(xiàn)方法。
CORDIC算法主要用于三角函數(shù)、對(duì)數(shù)、指數(shù)函數(shù)的計(jì)算。它的工作模式分為圓周模式和矢量模式。 DDS產(chǎn)生的正、余弦信號(hào)主要采用圓周模式。具體原理如下:初始向量A(xi, yi)依據(jù)一定的角度序列順時(shí)針或逆時(shí)針旋轉(zhuǎn), 逐漸逼近目標(biāo)角度B(xi+1, yi+1)。假設(shè)旋轉(zhuǎn)N次,每次的旋轉(zhuǎn)角度為θi,則第i次的旋轉(zhuǎn)公式表示為:
經(jīng)過(guò)約定tanθ=2-i,即θi=arctan2-i,提出cosθi后di決定了旋轉(zhuǎn)方向, di=+1表示按順時(shí)針?lè)较蛐D(zhuǎn), di=-1表示按逆時(shí)針?lè)较蛐D(zhuǎn),其中di的數(shù)值由zi的符號(hào)位決定,在高速數(shù)字信號(hào)迭代結(jié)果后乘以模矯正因子:
對(duì)于一個(gè)數(shù)字系統(tǒng),系統(tǒng)的運(yùn)算速度已經(jīng)成為衡量系統(tǒng)性能的一個(gè)重要指標(biāo)。而采用流水線設(shè)計(jì)是提高其運(yùn)算速度的有效方法。流水線設(shè)計(jì)方法的基本思想是將一個(gè)完整的操作分成若干個(gè)時(shí)間上均衡的分段操作,從流水線的起點(diǎn)連續(xù)地輸入,流水線的各操作段以重疊方式執(zhí)行。這使得操作執(zhí)行速度只與流水線輸入的速度有關(guān),而與處理所需的時(shí)間無(wú)關(guān)。這樣,在理想的流水操作狀態(tài)下其運(yùn)行效率很高。
相位累加器由32位加法器和寄存器組成,其中又加入了抖動(dòng)電路,如圖1所示。因?yàn)橄辔唤財(cái)嘟o輸出信號(hào)引入了周期性的雜散,因此設(shè)法破壞雜散的周期性及其與信號(hào)的相關(guān)性,可以有效地抑制相位截?cái)鄮?lái)的誤差。抖動(dòng)注入能打破相位截?cái)嗾`差的周期性,采用抖動(dòng)注入后的雜散抑制可達(dá)到與增加2 bit相位尋址相同的效果。在每次累加器溢出時(shí),產(chǎn)生一個(gè)隨機(jī)整數(shù)加到累加器上,使相位累加器的溢出隨機(jī)性的提前,從而打破周期性,抑制了雜散。
圖1 相位累加器
相幅轉(zhuǎn)換器設(shè)計(jì)采用圖2所示的結(jié)構(gòu), 截位器truncate截取相位累加器累加后結(jié)果的高16位,作為相幅轉(zhuǎn)換器的相位輸入。
圖2 相幅截位器
由于 CORDIC算法所能覆蓋的角度范圍為[ -99.8°, +99.8°],為了能夠達(dá)到[ -180°, +180°]角度的全覆蓋,本module采用分象限法來(lái)解決角度覆蓋問(wèn)題。文中采用兩個(gè)truncate模塊來(lái)實(shí)現(xiàn)角度的轉(zhuǎn)換,即在16位相位輸入中用truncate1來(lái)截取高2位作為輸出波形的相位控制信號(hào)。用truncate4截取低14位用來(lái)代表第一象限的[0°, 90°]。通過(guò)分析控制信號(hào)與三角函數(shù)之間的關(guān)系,來(lái)控制輸出角度范圍在[ -180°, +180°]內(nèi)。另外由于CORDIC算法采用了流水線結(jié)構(gòu),導(dǎo)致了16(圖中18表示還有實(shí)現(xiàn)因子k所引入的兩個(gè)時(shí)鐘延時(shí))個(gè)時(shí)鐘周期的延時(shí),為了保證控制信號(hào)能夠與CORDIC運(yùn)算器輸出同步,在控制器后插入了一個(gè)18個(gè)時(shí)鐘周期的延時(shí)單元。通過(guò)延時(shí)后的兩個(gè)控制信號(hào)控制輸出完整的正、余弦波形。具體的控制邏輯電路如圖3所示。
圖3 輸出轉(zhuǎn)換器
CORDIC運(yùn)算器設(shè)計(jì)采用圖4所示結(jié)構(gòu), 圖4上部是16階中的第2階,由于CORDIC算法中每一次的迭代公式都一樣,所以其他16階結(jié)構(gòu)是完全相同,且只有移位和加/減運(yùn)算,易于采用流水線技術(shù)來(lái)提高其運(yùn)算速度。其中加減法器上所加的寄存器即是用來(lái)實(shí)現(xiàn)流水線操作的。圖4下部為迭代次數(shù)N=16時(shí)的全流水線結(jié)構(gòu)。
設(shè)定初始向量X0=1?215、Y0=0、Z0=θ,經(jīng)過(guò)N次迭代后, Xn=cosθ、Yn=sinθ、Zn=0。 (cordic_gain實(shí)現(xiàn)乘模矯正因子功能)CORDIC運(yùn)算器輸入角度范圍為[0°, 90°], 輸出為該角度范圍內(nèi)的正、余弦波形。
圖4 CORDIC運(yùn)算器設(shè)計(jì)
本仿真環(huán)境是matlab7.5.0 的simulink通信仿真工具箱。用matlab集成工具sptool查得輸出正旋波的頻域結(jié)果如圖5所示,從圖5 中可以看到此方法完全實(shí)現(xiàn)了所需的正旋波,并且cordic產(chǎn)生的正弦信號(hào)的無(wú)雜散動(dòng)態(tài)范圍SFDR(無(wú)雜散動(dòng)態(tài)范圍)約為-83 db。
圖5 頻域仿真結(jié)果
另外用matlab集成工具system generator直接生成verilog代碼并在modelsim中進(jìn)行仿真,得到的局部仿真結(jié)果如圖6所示。從結(jié)果可以看出,成功的用system generator工具實(shí)現(xiàn)了cordic算法的dds發(fā)生器。
圖6 modelsim仿真結(jié)果
文中介紹了一種新型的算法級(jí)的FPGA設(shè)計(jì)方法,并成功的利用system generator完成了cordic算法的DDS設(shè)計(jì),給出了詳細(xì)的設(shè)計(jì)過(guò)程,而且對(duì)數(shù)字部分進(jìn)行了仿真。這種方法的優(yōu)點(diǎn)在于它可以從系統(tǒng)框圖(模型)直接轉(zhuǎn)化成HDL語(yǔ)言,省去了代碼的繁雜編寫任務(wù),實(shí)現(xiàn)了系統(tǒng)的快速設(shè)計(jì)。
本文作者創(chuàng)新點(diǎn),加入了兩個(gè)關(guān)鍵技術(shù):抖動(dòng)注入和1/4象限旋轉(zhuǎn)覆蓋,此方法既提高了輸出信號(hào)的SFDR,又節(jié)省了硬件資源。
[ 1] 門愛東,楊波,全子一.數(shù)字信號(hào)處理[ M] .北京:人民郵電出版社, 2003.
[ 2] 胡廣書.現(xiàn)代信號(hào)處理教程[ M] .北京:清華大學(xué)出版社, 2004.
[ 3] 張雅綺,李鏘譯.(美)Michael D Ciletti著.Verilog HDL高級(jí)數(shù)字設(shè)計(jì)[ M] .北京:電子工業(yè)出版社, 2005.
[ 4] 田耕,徐文波,張延偉.無(wú)線通信FPGA設(shè)計(jì)[ M] .北京:電子工業(yè)出版社, 2008.
[ 5] Volder J.The CORDIC Computing Technique[ J] .IRE Trans.Comput., Sept.1959.
[ 6] Despain A M.Fourier Tansform Computers Using CORDIC Iterations[ J] .IEEE Trans.Comput., May 1984.
[ 7] Ercegovac M D, Lang T.Implementation of Fast Angle Calculation and Rotation Using Online Cordic[ C] //Proc.ISCAS' 88, 2703-2706.