夏少峰,黃世震
(福州大學物理與信息工程學院,福州 350002)
在現代數字信號處理中,特別是在通信、雷達和導航等系統中高精度的DDS有著廣泛的應用。近年來隨著電子技術的迅速發展,傳統的查表、多項式展開或近似的方法漸漸不能適應現代電子系統在速度、精度、簡單性和高效實現方面的綜合要求,而用CORDIC算法實現的DDS系統則能很好的兼顧這些方面,由于該算法僅涉及移位與加減運算,便于軟硬件實現。因而受到了人們的廣泛關注。目前該算法已經應用到FFT、DCT、DWT、DDFS以及極化調制等諸多領域。
本文先介紹DDS的原理,然后再從CORDIC算法的基本原理出發,論述了其流水線結構的FPGA實現的具體方法及其system generator模型,文中的模型經ISE編譯并經過modelsim驗證通過,仿真結果表明文中的設計方法是完全可行的,且運算結果具有較高的精度。
DDS一般由相位累加器、相幅轉換器組成。具體工作原理為:相位累加器在時鐘控制下以頻率控制字為步長進行累加,累加的結果經過量化處理后送入相幅轉換器輸出為正弦和余弦波形。 DDS的輸出頻率為F=FcwFclk/2N,頻率分辨率Δf=Fclk/2N,其中Fcw為頻率控制字, Fclk為系統時鐘頻率, N為頻率控制字的字長。
傳統的相幅轉換器采用查找表結構,為了達到高分辨率和較高的頻譜程度, Fcw一般取值較大,本文的頻率控制字為32位,如果存儲全部的正、余弦值,需要大量的ROM資源,這在實際應用是不現實的。而采用CORDIC算法代替查找表結構的相幅轉換器既能滿足高精度、高分辨率、實時運算的要求,又減少了ROM資源,是一種好的實現方法。
CORDIC算法主要用于三角函數、對數、指數函數的計算。它的工作模式分為圓周模式和矢量模式。 DDS產生的正、余弦信號主要采用圓周模式。具體原理如下:初始向量A(xi, yi)依據一定的角度序列順時針或逆時針旋轉, 逐漸逼近目標角度B(xi+1, yi+1)。假設旋轉N次,每次的旋轉角度為θi,則第i次的旋轉公式表示為:



經過約定tanθ=2-i,即θi=arctan2-i,提出cosθi后di決定了旋轉方向, di=+1表示按順時針方向旋轉, di=-1表示按逆時針方向旋轉,其中di的數值由zi的符號位決定,在高速數字信號迭代結果后乘以模矯正因子:

對于一個數字系統,系統的運算速度已經成為衡量系統性能的一個重要指標。而采用流水線設計是提高其運算速度的有效方法。流水線設計方法的基本思想是將一個完整的操作分成若干個時間上均衡的分段操作,從流水線的起點連續地輸入,流水線的各操作段以重疊方式執行。這使得操作執行速度只與流水線輸入的速度有關,而與處理所需的時間無關。這樣,在理想的流水操作狀態下其運行效率很高。
相位累加器由32位加法器和寄存器組成,其中又加入了抖動電路,如圖1所示。因為相位截斷給輸出信號引入了周期性的雜散,因此設法破壞雜散的周期性及其與信號的相關性,可以有效地抑制相位截斷帶來的誤差。抖動注入能打破相位截斷誤差的周期性,采用抖動注入后的雜散抑制可達到與增加2 bit相位尋址相同的效果。在每次累加器溢出時,產生一個隨機整數加到累加器上,使相位累加器的溢出隨機性的提前,從而打破周期性,抑制了雜散。

圖1 相位累加器
相幅轉換器設計采用圖2所示的結構, 截位器truncate截取相位累加器累加后結果的高16位,作為相幅轉換器的相位輸入。

圖2 相幅截位器
由于 CORDIC算法所能覆蓋的角度范圍為[ -99.8°, +99.8°],為了能夠達到[ -180°, +180°]角度的全覆蓋,本module采用分象限法來解決角度覆蓋問題。文中采用兩個truncate模塊來實現角度的轉換,即在16位相位輸入中用truncate1來截取高2位作為輸出波形的相位控制信號。用truncate4截取低14位用來代表第一象限的[0°, 90°]。通過分析控制信號與三角函數之間的關系,來控制輸出角度范圍在[ -180°, +180°]內。另外由于CORDIC算法采用了流水線結構,導致了16(圖中18表示還有實現因子k所引入的兩個時鐘延時)個時鐘周期的延時,為了保證控制信號能夠與CORDIC運算器輸出同步,在控制器后插入了一個18個時鐘周期的延時單元。通過延時后的兩個控制信號控制輸出完整的正、余弦波形。具體的控制邏輯電路如圖3所示。

圖3 輸出轉換器
CORDIC運算器設計采用圖4所示結構, 圖4上部是16階中的第2階,由于CORDIC算法中每一次的迭代公式都一樣,所以其他16階結構是完全相同,且只有移位和加/減運算,易于采用流水線技術來提高其運算速度。其中加減法器上所加的寄存器即是用來實現流水線操作的。圖4下部為迭代次數N=16時的全流水線結構。
設定初始向量X0=1?215、Y0=0、Z0=θ,經過N次迭代后, Xn=cosθ、Yn=sinθ、Zn=0。 (cordic_gain實現乘模矯正因子功能)CORDIC運算器輸入角度范圍為[0°, 90°], 輸出為該角度范圍內的正、余弦波形。

圖4 CORDIC運算器設計
本仿真環境是matlab7.5.0 的simulink通信仿真工具箱。用matlab集成工具sptool查得輸出正旋波的頻域結果如圖5所示,從圖5 中可以看到此方法完全實現了所需的正旋波,并且cordic產生的正弦信號的無雜散動態范圍SFDR(無雜散動態范圍)約為-83 db。

圖5 頻域仿真結果
另外用matlab集成工具system generator直接生成verilog代碼并在modelsim中進行仿真,得到的局部仿真結果如圖6所示。從結果可以看出,成功的用system generator工具實現了cordic算法的dds發生器。

圖6 modelsim仿真結果
文中介紹了一種新型的算法級的FPGA設計方法,并成功的利用system generator完成了cordic算法的DDS設計,給出了詳細的設計過程,而且對數字部分進行了仿真。這種方法的優點在于它可以從系統框圖(模型)直接轉化成HDL語言,省去了代碼的繁雜編寫任務,實現了系統的快速設計。
本文作者創新點,加入了兩個關鍵技術:抖動注入和1/4象限旋轉覆蓋,此方法既提高了輸出信號的SFDR,又節省了硬件資源。
[ 1] 門愛東,楊波,全子一.數字信號處理[ M] .北京:人民郵電出版社, 2003.
[ 2] 胡廣書.現代信號處理教程[ M] .北京:清華大學出版社, 2004.
[ 3] 張雅綺,李鏘譯.(美)Michael D Ciletti著.Verilog HDL高級數字設計[ M] .北京:電子工業出版社, 2005.
[ 4] 田耕,徐文波,張延偉.無線通信FPGA設計[ M] .北京:電子工業出版社, 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.