王景悟
摘要:為了使單雙精度浮點(diǎn)加法運(yùn)算方便,減少資源浪費(fèi),設(shè)計(jì)了一套可同時(shí)運(yùn)行兩路單精度或一路雙精度的浮點(diǎn)運(yùn)算加法器結(jié)構(gòu)。該浮點(diǎn)數(shù)加法器可通過(guò)信號(hào)控制端,在高電平時(shí)執(zhí)行雙精度浮點(diǎn)加法,低電平時(shí)執(zhí)行單精度浮點(diǎn)加法,且運(yùn)算結(jié)果符合IEEE-754標(biāo)準(zhǔn)格式,通過(guò)實(shí)驗(yàn)驗(yàn)證,該加法器結(jié)構(gòu)合理,功能正確。
關(guān)鍵詞:浮點(diǎn)運(yùn)算;加法器;IEEE-754標(biāo)準(zhǔn)
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)31-0231-02
浮點(diǎn)數(shù)的引用隨著網(wǎng)絡(luò)時(shí)代的迅速發(fā)展而變得廣泛,我們對(duì)信息精度、細(xì)致度的要求越來(lái)越高,比如使用手機(jī)時(shí)對(duì)語(yǔ)音識(shí)別需要更清晰;電腦處理圖片時(shí)要求更逼真,這些都表示對(duì)浮點(diǎn)運(yùn)算的要求越來(lái)越高,使得當(dāng)今社會(huì)在處理器設(shè)計(jì)中,浮點(diǎn)運(yùn)算器(Floating-point unit)的設(shè)計(jì)與研究變得越來(lái)越重要[1]。在早期許多處理器中,并沒(méi)有專門(mén)的浮點(diǎn)運(yùn)算單元,只是用軟件定點(diǎn)運(yùn)算來(lái)代替,從而使運(yùn)算速率大大的下降,同時(shí)也不能滿足高速運(yùn)算的要求,但是現(xiàn)在,從硬件上設(shè)計(jì)一個(gè)獨(dú)立浮點(diǎn)運(yùn)算器是一件完全可以實(shí)現(xiàn)的事,因此現(xiàn)代的處理器能使用獨(dú)立的硬件來(lái)實(shí)現(xiàn)浮點(diǎn)運(yùn)算單元[2]。高速有效的浮點(diǎn)運(yùn)算器結(jié)構(gòu)包括浮點(diǎn)加法器、浮點(diǎn)乘法器、浮點(diǎn)除法器等部分的設(shè)計(jì),根據(jù)Oberman的技術(shù)報(bào)告可知[3],浮點(diǎn)加法器的使用頻率高達(dá)55%,因?yàn)闇p法最終會(huì)轉(zhuǎn)換為采用浮點(diǎn)加法器實(shí)現(xiàn),浮點(diǎn)乘除法器等一些浮點(diǎn)運(yùn)算也會(huì)用到加法器,所以加法器是使用頻率最高的浮點(diǎn)運(yùn)算模塊[4]?;谏鲜銮闆r,本文提出了實(shí)現(xiàn)單雙精度浮點(diǎn)運(yùn)算加法器,此加法器對(duì)雙精度浮點(diǎn)加法器結(jié)構(gòu)做了些調(diào)整,在計(jì)算單雙精度浮點(diǎn)運(yùn)算時(shí),只需通過(guò)控制端便可實(shí)現(xiàn)功能的切換。
1 IEEE-754標(biāo)準(zhǔn)簡(jiǎn)介
IEEE-754標(biāo)準(zhǔn)是計(jì)算機(jī)領(lǐng)域公認(rèn)的浮點(diǎn)數(shù)標(biāo)準(zhǔn)(IEEE standard for binary floating point arithmetic.ANSI/IEEE754-1984)[5]。IEEE-754浮點(diǎn)數(shù)由三部分組成:符號(hào)、階碼和尾數(shù)。尾數(shù)部分由小數(shù)部分和隱含位構(gòu)成。標(biāo)準(zhǔn)定義了32位的單精度和64位的雙精度兩種格式,其中符號(hào)位:0代表正數(shù),1代表負(fù)數(shù),它們的階碼字段分別是8位和11位,尾數(shù)字段分別為23位和52位,它代表著浮點(diǎn)數(shù)的精確度,其包含著一個(gè)隱含位和小數(shù)部分,隱含的基數(shù)值為2。為了使浮點(diǎn)數(shù)格式整潔,對(duì)浮點(diǎn)數(shù)進(jìn)行了規(guī)格化處理,規(guī)格化的浮點(diǎn)數(shù)的格式表達(dá)式是:,其中代碼b是二進(jìn)制數(shù)0或者1。要求將小數(shù)點(diǎn)放在第一個(gè)非零數(shù)的后面,在這種規(guī)則下,一個(gè)小優(yōu)化放在二進(jìn)制規(guī)格化浮點(diǎn)數(shù)數(shù)上,而二進(jìn)制數(shù)第一個(gè)非零數(shù)字只能是1,所以在小數(shù)點(diǎn)前面的第一位總是1,故在IEEE-754標(biāo)準(zhǔn)中32位單精和64位雙精格式中這個(gè)1是不出現(xiàn)的,稱其為隱藏位(hidden bit)。在IEEE-754標(biāo)準(zhǔn)中,為了有效字段能表示更多的數(shù)字,內(nèi)存不儲(chǔ)存這個(gè)1,有效字段實(shí)際上只儲(chǔ)存了尾數(shù)部分。下面顯示了32位單精度和64位雙精度的格式,
階碼部分既要能夠要能夠代表正階碼,又要能夠代表負(fù)階碼,為了做到這一點(diǎn),階碼部分實(shí)際儲(chǔ)存的是浮點(diǎn)數(shù)指數(shù)加上一個(gè)偏移量,在IEEE-754標(biāo)準(zhǔn)中單精度浮點(diǎn)數(shù)的階碼偏移量位127,雙精度的階碼偏移量為1023。
2 浮點(diǎn)數(shù)加法算法
1) 指數(shù)相減:兩數(shù)階碼不相等,表示小數(shù)點(diǎn)位置沒(méi)有對(duì)齊,必須使兩階碼相等,才執(zhí)行加法操作。比較兩個(gè)階碼大小,求階碼差值|d|。
2) 指數(shù)對(duì)齊:采用“小階向大階對(duì)齊”,將階碼較小的浮點(diǎn)數(shù)的尾數(shù)右移|d|,使兩個(gè)浮點(diǎn)數(shù)階碼相等,實(shí)現(xiàn)對(duì)階。
3) 尾數(shù)有效位相加:根據(jù)操作碼(加或減)和操作數(shù)的符號(hào)完成有效位加或減。
4) 尾數(shù)轉(zhuǎn)換:計(jì)算出尾數(shù)的結(jié)果都為補(bǔ)碼表示的,需轉(zhuǎn)換為原碼。
5) 規(guī)格化與舍入:結(jié)果規(guī)格化使尾數(shù)為1.F,找出高位第一個(gè)1的位置,根據(jù)它所在的位置,然后尾數(shù)左移或右移,調(diào)整階碼。
6) 溢出檢查:檢查階碼是否溢出,若溢出標(biāo)志溢出位,若無(wú)則正常輸出。
3 單、雙精度浮點(diǎn)數(shù)加法器設(shè)計(jì)
設(shè)計(jì)單雙精度浮點(diǎn)數(shù)加法器,經(jīng)過(guò)分析與查閱相關(guān)的資料,雙精度加法器經(jīng)過(guò)一些改動(dòng)與設(shè)計(jì)[6],便可實(shí)現(xiàn)的兩路并行單精度或一路雙精度浮點(diǎn)加法運(yùn)算,通過(guò)功能控制端en的信號(hào)處于高電平或低電平,實(shí)現(xiàn)單精度或雙精度加法之間的切換,即當(dāng)en為高電平時(shí),執(zhí)行雙精度浮點(diǎn)加法運(yùn)算,當(dāng)en為低電平,執(zhí)行兩路并行單精度浮點(diǎn)加法運(yùn)算,最后輸出符合IEEE-754標(biāo)準(zhǔn)格式的浮點(diǎn)數(shù)。
由單精度和雙精度的位數(shù)可知,每一個(gè)雙精度數(shù)可以由兩個(gè)單精度數(shù)組成,所以當(dāng)該加法器輸入兩個(gè)雙精度數(shù)A和B時(shí),則A可以由兩個(gè)單精度數(shù)和組成,B可以兩個(gè)單精度數(shù)和組成。當(dāng)功能控制端en為低電平時(shí),執(zhí)行兩路并行單精度加法,即執(zhí)行+和+運(yùn)算操作,當(dāng)功能控制端en為高電平時(shí),執(zhí)行一路雙精度加法,即執(zhí)行A+B運(yùn)算操作。該加法器尾數(shù)分離與抽取是關(guān)鍵模塊之一,需根據(jù)控制端en信號(hào)來(lái)選取尾數(shù)為單精度還是雙精度尾數(shù)。首先尾數(shù)的儲(chǔ)存格式是個(gè)問(wèn)題,雙精度的尾數(shù)加上隱藏位有53位,再加上浮點(diǎn)數(shù)的符號(hào)位總共54位,而單精度尾數(shù)加上隱藏位與符號(hào)位共25位,所以將雙精度54位尾寬的尾數(shù)格式分割成兩個(gè)各27位位寬格式,用此來(lái)儲(chǔ)存兩個(gè)25位單精度尾數(shù),且都從各自的儲(chǔ)存格式的低位存起,各自空余出的兩個(gè)高位分別用2b00填補(bǔ),從而達(dá)到與雙精度54位尾數(shù)同樣的位寬,從而可以根據(jù)en信號(hào)來(lái)選擇正確的尾數(shù)數(shù)據(jù)進(jìn)行后續(xù)的操作。
該單雙精度加法器在尾數(shù)進(jìn)行加運(yùn)算之前,首先需要使兩浮點(diǎn)數(shù)階碼相等,按小階向大階看齊的規(guī)則,求出階碼的差值,使階碼較小的尾數(shù)(除去符號(hào)位)向右移動(dòng)兩階碼差值位。然后對(duì)移動(dòng)后的浮點(diǎn)數(shù)尾數(shù)與未移位的浮點(diǎn)數(shù)尾數(shù),使其各添加一位符號(hào)位構(gòu)成雙符號(hào)位,并且使兩尾數(shù)原碼轉(zhuǎn)換為補(bǔ)碼,符號(hào)位保持不變,這樣就不用考慮浮點(diǎn)數(shù)尾數(shù)為正或?yàn)樨?fù),也不用交換兩浮點(diǎn)數(shù)尾數(shù)順序,此構(gòu)造可以使浮點(diǎn)尾數(shù)加法運(yùn)算變得簡(jiǎn)便,最后使兩浮點(diǎn)尾數(shù)補(bǔ)碼相加求出結(jié)果。對(duì)于浮點(diǎn)數(shù)雙精度尾數(shù)再添加一位符號(hào)位,則雙精度尾數(shù)就變成55位,單精度尾數(shù)再填加一位符號(hào)位就變成26位,同樣將浮點(diǎn)數(shù)雙精度尾數(shù)分割去儲(chǔ)存兩單精度尾數(shù),一部分為28位位寬,空余的高兩位插入2b00,另一部分為27位位寬,空余的高一位插入1b0。
上述過(guò)程中浮點(diǎn)加法運(yùn)算結(jié)果為補(bǔ)碼,因此需要把補(bǔ)碼結(jié)果轉(zhuǎn)換為原碼,且符號(hào)位保持不變,然后對(duì)浮點(diǎn)尾數(shù)原碼結(jié)果進(jìn)行規(guī)格化與按IEEE-754標(biāo)準(zhǔn)舍入,規(guī)格化即找出第一1的位置,而本文查找第一個(gè)1的方法用的是優(yōu)先編碼原理,將1移至浮點(diǎn)尾數(shù)小數(shù)點(diǎn)前面第一個(gè)位置,接下來(lái)對(duì)階碼進(jìn)行調(diào)整,最后對(duì)階碼進(jìn)行檢查看是否有溢出,如有溢出標(biāo)志溢出位,最后經(jīng)過(guò)整理輸出符合IEEE-754標(biāo)準(zhǔn)格式的浮點(diǎn)數(shù)。上文所述單雙精度加法器模塊結(jié)構(gòu)如圖1所示:
4 仿真結(jié)果分析
用硬件描述語(yǔ)言Verlog HDL對(duì)該單雙精度浮點(diǎn)運(yùn)算器進(jìn)行設(shè)計(jì),使用Altera公司的Quartus ii 13.0開(kāi)發(fā)軟件對(duì)設(shè)計(jì)的加法器進(jìn)行仿真,由Quartus ii 13.0隨機(jī)產(chǎn)生測(cè)試數(shù)據(jù),將測(cè)試的數(shù)據(jù)結(jié)果與C/C++編譯的浮點(diǎn)加法器測(cè)試的結(jié)果進(jìn)行對(duì)比,結(jié)果完全正確,證明了該浮點(diǎn)加法器結(jié)構(gòu)與功能正確。圖2為所示仿真結(jié)果,opa(A)和opb(B)為輸入的兩個(gè)雙精度或四個(gè)單精度浮點(diǎn)數(shù),mm為輸出結(jié)果,aflag、bflag、aflag1、bflag1為標(biāo)志位,即如果輸入的浮點(diǎn)數(shù)為非規(guī)格化浮點(diǎn)數(shù)或超出單雙精度范圍時(shí),標(biāo)志位將進(jìn)行標(biāo)志,如果輸入數(shù)為規(guī)格化浮點(diǎn)數(shù)時(shí)標(biāo)志位為1,statex和statey為單精度輸出結(jié)果標(biāo)志位,doustate為雙精度輸出結(jié)果標(biāo)志位,如有溢出則進(jìn)行標(biāo)志,圖中en1(en)和op1為控制信號(hào),當(dāng)en1(en)為高電平時(shí)執(zhí)行雙精度浮點(diǎn)加法,當(dāng)en1(en)為低電平時(shí)執(zhí)行單精度浮點(diǎn)加法,op1為加減法器切換控制端。
5 結(jié)束語(yǔ)
本文的單雙精度浮點(diǎn)加法器在雙精度浮點(diǎn)加法器的結(jié)構(gòu)上做了一些調(diào)整,設(shè)計(jì)出能并行執(zhí)行兩路單精或一路雙精的浮點(diǎn)運(yùn)算加法器,通過(guò)信號(hào)控制端,選擇高或低電平時(shí),使加法器可以在單精與雙精加法器之間完成切換,通過(guò)驗(yàn)證該加法器結(jié)構(gòu)和功能正確,且單雙精度加法器切換方便,適合去處理存在大量單精度和雙精度浮點(diǎn)數(shù)的場(chǎng)合是有實(shí)際意義的。
參考文獻(xiàn):
[1] 王重陽(yáng),夏宏.單、雙、擴(kuò)展精度自適應(yīng)浮點(diǎn)乘、除和開(kāi)方運(yùn)算單元的實(shí)現(xiàn)[D].保定:華北電力大學(xué),2011.
[2] 張素萍,李洪剛,張慧堅(jiān).單精度浮點(diǎn)運(yùn)算單元的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2011(5).
[3] 王大宇,崔曉平.高性能浮點(diǎn)加法器的研究與設(shè)計(jì)[D].南京:南京航空大學(xué),2011.
[4] 馮為,金西.一種快速浮點(diǎn)加法器的優(yōu)化設(shè)計(jì)[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué),2009.
[5] 王冬冬,董輝.基于FPGA的浮點(diǎn)運(yùn)算器設(shè)計(jì)[D].大連:大連海事大學(xué),2009.
[6] 范繼聰,洪琪.單雙精度加法器的可重構(gòu)設(shè)計(jì)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2013(11).