《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于改進的CORDIC算法的FFT復乘及其FPGA實現(xiàn)
基于改進的CORDIC算法的FFT復乘及其FPGA實現(xiàn)
來源:電子技術(shù)應(yīng)用2011年第4期
張 偉,,張安堂,,肖 宇
空軍工程大學 導彈學院,陜西 三原713800
摘要: 根據(jù)定點FFT中旋轉(zhuǎn)因子所對應(yīng)的CORDIC旋轉(zhuǎn)方向可預先求解的特點,,改進了CORDIC算法中旋轉(zhuǎn)方向的計算方法,,在節(jié)約乘法器資源的同時兼顧了速度與精度的要求,,并基于改進的CORDIC算法,,利用FPGA實現(xiàn)了這種FFT復乘模塊,。仿真結(jié)果表明該設(shè)計可行,具有一定的實際意義和應(yīng)用前景,。
中圖分類號: TN713
文獻標識碼: A
文章編號: 0258-7998(2011)04-0051-04
Improved cordic-based FFT plural-multiplication and its FPGA implementation
Zhang Wei,,Zhang Antang,Xiao Yu
The Missile Institute, Air Force Engineering University, Sanyuan 713800,,China
Abstract: This paper improved the algorithm of rotate direction in CORDIC according to the characteristic of CORDIC rotation direction of rotation factor can be solved in advance in fixed point FFT, meeting the requirements of high-speed and precision as well as resources-saving. And realized this FFT plural-multiplication module based on improved CORDIC algorithm by using FPGA, and the simulation result shows that it is feasible and has some practical meaning and applied foreground.
Key words : CORDIC algorithm;plural-multiplication,;mod correction factor,;FPGA


    FFT(快速傅里葉變換)在無線通信、語音識別,、圖像處理和頻譜分析等領(lǐng)域有著廣泛應(yīng)用,。在FFT運算中,核心操作是蝶形運算,,而蝶形運算的主要操作是向量旋轉(zhuǎn),,實現(xiàn)向量旋轉(zhuǎn)可用復數(shù)乘法運算來實現(xiàn),但復數(shù)乘耗費了FFT運算中大量的乘法器資源,。CORDIC算法只需簡單的移位與加減運算就能實現(xiàn)向量旋轉(zhuǎn),,具有使用資源少、硬件規(guī)模小等優(yōu)勢,。因此在FFT蝶形運算中用其代替?zhèn)鹘y(tǒng)FFT運算中的復數(shù)乘法器,,可以獲得更好的性能。但傳統(tǒng)CORDIC算法中每次CORDIC迭代方向需由剩余角度的計算來確定,,影響了工作速度,。為此,本文根據(jù)定點FFT復乘中旋轉(zhuǎn)因子的旋轉(zhuǎn)方向可預先確定的特點,,對CORDIC算法做了一些改進,,在節(jié)省資源的同時保證了工作速度。
1 CORDIC算法原理
    假設(shè)直角坐標系中有一向量A(Xa,,Ya),,逆時針旋轉(zhuǎn)?茲角度后得到另一個向量B(Xb,,Yb),這個過程可用如下矩陣表示:
  
 

    針對這一特點,,可在CORDIC算法上做一點改進,,把旋轉(zhuǎn)因子所對應(yīng)的CORDIC旋轉(zhuǎn)系數(shù)預先存在ROM中(人工計算旋轉(zhuǎn)系數(shù)比較麻煩,可用MATLAB編一段程序來計算,,并把旋轉(zhuǎn)系數(shù)存為.mif文件以便ROM初始化),,而不是把旋轉(zhuǎn)因子角度預先存在ROM中。這樣,,在進行CORDIC運算時,,直接從ROM中取出旋轉(zhuǎn)系數(shù),從而減少計算Zi來確定下一步旋轉(zhuǎn)方向的步驟,,減少CORDIC模塊設(shè)計的復雜性,,提高了運算速度,并且旋轉(zhuǎn)系數(shù)不比旋轉(zhuǎn)因子角度占用的ROM資源多,。另外由于旋轉(zhuǎn)因子需要進行0°,、-90°或+90°三種預旋轉(zhuǎn),所以預旋轉(zhuǎn)還要分配兩位二進制數(shù),,這樣存儲旋轉(zhuǎn)系數(shù)的ROM就為18位的ROM,。
    改進的CORDIC算法結(jié)構(gòu)如圖1所示,所有旋轉(zhuǎn)因子所對應(yīng)的CORDIC旋轉(zhuǎn)系數(shù)都存儲在ROM中,,通過地址產(chǎn)生器的控制實現(xiàn)序列與相應(yīng)的旋轉(zhuǎn)因子的復乘運算,。與傳統(tǒng)CORDIC算法相比去掉了預旋轉(zhuǎn)角與已旋轉(zhuǎn)角之差的計算來確定下一次旋轉(zhuǎn)方向的結(jié)構(gòu),不但增加了系數(shù)寄存器模塊,,而且總體上結(jié)構(gòu)更為簡單,。此CORDIC算法還采用流水線結(jié)構(gòu)提高了運算的速度,從當前VLSI的發(fā)展趨勢上來看,,芯片內(nèi)的門資源相對富裕,,對流水線CORDIC的實現(xiàn)規(guī)模約束很小。此外,,流水線CORDIC不存在迭代式CORDIC的反饋回路,,使得單元結(jié)構(gòu)更加規(guī)則,有利于VLSI實現(xiàn),。

