謝文彬
(淮安生物工程高等職業學校,江蘇淮安223200)
浮點運算方式較定點運算有計數范圍寬、有效精度高的特點,是目前大多數計算機系統采用的表達形式,也是數控系統中刀具補償、插補計算常采用的運算方法。目前比較流行的方法是使用DSP數字信號處理芯片實現浮點運算。浮點表述結構復雜,完全使用DSP軟件實現一定程度上會影響DSP的運算速度。
本文主要研究利用Verilog HDL語言進行FPGA浮點運算加減法方法的實現。Verilog HDL是基于C語言的硬件描述語言,對數字邏輯電路建模有著獨特的優勢。
本文浮點數的運算介紹基于二進制單精度類型,由符號位、階碼位、尾碼位組成(以上由IEEE 754[1]標準定義)。在符合IEEE 754標準的浮點數加減運算過程中,減法運算也可以轉變成加法運算,只要處理好兩數的符號即可。規格化浮點數加法可以分為符號判斷、階碼比較、尾碼對階、求和或求差和規格化處理等步驟。其加減法運算步驟[2]如下:
(1)符號判斷:判斷是加法運算還是減法運算。
(2)階碼比較:求解兩個浮點數階碼的差。
(3)尾碼對階:小階向右移動階差位,階碼增加階差位。
(4)求和或求差:對階完畢浮點數的尾碼需要進行求和或求差。
(5)規格化處理。
使用FPGA實現浮點數加減法運算的模塊結構如圖1所示。

圖1 浮點數加減法基本算法模塊結構
在規格化模塊中要對結果進行前導1檢測、初次規格化、尾數舍入和最終規格化得到最后結果,尾碼應表示最多的有效數且用純小數給出,同時尾碼大于等于1/2小于1,即尾碼最高位為1,尾碼右移一位,階碼增一稱為“右規”,尾碼左移一位,階碼減一稱為“左規”,規格化可增加有效數的位數,提高運算結果精度[3]。根據浮點數運算器邏輯可得到使用硬件描述語言設計運算模塊的端口定義如表1所示。

表1 浮點運算模塊端口
在輸入端口信號中,clk50為50MHz時鐘信號;rst_n為模塊復位信號,低電平有效;Y1為被加數或被減數;Y2為加數或減數。
在輸出端口信號中,S1為Y1的符號位;S2為Y2的符號位;E1為Y1的階碼位;E2為Y2的階碼位;F1為Y1的尾碼位;F2為Y2的尾碼位;Y為最終輸出結果信號;yichu_flat為階碼溢出標志信號;Y_E為Y的階碼信號;Y_F為Y的尾碼位;F_out為規格化時的尾碼位,其規格化后的低23位賦值給Y_F。
根據S1、S2的值判斷兩數的加減運算,如果S1、S2的值為“00”或“11”兩數相加,否則兩數相減。在相減過程中,如果S1、S2的值為“01”,則Y1為被減數,Y2為減數,否則Y2為被減數,Y1為減數;js為加減法運算判斷信號,當js的值為“0”時表示兩浮點數進行加法運算,否則表示兩浮點數進行減法運算。其部分硬件描述語言如下:

在浮點數加減法運算過程中,規格化處理過程比較重要,只有經過了規格化,其最終結果才能符合IEEE 754標準。本文使用casex語句來完成規格化處理,主要部分硬件描述語言如下:

利用硬件描述語言編寫,經過編譯和綜合,可得浮點數運算模塊的封裝圖,在得到封裝圖的基礎上進行了仿真,驗證了設計的正確性。浮點數加減法模塊共消耗了1 162個LE(邏輯單元)、195個寄存器、97個用戶可用管腳、122個測試點。仿真圖如圖2所示,仿真圖中各信號含義參照表1。


圖2 浮點數加減法模塊仿真圖

在時鐘clk50和復位信號rst_n的作用下,當復位信號rst_n為低電平時,信號E、F_out、yichu_flat清零置數;當復位信號rst_n為高電平時,在時鐘的上升沿,casex判斷F_out的結構,E、F_out信號根據casex判斷F_out的結構的結果進行減法和左移運算;當casex語句判斷后的E[8]值為“1”時,表示有溢出,則溢出標志位yichu_flat置1。
在仿真圖中,有4組數據運算,其中輸入數據均符合IEEE 754標準,由符號十進制數經過單精度浮點數轉換專用軟件轉換為十六進制數,結果如圖3所示。

圖3 IEEE-754浮點數軟件轉換圖
浮點數加減法數值計算表如表2所示,由表可以看出,本設計的仿真結果與實際結果有誤差,誤差計算公式為:誤差=尾碼差×2階碼,也可以使用專用軟件由十六進制數逆推到有符號十進制數,然后算出誤差值。由誤差項值可以看出,其數值極小,不影響系統的計算精度,得出FPGA浮點運算加減法設計方法正確可行,精度高。

表2 浮點數加減法數值計算表
在如今數控系統需要高精度、高速度的時代背景下,基于FPGA芯片技術特點,使用FPGA實現浮點數運算已經是大勢所趨,它正在為人們所廣泛接受。