《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 浮點反正切函數(shù)的FPGA實現(xiàn)
浮點反正切函數(shù)的FPGA實現(xiàn)
來源:電子技術(shù)應(yīng)用2010年第8期
李 全
桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林541004
摘要: 設(shè)計了一種基于CORDIC算法計算浮點反正切函數(shù)的的硬件結(jié)構(gòu),并在Altera公司的FPGA芯片上進行了驗證,最后在Nios II處理器系統(tǒng)中以用戶自定義指令的形式實現(xiàn),通過C語言程序驗證了浮點反正切模塊的正確性。
中圖分類號: TP301
文獻標識碼: A
The implementation of floating arc tangent function based on FPGA
LI Quan
Information and Communication Institute,Guilin University of Electronic Technology,Guilin 541004,China
Abstract: This paper presents a architecture of arc tangent calculate circuit based on CORDIC algorithm. Software simulation and hardware experiment has been done for this module on Altera FPGA. Finally, we accomplish the hardware module by adding custom instruction on the Nios II processor system of Altera corporation. The floating-point arc tangent module′s correctness is proved by C program running in the Nios II processor.
Key words : CORDIC;arc tangent;floating-point;Nios II

    在數(shù)字信號處理、導(dǎo)航通訊等許多領(lǐng)域會大量使用反正切函數(shù)進行必要的計算,當FPGA系統(tǒng)應(yīng)用于上述領(lǐng)域時常常會遇到如何使用硬件來完成反正切函數(shù)計算的問題。本文設(shè)計了基于CORDIC算法的反正切函數(shù)計算模塊,并且根據(jù)IEEE-754單精度浮點數(shù)據(jù)格式對輸入輸出數(shù)據(jù)進行處理,實現(xiàn)了高精度的浮點反正切函數(shù)的計算。
1 反正切函數(shù)實現(xiàn)原理
    CORDIC算法有旋轉(zhuǎn)模式和向量模式兩種計算模式。旋轉(zhuǎn)模式可以用來計算一個輸入角的正弦、余弦,向量模式可以計算給定向量的角度和長度。
    CORDIC算法的基本迭代公式為:
 
    從上式可以看出,CORDIC算法在向量模式可以計算出給定向量(X,Y)的長度和角度,即從平面坐標到極坐標的變換。
2 數(shù)據(jù)格式轉(zhuǎn)換接口模塊
    本文設(shè)計的反正切函數(shù)硬件模塊輸入為IEEE-754單精度浮點數(shù)據(jù),而模塊內(nèi)部迭代使用的是定點整型數(shù)據(jù),因此需要進行轉(zhuǎn)換。
    在圖1的輸入數(shù)據(jù)轉(zhuǎn)換接口示意圖中,X、Y為輸入的IEEE-754浮點數(shù)據(jù)格式,輸入范圍是(-∞,+∞),經(jīng)過接口模塊轉(zhuǎn)換為整型定點數(shù)據(jù)Xn、Yn,其表示范圍是[-1 +1]。

    矢量(X,Y)在平面坐標系中的角度為arctan(Y/X),它只與Y和X的比值有關(guān),與Y和X的實際長度無關(guān)。用這個性質(zhì)可以以X和Y中絕對值最大的值作為歸一化數(shù)值,將X和Y的范圍重新映射在[-1 +1]之間,實現(xiàn)(X,Y)到(Xn,Yn)的轉(zhuǎn)換。
    計算結(jié)束后輸出結(jié)果Z。Z是32位定點整型數(shù)據(jù),且232被定義為2π,將其規(guī)格化為IEEE-754格式的過程如圖2所示。在對Z進行規(guī)格化之前,需要進行前導(dǎo)零檢測,以確定規(guī)格化時尾數(shù)左移的位數(shù)和指數(shù)位的大小,前導(dǎo)零的檢測硬件上可以用casex語句實現(xiàn)。

