謝文彬
(淮安生物工程高等職業(yè)學(xué)校,江蘇淮安223200)
浮點(diǎn)運(yùn)算方式較定點(diǎn)運(yùn)算有計(jì)數(shù)范圍寬、有效精度高的特點(diǎn),是目前大多數(shù)計(jì)算機(jī)系統(tǒng)采用的表達(dá)形式,也是數(shù)控系統(tǒng)中刀具補(bǔ)償、插補(bǔ)計(jì)算常采用的運(yùn)算方法。目前比較流行的方法是使用DSP數(shù)字信號處理芯片實(shí)現(xiàn)浮點(diǎn)運(yùn)算。浮點(diǎn)表述結(jié)構(gòu)復(fù)雜,完全使用DSP軟件實(shí)現(xiàn)一定程度上會影響DSP的運(yùn)算速度。
本文主要研究利用Verilog HDL語言進(jìn)行FPGA浮點(diǎn)運(yùn)算加減法方法的實(shí)現(xiàn)。Verilog HDL是基于C語言的硬件描述語言,對數(shù)字邏輯電路建模有著獨(dú)特的優(yōu)勢。
本文浮點(diǎn)數(shù)的運(yùn)算介紹基于二進(jìn)制單精度類型,由符號位、階碼位、尾碼位組成(以上由IEEE 754[1]標(biāo)準(zhǔn)定義)。在符合IEEE 754標(biāo)準(zhǔn)的浮點(diǎn)數(shù)加減運(yùn)算過程中,減法運(yùn)算也可以轉(zhuǎn)變成加法運(yùn)算,只要處理好兩數(shù)的符號即可。規(guī)格化浮點(diǎn)數(shù)加法可以分為符號判斷、階碼比較、尾碼對階、求和或求差和規(guī)格化處理等步驟。其加減法運(yùn)算步驟[2]如下:
(1)符號判斷:判斷是加法運(yùn)算還是減法運(yùn)算。
(2)階碼比較:求解兩個(gè)浮點(diǎn)數(shù)階碼的差。
(3)尾碼對階:小階向右移動(dòng)階差位,階碼增加階差位。
(4)求和或求差:對階完畢浮點(diǎn)數(shù)的尾碼需要進(jìn)行求和或求差。
(5)規(guī)格化處理。
使用FPGA實(shí)現(xiàn)浮點(diǎn)數(shù)加減法運(yùn)算的模塊結(jié)構(gòu)如圖1所示。
圖1 浮點(diǎn)數(shù)加減法基本算法模塊結(jié)構(gòu)
在規(guī)格化模塊中要對結(jié)果進(jìn)行前導(dǎo)1檢測、初次規(guī)格化、尾數(shù)舍入和最終規(guī)格化得到最后結(jié)果,尾碼應(yīng)表示最多的有效數(shù)且用純小數(shù)給出,同時(shí)尾碼大于等于1/2小于1,即尾碼最高位為1,尾碼右移一位,階碼增一稱為“右規(guī)”,尾碼左移一位,階碼減一稱為“左規(guī)”,規(guī)格化可增加有效數(shù)的位數(shù),提高運(yùn)算結(jié)果精度[3]。根據(jù)浮點(diǎn)數(shù)運(yùn)算器邏輯可得到使用硬件描述語言設(shè)計(jì)運(yùn)算模塊的端口定義如表1所示。
表1 浮點(diǎn)運(yùn)算模塊端口
在輸入端口信號中,clk50為50MHz時(shí)鐘信號;rst_n為模塊復(fù)位信號,低電平有效;Y1為被加數(shù)或被減數(shù);Y2為加數(shù)或減數(shù)。
在輸出端口信號中,S1為Y1的符號位;S2為Y2的符號位;E1為Y1的階碼位;E2為Y2的階碼位;F1為Y1的尾碼位;F2為Y2的尾碼位;Y為最終輸出結(jié)果信號;yichu_flat為階碼溢出標(biāo)志信號;Y_E為Y的階碼信號;Y_F為Y的尾碼位;F_out為規(guī)格化時(shí)的尾碼位,其規(guī)格化后的低23位賦值給Y_F。
根據(jù)S1、S2的值判斷兩數(shù)的加減運(yùn)算,如果S1、S2的值為“00”或“11”兩數(shù)相加,否則兩數(shù)相減。在相減過程中,如果S1、S2的值為“01”,則Y1為被減數(shù),Y2為減數(shù),否則Y2為被減數(shù),Y1為減數(shù);js為加減法運(yùn)算判斷信號,當(dāng)js的值為“0”時(shí)表示兩浮點(diǎn)數(shù)進(jìn)行加法運(yùn)算,否則表示兩浮點(diǎn)數(shù)進(jìn)行減法運(yùn)算。其部分硬件描述語言如下:
在浮點(diǎn)數(shù)加減法運(yùn)算過程中,規(guī)格化處理過程比較重要,只有經(jīng)過了規(guī)格化,其最終結(jié)果才能符合IEEE 754標(biāo)準(zhǔn)。本文使用casex語句來完成規(guī)格化處理,主要部分硬件描述語言如下:
利用硬件描述語言編寫,經(jīng)過編譯和綜合,可得浮點(diǎn)數(shù)運(yùn)算模塊的封裝圖,在得到封裝圖的基礎(chǔ)上進(jìn)行了仿真,驗(yàn)證了設(shè)計(jì)的正確性。浮點(diǎn)數(shù)加減法模塊共消耗了1 162個(gè)LE(邏輯單元)、195個(gè)寄存器、97個(gè)用戶可用管腳、122個(gè)測試點(diǎn)。仿真圖如圖2所示,仿真圖中各信號含義參照表1。
圖2 浮點(diǎn)數(shù)加減法模塊仿真圖
在時(shí)鐘clk50和復(fù)位信號rst_n的作用下,當(dāng)復(fù)位信號rst_n為低電平時(shí),信號E、F_out、yichu_flat清零置數(shù);當(dāng)復(fù)位信號rst_n為高電平時(shí),在時(shí)鐘的上升沿,casex判斷F_out的結(jié)構(gòu),E、F_out信號根據(jù)casex判斷F_out的結(jié)構(gòu)的結(jié)果進(jìn)行減法和左移運(yùn)算;當(dāng)casex語句判斷后的E[8]值為“1”時(shí),表示有溢出,則溢出標(biāo)志位yichu_flat置1。
在仿真圖中,有4組數(shù)據(jù)運(yùn)算,其中輸入數(shù)據(jù)均符合IEEE 754標(biāo)準(zhǔn),由符號十進(jìn)制數(shù)經(jīng)過單精度浮點(diǎn)數(shù)轉(zhuǎn)換專用軟件轉(zhuǎn)換為十六進(jìn)制數(shù),結(jié)果如圖3所示。
圖3 IEEE-754浮點(diǎn)數(shù)軟件轉(zhuǎn)換圖
浮點(diǎn)數(shù)加減法數(shù)值計(jì)算表如表2所示,由表可以看出,本設(shè)計(jì)的仿真結(jié)果與實(shí)際結(jié)果有誤差,誤差計(jì)算公式為:誤差=尾碼差×2階碼,也可以使用專用軟件由十六進(jìn)制數(shù)逆推到有符號十進(jìn)制數(shù),然后算出誤差值。由誤差項(xiàng)值可以看出,其數(shù)值極小,不影響系統(tǒng)的計(jì)算精度,得出FPGA浮點(diǎn)運(yùn)算加減法設(shè)計(jì)方法正確可行,精度高。
表2 浮點(diǎn)數(shù)加減法數(shù)值計(jì)算表
在如今數(shù)控系統(tǒng)需要高精度、高速度的時(shí)代背景下,基于FPGA芯片技術(shù)特點(diǎn),使用FPGA實(shí)現(xiàn)浮點(diǎn)數(shù)運(yùn)算已經(jīng)是大勢所趨,它正在為人們所廣泛接受。