摘 要:在分析CORDIC算法原理基礎上,提出了一種基于CORDIC算法的流水型DDS結構,用以取代傳統(tǒng)的ROM查找表法。同時對輸入角度進行預處理,對迭代結果進行后處理,實現(xiàn)了整個周期的三角函數計算。設計采用verilog語言描述,在Quartus Ⅱ 9.0下編譯綜合,以及Modelsimaltera 6.4進行了仿真。結果表明,該算法比傳統(tǒng)算法具有計算角度范圍大、高速度和低資源的優(yōu)勢。
關鍵詞:CORDIC算法; 直接數字頻率合成; 循環(huán)迭代; 流水線
中圖分類號:TN91134 文獻標識碼:A 文章編號:1004373X(2012)22010403
直接數字頻率合成(Direct Digital Synthesis,DDS)技術,最早于1971年,美國學者J.Tierney等撰寫的“A Digital Frequency Synthesizer”一文中提出的[1]。它以有別于其他頻率合成方法具有低成本、低功耗、高分辨率和快速轉換時間等優(yōu)點而得到廣泛的運用。但是傳統(tǒng)的DDS主要運用查找表結構,其存放相位到幅度轉換的查找表ROM的大小和相位精度的位數成指數關系,很難實現(xiàn)數字信號處理中的高精度、高分辨率、實時運算的要求[2]。而采用CORDIC算法的DDS很容易滿足這些要求。
本文提出了基于CORDIC算法的16位流水線并行結構的DDS,替代了傳統(tǒng)的查找表結構。實現(xiàn)了高速,高精度,硬件實現(xiàn)簡單的DDS。CORDIC算法只需要硬件的加、減法器和移位器就可以完成正、余弦函數的計算。
1 CORDIC基本原理
CORDIC 算法最早由J.Volder 于1959年在美國航天控制系統(tǒng)設計中提出[3],其是一種用于計算運算函數的循環(huán)迭代算法。到1971年,Valther提出了統(tǒng)一的CORDIC算法[4]。如圖1所示,初始向量A(x0,y0)旋轉θ角度之后得到新的向量B(x1,y1),此向量滿足以下關系:x1
y1=cos θ-sin θ
sin θcos θx0
y0
=cos θ1-tan θ
tan θ1x0
y0
(1)
圖1 CORDIC算法圖解假設初始向量經過n次旋轉后得到新的向量,且每次旋轉的角度θi滿足條件tan θi=2-i,則第i次旋轉的角度θi=arctan 2-i。即cos θi=(1+2-2i)-12。引入s(i)={1;-1},s(i)=1時表示逆時針旋轉,s(i)=-1時表示順時針旋轉。則第i步旋轉的向量關系可以表示為:xi+1
yi+1=cos θi1-si2i
si2i1xi
yi
=(1+2-2i)-121-si2i
si2i1xi
yi
(2)式中cos θi=(1+2-2i)-12稱為校模因子,收斂于一個常數,即∏∞i=0(1+2-2i)-12≈0.607 3
這樣,算法的每一步就可以簡化為:xi+1
yi+1=1-si2i
si2i1xi
yi
(3)式中對于移動角度θ,只需要硬件的移位器、加法器和減法器就可以實現(xiàn)。現(xiàn)在引入變量zi表示第i次旋轉后剩余未旋轉的角度。則zi+1=zi-siarctan 2-i。
2 CORDIC算法的DDS實現(xiàn)
本文設計主要實現(xiàn)正、余弦信號的產生。在高速數字信號處理系統(tǒng)中,系統(tǒng)的運算速度,已經成為衡量系統(tǒng)性能的一個重要指標。CORDIC 算法的實現(xiàn)可分為迭代結構和流水結構2種[56] 。式(2)是CORDIC算法的迭代結構,傳統(tǒng)的方法是將角度集存放于查找表中,用狀態(tài)機跟蹤迭代過程。那么隨著迭代次數的增加,查找表的地址也隨著增加,而且每次迭代必須在前一次迭代完成后進行[7]。這不適合高速、高精度、實時處理的要求。而采用提高數據吞吐率的流水線結構,極大的提高了處理速度。本文設計了16級并行運算的流水線結構,相對于8級精度得到了很大的提高,但是增加了運算的復雜度。因此必需在精度和速度之間折中。流水結構只需要一個時鐘周期就能輸出一個數據。多級流水結構如圖2所示。
當n→∞旋轉角度和∑∞n=0arctan 2-n≈89.883°,所以只要迭代的次數足夠大,就可以實現(xiàn)-89.883°~89.883°之間的任意角度的轉換。在工程實際應用中,需要對-π~π之間任意角度值進行運算。由于sin θ和cos θ只需計算[0,π/2]便可恢復整個周期的值[810]。本文采用分象限法,將輸入角轉到第一象限之中,此稱為前處理。相位累加器對頻率控制字K進行線性累加,產生輸入相位,用16位的phase_in表示。利用它的最高兩位判斷該相位所在的象限,然后轉入到第一象限中。在同樣的精度下,可以節(jié)約硬件成本。前處理Verilog編寫的代碼如下:
begin
case(phase_in[15:14])
2'b00:phase_in_reg <= phase_in;
2'b01:phase_in_reg <= phase_in-16'h40_00;
2'b10:phase_in_reg <= phase_in-16'h80_00;
2'b11:phase_in_reg <= phase_in-16'hc0_00;
default:;
endcase
end
圖2 流水線CORDIC結構在流水結構中,給定初值x0=16′h4D_B9,y0=16′h0和z0=phase_in,經過16次迭代后得到sin θ和cos θ在第一象限中的值,然后恢復其整個周期的值,此稱為后處理。后處理的象限映射關系如表1所示。
3 仿真實驗
針對本文的DDS系統(tǒng)結構,編寫Verilog代碼,在 Quartus Ⅱ 9.0軟件環(huán)境下編譯生成硬件算法模塊。并利用Modelsimaltera 6.4軟件進行了功能仿真,通過改變頻率控制字來控制輸出信號的頻率。輸出波形如圖3所示。從仿真結果可見,這種基于CORDIC算法的流水型DDS是可行的,可以產生特性較好的波形。
頻率控制字為25時產生的波形進行誤差分析,見表2。誤差不超過5×10-4,精度相當高。由DDS原理可知,信號的輸出頻率為f0=fc2N×K,這里信號頻率fc=100 MHz,N為相位累加器位數,代碼中phase_in為16位,那么頻率分辨率為1 526 Hz。改率頻率控制字K,可以得到所需要頻率的信號。
4 結 語
本文設計了基于CORDIC算法的流水型DDS,它在硬件上實現(xiàn)時只需要移位器、加法器和減法器就可以產生高精度的正、余弦波形,尤其適合FPGA的實現(xiàn)。流水結構提高了數據的吞吐率,具有高精度、高速度、硬件資源消耗少等優(yōu)點,相對于傳統(tǒng)的查找表方法,CORDIC算法的流水型DDS具有明顯的優(yōu)勢和廣泛的運用前景。
參 考 文 獻
[1] 王旭東,潘明海.數字信號處理的FPGA實現(xiàn)[M].北京:清華大學出版社,2011.
[2] 何偉,逯金濤,李偉,等.基于CORDIC改進算法的DDS設計[J].電子技術應用,2011,37(1):6567.
[3] VOLDER J E. The CORDIC trigonometric computing technique \[J\]. IRE Trans. on Electronic Computers, 1959, EC8(3): 330334.
[4] WALTHER J S. A unified algorithm for elementary functions \[C\]// Proceeding of of Spring Joint Computer Conference. New York, NY, USA: SJCC, 1971: 379385.
[5] VLADIMIROVA T, TIGGELER H. FPGA implementation of sine and cosine generators using the CORDIC algorithm \[J/OL\]. \[20110630\]. http:// wenku.baidu.com/view/6a53cb.
[6] WASSATSCH A,DOLLING S. Area minimization of redundat CORDIC pipeline architectures \[C\]// Proceedings of International Conference on Computer Design: VLSI in Computers and Processors. Austin, TX: ICCD, 1998: 136141.
[7] 謝建華,阮圓.基于CORDIC 算法的流水線型DDS設計[J].微計算機信息,2008,24(29):286287.
[8] 田書林,王厚軍.一種基于CORDIC算法的信號發(fā)生器技術研究[J].儀器儀表學報,2002,23(5):150153.
[9] 車力,黨幼云.基于CORDIC算法的正余弦函數FPGA實現(xiàn)[J].西安工程大學學報,2010,24(6):805809.
[10] 陳立功,宋學瑞,王鑫.改進的CORDIC模塊實現(xiàn)的直接數字頻率合成器[J].計算機工程與應用,2010,46(17):5759.
作者簡介: 江金濃 男,1986年出生,碩士研究生。研究方向為嵌入式系統(tǒng)設計及其數字信號處理。
謝擴軍 男,1965年出生,副教授。主要從事物理電子學方面的研究和等離子體物理方面的研究工作。