3.3 模校正因子的實現(xiàn)
    基本CORDIC算法中在n級迭代執(zhí)行之后,,被旋轉(zhuǎn)向量的模已經(jīng)被改變了,算法的完全實現(xiàn)應(yīng)該附加一個模校正環(huán)節(jié),,即Xn,、Yn乘以模校正因子。對于迭代次數(shù)N大于10的CORDIC算法,,其模校正因子可認為已趨近常數(shù)K=0.607 25,。而直接在流水結(jié)構(gòu)后附加乘法器的直接實現(xiàn)方法,,使原本由移位器和加法器組成的整體結(jié)構(gòu)變得不規(guī)則,同時乘法器一級速度的變慢會降低整個流水的吞吐率[3,,4],。

這樣分解后,被旋轉(zhuǎn)向量與K的乘轉(zhuǎn)化為簡單的移位加減運算,,從而可以解決乘法器一級速度變慢而降低整個流水線吞吐率的問題,。其硬件實現(xiàn)結(jié)構(gòu)如圖2所示。這種結(jié)構(gòu)進一步降低了硬件復雜度,,與前面的流水線CORDIC結(jié)構(gòu)相似,,使整體結(jié)構(gòu)更加規(guī)則統(tǒng)一,有利于VLSI實現(xiàn),。

4 FFT復乘的FPGA實現(xiàn)
    由于軟件和DSP實現(xiàn)的速度較慢,,而FPGA資源豐富,組織結(jié)構(gòu)便于采用流水線結(jié)構(gòu)和并行運算,,其速度快,、擴展能力強,所以CORDIC算法的移位,、加減法運算和流水線結(jié)構(gòu)更容易在FPGA上實現(xiàn),。本文在Altera公司的QuartusⅡ7.2軟件環(huán)境下使用VHDL,利用上述各種算法設(shè)計了16 bit寬的FFT復乘模塊并在CycloneⅡ EP2C35F672C6芯片上進行驗證,。
    圖3為改進的16級流水線結(jié)構(gòu)的CORDIC算法實現(xiàn)復乘模塊的頂層結(jié)構(gòu)圖,address為ROM的地址,,Xi_re,、Xi_im為輸入序列的實部和虛部,Xo_re,、Xo_im為旋轉(zhuǎn)后的實部和虛部,。輸入數(shù)據(jù)為16 bit寬,為提高精度,,對所有內(nèi)部信號及輸出信號都用20 bit的補碼,。整個復乘主要由系數(shù)ROM、預旋轉(zhuǎn),、16級流水線CORDIC迭代,、系數(shù)寄存器和模校正因子K 5個模塊組成。

    小,,但不能完全消除,。

    圖5為改進的CORDIC算法實現(xiàn)FFT復乘資源消耗與最高工作速度情況。傳統(tǒng)的復乘要4個乘法器,,所以傳統(tǒng)的復乘要實現(xiàn)16 bit位寬復乘需用此芯片中的8個9 bit乘法單元,,而從資源消耗情況來看,,改進的CORDIC算法實現(xiàn)此復乘沒有用乘法器,整個邏輯單元消耗也只有4%,;另外基于改進的CORDIC算法的復乘最高工作頻率達到了190 MHz,,與傳統(tǒng)CORDIC算法的復乘速度(約130 MHz)相比有較大提高,在節(jié)約資源的同時提高了工作速度,。

    本文利用定點FFT復乘運算中旋轉(zhuǎn)因子的旋轉(zhuǎn)系數(shù)可預先求出的特點,,采用改進流水線結(jié)構(gòu)的CORDIC算法,與傳統(tǒng)的CORDIC算法的復乘相比,,不僅不需要乘法器實現(xiàn)了FFT運算中序列與旋轉(zhuǎn)因子的復數(shù)乘運算,,并且在節(jié)約資源的同時提升了工作速度。這種基于改進的CORDIC算法的復乘運算對提高FFT處理器的速度和減少資源消耗有較大意義,。同時,,利用VHDL語言,采用模塊化設(shè)計思想,,使得本設(shè)計可移植性強,、通用性好,只需作少量改動(如增加位寬,,增加迭代次數(shù)),,便可滿足精度上的更高要求,具有一定的工程實際意義和應(yīng)用前景,。
參考文獻
[1] 李成詩,,初建朋.基于CORDIC的一種高速實時定點FFT的FPGA實現(xiàn)[J].微電子學與計算機,2004,,21(4).
[2] 吳偉,,唐斌.現(xiàn)代雷達中的高速FFT設(shè)計[J].空軍工程大學學報(自然科學版),2005(10).
[3] KHARRAT M W,,LOULOU M,,MASMOUDI N,et al.A new method to implement CORDIC algorithm[C].IEEE International Conference on Electronic,,Circuit and Systems,,2001(2):715-718.
[4] 楊宇,毛志剛,,來逢昌.一種改進的流水線CORDIC算法結(jié)構(gòu)[J].微處理機,,2006(8).
[5] 李滔.流水線CORDIC算法及其應(yīng)用研究[D].北京理工大學,1999.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。