《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 浮點(diǎn)反正切函數(shù)的FPGA實(shí)現(xiàn)
浮點(diǎn)反正切函數(shù)的FPGA實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2010年第8期
李 全
桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林541004
摘要: 設(shè)計(jì)了一種基于CORDIC算法計(jì)算浮點(diǎn)反正切函數(shù)的的硬件結(jié)構(gòu),并在Altera公司的FPGA芯片上進(jìn)行了驗(yàn)證,最后在Nios II處理器系統(tǒng)中以用戶自定義指令的形式實(shí)現(xiàn),通過C語言程序驗(yàn)證了浮點(diǎn)反正切模塊的正確性。
中圖分類號(hào): TP301
文獻(xiàn)標(biāo)識(shí)碼: 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ù)字信號(hào)處理、導(dǎo)航通訊等許多領(lǐng)域會(huì)大量使用反正切函數(shù)進(jìn)行必要的計(jì)算,當(dāng)FPGA系統(tǒng)應(yīng)用于上述領(lǐng)域時(shí)常常會(huì)遇到如何使用硬件來完成反正切函數(shù)計(jì)算的問題。本文設(shè)計(jì)了基于CORDIC算法的反正切函數(shù)計(jì)算模塊,并且根據(jù)IEEE-754單精度浮點(diǎn)數(shù)據(jù)格式對(duì)輸入輸出數(shù)據(jù)進(jìn)行處理,實(shí)現(xiàn)了高精度的浮點(diǎn)反正切函數(shù)的計(jì)算。
1 反正切函數(shù)實(shí)現(xiàn)原理
    CORDIC算法有旋轉(zhuǎn)模式和向量模式兩種計(jì)算模式。旋轉(zhuǎn)模式可以用來計(jì)算一個(gè)輸入角的正弦、余弦,向量模式可以計(jì)算給定向量的角度和長度。
    CORDIC算法的基本迭代公式為:
 
    從上式可以看出,CORDIC算法在向量模式可以計(jì)算出給定向量(X,Y)的長度和角度,即從平面坐標(biāo)到極坐標(biāo)的變換。
2 數(shù)據(jù)格式轉(zhuǎn)換接口模塊
    本文設(shè)計(jì)的反正切函數(shù)硬件模塊輸入為IEEE-754單精度浮點(diǎn)數(shù)據(jù),而模塊內(nèi)部迭代使用的是定點(diǎn)整型數(shù)據(jù),因此需要進(jìn)行轉(zhuǎn)換。
    在圖1的輸入數(shù)據(jù)轉(zhuǎn)換接口示意圖中,X、Y為輸入的IEEE-754浮點(diǎn)數(shù)據(jù)格式,輸入范圍是(-∞,+∞),經(jīng)過接口模塊轉(zhuǎn)換為整型定點(diǎn)數(shù)據(jù)Xn、Yn,其表示范圍是[-1 +1]。

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

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

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

參考文獻(xiàn)
[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算法高精度浮點(diǎn)超越函數(shù)的FPGA實(shí)現(xiàn).電子技術(shù)應(yīng)用,2009,35(5):166-168.

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