摘要:該文分析了CORDIC算法為作為硬件實現(xiàn)基本的運算的方法,實現(xiàn)了開方、正弦、余弦、乘法、除法、正切、反正切,和一些雙曲函數(shù)的實現(xiàn)。提供了一種基于流線設(shè)計的CORDIC算法的實現(xiàn),在每層流水線上都可實現(xiàn)6種計算,共用一個加法器。減少了硬件內(nèi)部資源的使用。通過是實現(xiàn)的結(jié)果可以看到計算結(jié)果在水線級數(shù)STAGE+3 個CLK信號后實現(xiàn)了連續(xù)的實時計算結(jié)果。
關(guān)鍵詞:CORDIC;流水線設(shè)計;共用;基本運算
中圖分類號:TP301 文獻標識碼:A 文章編號:1009-3044(2013)04-0841-03
The Analysis and Implementation of CORDIC Algorithm Based on FPGA
LIU Wei-liang
(Chongqing University of Posts and Telecommunications, Chongqing 400065, China)
Abstract: This paper analyzed the CORDIC algorithm for hardware implementation of basic operation method, realized the root, sine, cosine, multiplication, division, tangent, inverse tangent, and some hyperbolic function. Provide a method based on pipeline design CORDIC algorithm, each line can be realized 6 kinds of calculation, sharing one adder. Reducing the hardware resource use. Is to achieve the results you can see through calculation results in line series STAGE+3 CLK signal after achieving a continuous real-time calculation results.
Key words: CORDIC; pipeline design; share; basic operations
1 概述
隨著現(xiàn)代數(shù)字電路中工作頻率的不斷提高,計算結(jié)果要求隨時按工作要求實時計算,然而在實際工作中軟件語言實現(xiàn)的算法實時性不高,在硬件中計算數(shù)據(jù)只有加法和位移的操作。因此一種需要資源耗費小,實時性高的算法來實現(xiàn)工作中的基本運算。該文首先分析了CORDIC算法的基本原理,然后分別研究了幾種基本運算的實現(xiàn)方法,幾種運算的共用,最后進行了仿真和實現(xiàn)結(jié)果的分析。
2 CORDIC算法原理
CORDIC[1]是基于坐標旋轉(zhuǎn)的數(shù)字計算方法,通過加法,位移和查找表的計算實現(xiàn)開方、正弦、余弦、乘法、除法、正切、反正切,和一些雙曲函數(shù)。下式用極坐標分別表示了一個直角坐標系中的一個模長為[r],相角為[?]的向量,和此向量旋轉(zhuǎn)[ψ]角后的另一個向量。
[x0=rcos(?)y0=rsin(?)] (1)
[x1=rcos(?+ψ)y1=rsin(?+ψ)] (2)
(2)式經(jīng)過和差化積公式變換可得(3)式為
[x1=rcos(?)cos(ψ)-rsin(?)sin(ψ)y1=rsin(?)cos(ψ)+rcos(?)sin(ψ)] (3)
聯(lián)合(1)式和(3)式可知
[x1y1=cos(ψ)-sin(ψ)sin(ψ)cos(ψ)x0y0] (4)
提取公因式[cos(ψ)]后得到
[x1y1=cos(ψ)1-tan(ψ)tan(ψ)1x0y0] (5)
現(xiàn)在假定旋轉(zhuǎn)的角度[ψ]是經(jīng)過多次旋轉(zhuǎn)得到的,每次旋轉(zhuǎn)的角度為[ψi]=[snarctan(2-n)](n= 0,1,2,……),[sn]={-1,+1}經(jīng)過這樣的假設(shè)后[tan(ψ)]變換為2-n,可見經(jīng)過這樣的變換之后乘法運算就變成為位移操作。則(5)式可以變換下式:
[x1y1=(i=0ncos(ψi)1-tan(ψi)tan(ψi)1)x0y0] (6)
上式中[ψi]和[ψ]的關(guān)系為[ψ]=[i=0nψi]。將上式分成n次迭代動作完成,則迭代的第i次為:
[xi+1yi+1=cos(ψi)1-tan(ψi)tan(ψi)1xiyi] (7)
又根據(jù)[ψi]=[snarctan(2-n)] 可得下式:[xi+1yi+1=cos(ψi)1-si(1/2)isi(1/2)i1xiyi] (8)
式(8)中cos([ψi])=cos(arctan(2-i))= [11+2-2i],經(jīng)過多次累乘后得到的值收斂于一個值K,
[K=11+2-2i=0.607253] (9)
通過(6),(8),(9)可得:[x1y1=K(i=0n1-sn(2-i)sn(2-i)1)x0y0] (10)
經(jīng)過足夠多的迭代后可知原向量變?yōu)樾D(zhuǎn)后的向量假設(shè)Z為旋轉(zhuǎn)角度,則最后輸出為:
[xyz=(1/K)(xcos(ψ)-ysin(ψ))(1/K)(ycos(ψ)+xsin(ψ))0] (11)
可知當輸入x=K,y=0,z=[?]時。輸出為x=[cos(?)],y=[sin(?)]。
可知只要選取適當?shù)姆椒梢允筞經(jīng)過迭代足夠次數(shù)后趨近到0。故選取下面的方法:
[Zi+1=Zi-Siarctan(2-i)] (12)
當[Zi]>0時,[Si]=1;[Zi]<0時,[Si]= -1。
可見此方法中旋轉(zhuǎn)的是Z角,逐漸改變x,y。另一種結(jié)構(gòu)是逐漸旋轉(zhuǎn)y。改變x,z。可得到另一組結(jié)果:
[x=Xy=Yz=0] => [x=X2+Y2y=0z=arctan(Y/X)] (13)
通過以上的分析方法可以在線性系統(tǒng)和雙曲系統(tǒng)中建立相關(guān)旋轉(zhuǎn)。通過觀察相互之間的關(guān)系可建立如下的通用方程[2]
[xi+1=xi-μδi(2-iyi)yi+1=yi+δi(2-ixi)zi+1=zi-δietai] (14)
圓系統(tǒng):[μ]=1;[etai=arctan(2-i)];
線性系統(tǒng):[μ=0];[etai=2-i];
雙曲系統(tǒng):[μ=-1];[etai=atanh(2-i)];
其中輸入輸出關(guān)系可建立表1[3]。
式子(14)表明計算中一個迭代過程只需3次加法,2次位移,和一次查找表。這樣解算在FPGA中實現(xiàn)是可行的,而且節(jié)省了乘法器的使用,在每次迭代的過程中可以共用一個加法器來實現(xiàn)6種函數(shù)的計算,減少硬件資源的的消耗。所有的迭代過程可以通過流線設(shè)計連接,可以大量節(jié)省計算的時間。單級水線結(jié)構(gòu)如下圖所示:
圖1中Fun_mode控制選擇函數(shù)系統(tǒng)為圓系統(tǒng),線性系統(tǒng)和雙曲系統(tǒng),Rot_vec控制選擇旋轉(zhuǎn)坐標為極坐標和直角坐標。
本設(shè)計采用alter公司FPGA芯片,使用verilog HDL語言實現(xiàn)電路描述,在Quartus ii 9.0 上編譯仿真。
[\&Sin\&Cos\&[x2+y2]\&Atan\&Mul\&Div\&Sinh\&Cosh\&[x2-y2]\&atanh\&計算\&0.7081\&0.7081\&587.82\&0.54\&250\&0.6015\&0.2608\&1.0336\&400.89\&0.6948\&理論\&0.7071\&0.7071\&583.0952\&0.5404\&256\&0.6\&0.2582\&1.0328\&400\&0.6931\&]
仿真結(jié)果表明在誤差允許范圍內(nèi),該方案可行。
4 結(jié)束語
此算法經(jīng)過修改后,成功應用在衛(wèi)星信號的跟蹤模塊中實現(xiàn)了信號相位的精確計算,并且該算法具有一定的通用性,在共用一個加法器的情況下,成功的設(shè)計出了上述幾種函數(shù)的計算方法,設(shè)計中采用流水線設(shè)計方法,在水線級數(shù)stage+3clk 個時鐘后可連續(xù)輸出計算結(jié)果,并且可以實現(xiàn)不同的函數(shù)。
參考文獻:
[1] 楊宏,李國輝,劉立新.基于FPGA的CORDIC算法的實現(xiàn)[J].西安郵電學院學報,2008(1).
[2] Xiaobo Hu.Expanding the Range of Convergence of the CORDIC Algorithm[J].IEEE TRANSACTIONS ON COMPUTERS,1991,40(1).
[3] 耿丹.CORDIC算法的研究與實現(xiàn)[J].遙測遙控,2007(S1).
[4] 王金明.數(shù)字系統(tǒng)設(shè)計與Verilog HDL[M].北京:電子工業(yè)出版社,2010.