3 整體設(shè)計以及仿真綜合
    浮點反正切函數(shù)的硬件結(jié)構(gòu)包括了三個主要部分,即浮點數(shù)據(jù)格式轉(zhuǎn)換接口模塊、CORDIC內(nèi)核計算模塊和浮點輸出數(shù)據(jù)轉(zhuǎn)換接口模塊,如圖3所示。

    采用Quartus II對設(shè)計進行FPGA綜合,F(xiàn)PGA芯片選擇EP2C70F896C6,硬件環(huán)境為Altera公司的DE2-70平臺,總共需要1 522個邏輯單元,占用芯片資源的2%,最高工作頻率為100 MHz。
4 Nios II中反正切函數(shù)的自定義指令實現(xiàn)
    反正切函數(shù)與Nios II CPU的接口采用multi-cycle custom instruction,dataa和datab為輸入數(shù)據(jù),result為結(jié)果輸出,要從C語言中直接調(diào)用自定義指令,需要一個宏定義接口??梢栽趕ystem.h文件中找到自定義指令的宏定義,如:
#define ALT_CI_CORDIC_ATAN2_N 0x00000000
#define ALT_CI_CORDIC_ATAN2(A,B) __builtin_custom_inii
(ALT_CI_CORDIC_ATAN2_N,(A),(B))
    為了正確調(diào)用自定義指令,在主程序中重新做以下宏定義:
#define ATAN2(A,B) __builtin_custom_fnff(ALT_CI_CORDIC_ATAN2_N,(A),(B))
    與system.h文件中系統(tǒng)自動生成的宏定義不同之處在于將宏定義的接口說明由“__builtin_custom_inii”改為了“__builtin_custom_fnff”。系統(tǒng)自動生成的宏定義默認輸入輸出皆為整型數(shù)據(jù),改為“__builtin_custom_fnff”就是通知系統(tǒng)這是一條輸入輸出都是單精度浮點數(shù)據(jù)類型的用戶自定義指令。這樣由CPU調(diào)用時就不會出現(xiàn)數(shù)據(jù)類型不匹配的錯誤。
    通過在Nios II CPU中加入的JTAG_UART模塊,可以從調(diào)試終端窗口中獲得運行結(jié)果。硬件IP核平均計算用時73個周期,而軟件計算平均用時21 000個周期,計算速度提升300倍以上。此時CPU工作頻率為100 MHz,且配置為最高性能,浮點反正切函數(shù)硬件模塊僅工作在50 MHz。浮點反正切函數(shù)硬件模塊的計算精度完全可以滿足單精度浮點數(shù)據(jù)的要求,計算誤差小于10e-6,因此可以用于對精度和速度都要求很高的各種信號處理領(lǐng)域。
    反正切函數(shù)是應(yīng)用范圍最廣的一個反三角函數(shù),而用硬件實現(xiàn)浮點反正切函數(shù)對相應(yīng)算法的速度會起到一個很大的提升作用,硬件浮點反正切函數(shù)可以很方便地作為一個IP核被系統(tǒng)調(diào)用,實現(xiàn)高速并行的超越函數(shù)計算。目前,已經(jīng)設(shè)計完成并用Nios II處理器驗證過浮點超越函數(shù)計算IP,包括浮點正弦函數(shù)、浮點余弦函數(shù)、浮點反正切函數(shù)和浮點反正弦函數(shù)。Nios II處理器通過加入這些IP核模塊就能實現(xiàn)大部分浮點超越函數(shù)計算,使用硬件IP核計算比用軟件計算在速度上至少可以提升300~1 000倍,這樣就可以將Nios II處理器用于原先只有用DSP才能處理的一些場合,可以充分發(fā)揮FPGA系統(tǒng)的靈活性以及并行數(shù)據(jù)處理的能力。

參考文獻
[1] Volder.The CORDIC trigonometric computing technique[J]. IRE Trans,1959:334-334.
[2] WALTHER.J.S.A unified algorithm for elementary functions[J].Spring Joint Computer Conf,1971:379-385.
[3] 李全,李曉歡,陳石平.基于CORDIC算法高精度浮點超越函數(shù)的FPGA實現(xiàn).電子技術(shù)應(yīng)用,2009,35(5):166-168.

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