李慶鋒
(同濟大學(xué)電子科學(xué)與技術(shù)系,上海 201804)
CORDIC算法硬件電路實現(xiàn)及改進
李慶鋒
(同濟大學(xué)電子科學(xué)與技術(shù)系,上海 201804)
文章提出了一種新的基于CORDIC算法的硬件電路實現(xiàn)方法。首先介紹CORDIC算法及其原理,然后介紹了CORDIC算法的16級流水線結(jié)構(gòu)硬件電路實現(xiàn),最后介紹了一種新的改進型實現(xiàn)方法,可以有效在兼顧16級流水線結(jié)構(gòu)的高實時性優(yōu)點的同時,解決CORDIC算法本身對角度范圍的限制問題,同時在某種意義上也降低了電路的復(fù)雜度。
NCO;CORDIC算法;16級流水線結(jié)構(gòu)
數(shù)字控制振蕩器(NCO,Numerical Controlled Oscillator)是軟件無線電、直接數(shù)字頻率合成器(DDS,Direct Digital Synthesizer)、快速傅里葉變換(FFT,F(xiàn)ast Fourier Transform)等的重要組成部分,同時也是決定其性能的主要因素之一。NCO的作用是產(chǎn)生正交的正弦和余弦樣本,表達式如下:
其中,fLO為本地振蕩頻率,fs為信號進入混頻器的速率[1],通常fs=n.fLO。
一般來說,正弦波樣本產(chǎn)生有兩種方法,查表法和實時計算法。兩種方法各有優(yōu)缺點。查表法事先把正弦波樣本值存儲在ROM中,使用時根據(jù)正弦波相位及其步進值去搜取ROM中的正弦波樣本值。這種方法優(yōu)點是速度快,硬件電路簡單。缺點是如果在正弦波樣本值需要高精度、同時n很大的情況下,需要加大存儲的樣本值,這便增加了ROM的開銷,消耗內(nèi)存。另一種方法是實時計算法,這種方法理論上可以產(chǎn)生任意相位的正弦值,缺點是硬件電路復(fù)雜。
CORDIC算法(坐標旋轉(zhuǎn)數(shù)字計算方法)是一種用于計算一些常用的基本運算函數(shù)和算術(shù)操作的循環(huán)迭代算法。其基本思想是用一系列與運算基數(shù)相關(guān)的角度的不斷偏擺從而逼近所需旋轉(zhuǎn)的角度。其在硬件上只需要移位和加/減法即可完成正余弦的計算,硬件電路簡單,能很好地兼顧速度、精度、簡單、高效等方面。
CORDIC算法由J Volder于1959年提出,首先用于導(dǎo)航系統(tǒng),使得矢量的旋轉(zhuǎn)和定向運算不需要做查三角函數(shù)表、乘法、開方及反三角函數(shù)等復(fù)雜運算。J Walther在1974年用它研究了一種能計算出多種超越函數(shù)的統(tǒng)一算法。
圖1 CORDIC算法坐標圖示
如圖1所示,初始向量(x0, y0)旋轉(zhuǎn)θ角度之后得到另一個向量(x1, y1),對于兩向量有簡單的關(guān)系如下:
推廣到一般情況,第i次向第i+1次旋轉(zhuǎn)。引入旋轉(zhuǎn)方向Si,1代表逆時針,-1代表順時針。同時引入剩余角度量Zi,則有:
同時Zi→0。
經(jīng)過n次迭代,CORDIC算法的輸出變?yōu)椋?/p>
如果令x0=k=0.607 3, y0=0, Z0=θ,那么n次迭代后即有xn=cosθ, yn=sinθ。可見CORDIC算法只需移位操作,加減操作以及比較大小操作就能方便快捷地算出所需的正余弦值。
3.1 CORDIC算法的迭代結(jié)構(gòu)流程
CORDIC算法理論上需要無數(shù)次迭代才能無限逼近真實值,但這在硬件中顯然不能實現(xiàn)。通常方法是迭代16次,這已經(jīng)能很好地逼近所求值了。一般電路實現(xiàn)是用16級流水線結(jié)構(gòu),如圖2。
圖2 CORDIC算法16級流水線結(jié)構(gòu)[3]
該結(jié)構(gòu)優(yōu)點是運算速度快,當16級流水線完全充滿的時候,每個cycle就能出一組正余弦值。但如此電路結(jié)構(gòu)實現(xiàn)的CORDIC算法本身也存在局限性:
(2)一般在一個通信模塊中會有很多地方需要用到角度的正余弦值,不可避免地需要用到多個這樣的運算模塊來產(chǎn)生所需的正余弦值。這樣的16級流水線電路結(jié)構(gòu)并不節(jié)省空間。
(3)該結(jié)構(gòu)在計算時需要用到16組加減移位操作以及角度大小判斷操作,功耗也是一個相當嚴重的問題。
3.2 CORDIC算法的改進型硬件結(jié)構(gòu)
針對16級流水線結(jié)構(gòu)的局限性,同時也考慮到其實時性的優(yōu)點,本文提出了另一種電路結(jié)構(gòu),可以在兼顧16級流水線結(jié)構(gòu)優(yōu)點的同時,解決其局限性問題。
3.2.1 改進型結(jié)構(gòu)理論基礎(chǔ)
3.2.2 電路結(jié)構(gòu)
電路結(jié)構(gòu)圖如圖3所示。
圖3 倍角計算電路圖
從圖3可以看出,電路是上下對稱的,所以在硬件設(shè)計時只需一半,即兩個乘法器和一個加法器即可。
3.2.3 實驗結(jié)果與分析
設(shè)計采用FPGA測試平臺測試兩種模塊,均采用Verilog描述語言并在QuartusII 6.0和Xilinx ISE 9.1平臺上進行綜合。
表1 傳統(tǒng)與改進型CORDIC結(jié)構(gòu)比較結(jié)果
這樣,只需乘法器和加法器就能快速算出其余所有角度的正余弦值。這種電路結(jié)構(gòu)兼顧了16級流水線結(jié)構(gòu)的優(yōu)點,同時也解決了其局限性問題:
(1)此種電路結(jié)構(gòu),迭代一次,即1個cycle即能出一個角度的正余弦值,滿足通信系統(tǒng)實時性要求,計算所有的角度所需cycle數(shù)與16級流水線相當。
(2)此種電路結(jié)構(gòu)不用考慮角度的范圍。它僅第一次需要利用16級流水線結(jié)構(gòu)算出θ0的正余弦值,之后便使用圖3所示模塊計算其余角度的正余弦值。
(3)如果芯片中需要多處使用16級流水線CORDIC算法計算正余弦值的,用此種電路代替,可以減少芯片面積,降低功耗,節(jié)省成本。
由于CORDIC算法本身是一種近似的算法,因此應(yīng)用CORDIC算法的時候,在滿足精度要求的前提下,應(yīng)按項目實際需求在速度和面積之間選取有效平衡。本文在通常的16級流水線結(jié)構(gòu)上利用其計算出第一個角度的正余弦值,然后摒棄其后續(xù)計算需要對角度進行判斷的缺點,利用倍角公式構(gòu)造倍角計算電路,完成后續(xù)角度的正余弦計算,空閑下的16級流水線結(jié)構(gòu)依舊可以從事其他初始角度的計算。這不僅降低了電路面積,同時減小了功耗。
[1] 鄧小煒. 中頻信道化數(shù)字接收機方案及算法研究[D]. 電子科技大學(xué),2008.
[2] 楊宏,等. 基于FPGA的CORDIC算法的實現(xiàn)[J]. 西安郵電學(xué)院學(xué)報,2008(1).
[3] 田力,等. 基于CORDIC算法的NCO實現(xiàn)[D]. 西安電子科技大學(xué).
Hardware Circuit Implementation and Improvement of CORDIC Algorithm
LI Qingfeng
(Electronic science and technology department, Tongji University, Shanghai 201804, China)
The article proposes a new hardware circuit realization method based on CORDIC algorithm. First, it introduces the CORDIC algorithm and its principle. Then it presents the hardware circuit implementation of the CORDIC algorithm using 16 level pipeline structure. At last it recommends a new better method, which can include the high real-time performance and at the same time solve the limits on angle range of CORDIC algorithm. And it also reduces the complexity of the circuit in a certain sense.
NCO; CORDIC algorithm; 16 level pipeline structure
TN402
A
1681-1070(2014)01-0031-03
李慶鋒(1988—),男,江蘇南通人,就讀于上海同濟大學(xué)電子科學(xué)與技術(shù)系,集成電路工程專業(yè)碩士,主要研究方向為軟件無線電接收機。
2013-09-24