孟銳
摘要:浮點(diǎn)運(yùn)算的應(yīng)用領(lǐng)域越來(lái)越廣泛,對(duì)其運(yùn)算速度的要求也在不斷提高。本文通過(guò)介紹浮點(diǎn)單精度和雙精度數(shù)據(jù)在計(jì)算機(jī)內(nèi)的表示方式,分析了在提高其運(yùn)算速度方面的相關(guān)技術(shù),例如指數(shù)比較中的對(duì)數(shù)復(fù)雜度比較器、two-path算法和前導(dǎo)零預(yù)測(cè)電路,通過(guò)在FPGA上的仿真驗(yàn)證了其可行性。
關(guān)鍵詞:浮點(diǎn)運(yùn)算;two-path算法;前導(dǎo)零預(yù)測(cè)
中圖分類(lèi)號(hào):TP302? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)24-0247-02
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
隨著科技和經(jīng)濟(jì)的快速發(fā)展,計(jì)算機(jī)處理在處理大數(shù)量級(jí)數(shù)值的需求日益劇增,實(shí)現(xiàn)快速地科學(xué)數(shù)值計(jì)算已經(jīng)成為我們面對(duì)的一個(gè)關(guān)鍵問(wèn)題。浮點(diǎn)運(yùn)算由于其運(yùn)算速度快、有效精度高、計(jì)算范圍寬等特點(diǎn)已經(jīng)成為計(jì)算機(jī)運(yùn)算的重要方式。
1 FPGA技術(shù)的發(fā)展
FPGA技術(shù)具有高速、高集成、低成本、可在線編程等優(yōu)點(diǎn)。近年來(lái),隨著大規(guī)模集成電路技術(shù)的不斷發(fā)展和芯片工藝的不斷提高,F(xiàn)PGA技術(shù)得到了廣泛的應(yīng)用,使其在控制成本具有明顯的優(yōu)勢(shì),同時(shí)也克服了專(zhuān)用處理器靈活性不足的缺點(diǎn)。因此,由于FPGA技術(shù)在器件容量、速度和資源方面的優(yōu)勢(shì)使其成為實(shí)現(xiàn)數(shù)字電路設(shè)計(jì)的一種趨勢(shì)并顯示出了極大的潛力[1]。
2浮點(diǎn)數(shù)的描述
浮點(diǎn)運(yùn)算分為規(guī)格化和非規(guī)格化兩種。格式化浮點(diǎn)運(yùn)算必須將浮點(diǎn)數(shù)規(guī)格化,運(yùn)算結(jié)果也要加以規(guī)格化處理;而非規(guī)格化浮點(diǎn)運(yùn)算,對(duì)操作數(shù)和運(yùn)算結(jié)果均不要求規(guī)格化處理。目前計(jì)算機(jī)中常用的就是規(guī)格化浮點(diǎn)數(shù),并且規(guī)格化浮點(diǎn)數(shù)的表示形式是唯一的。IEEE754標(biāo)準(zhǔn)中規(guī)定的32位和64位浮點(diǎn)數(shù)[2],標(biāo)準(zhǔn)規(guī)定每種格式都把二進(jìn)制浮點(diǎn)數(shù)表示為:
Vat=(-1)s·l.f·2e
其中f是尾數(shù)(23 bits/52 bits),采用原碼表示的無(wú)符號(hào)定點(diǎn)小數(shù)。s是尾數(shù)的符號(hào)(1 bit),s=0表示正數(shù),s=1表示負(fù)數(shù);e是階碼(8 bits/11 bits),即用移碼表示的偏置指數(shù),是有符號(hào)整數(shù),等于指數(shù)E加上偏移量。尾數(shù)用原碼表示第一位總為1,因此尾數(shù)在存儲(chǔ)時(shí)省略第一位的1,不需要存儲(chǔ),稱為隱藏位。因此單精度的23位尾數(shù)實(shí)際上表示了24位,雙精度的52位實(shí)際上表示了53位。在IEEE中規(guī)定了隱藏位1的位置應(yīng)該在小數(shù)點(diǎn)之前的一位,即實(shí)際的尾數(shù)應(yīng)該為1.f。
3浮點(diǎn)運(yùn)算器的研究
浮點(diǎn)運(yùn)算單元比定點(diǎn)運(yùn)算單元的設(shè)計(jì)要復(fù)雜很多,早期的處理器中不配備專(zhuān)門(mén)的浮點(diǎn)運(yùn)
算單元,大多采用軟件的設(shè)計(jì)方法實(shí)現(xiàn),簡(jiǎn)化了硬件電路的設(shè)計(jì)但是浮點(diǎn)運(yùn)算的速度卻不高?,F(xiàn)代隨著工藝的進(jìn)步,CPU能夠使用硬件來(lái)實(shí)現(xiàn)浮點(diǎn)運(yùn)算單元(FPU)。FPU單元的設(shè)計(jì)包括了浮點(diǎn)加法器、浮點(diǎn)乘法器、浮點(diǎn)除法器和浮點(diǎn)的開(kāi)方,在這四種運(yùn)算中,主要浮點(diǎn)運(yùn)算使用頻率如表1所示,通過(guò)對(duì)比可以看出浮點(diǎn)加法器的使用頻率是最高的達(dá)到了55%,所以設(shè)計(jì)高速的浮點(diǎn)加法器對(duì)FPU性能的提高起到至關(guān)重要的作用[3]。
4浮點(diǎn)數(shù)的加法運(yùn)算
浮點(diǎn)數(shù)在進(jìn)行加減法算法時(shí),首先要進(jìn)行對(duì)階,也就是先要將兩個(gè)浮點(diǎn)數(shù)的指數(shù)進(jìn)行轉(zhuǎn)換,使其相同,然后才能對(duì)尾數(shù)進(jìn)行加減運(yùn)算。
指數(shù)對(duì)階以及尾數(shù)的調(diào)整,浮點(diǎn)加法運(yùn)算步驟如下:
(1) 對(duì)階:通過(guò)執(zhí)行減法操作,確定兩個(gè)浮點(diǎn)數(shù)階碼的大小,在對(duì)階的時(shí)候一般采用的是小階像大階看齊的方法。
(2) 尾數(shù)移位:將階碼較小的浮點(diǎn)數(shù)階碼通過(guò)尾數(shù)的右移調(diào)整使其與另一浮點(diǎn)數(shù)的階碼相同,移位的次數(shù)即兩個(gè)階碼的差。
(3) 尾數(shù)加減:尾數(shù)采用補(bǔ)碼的加法運(yùn)算,可以將有符號(hào)的尾數(shù)加減都轉(zhuǎn)換為加法運(yùn)算。
(4) 規(guī)格化:對(duì)上一步運(yùn)算的結(jié)果進(jìn)行規(guī)格化處理,通過(guò)移位使其最高有效位為1。
(5) 指數(shù)調(diào)整:在結(jié)果進(jìn)行規(guī)格化時(shí),根據(jù)移位的次數(shù)及方向調(diào)整指數(shù),尾數(shù)左移n位則指數(shù)加n,尾數(shù)右移n位,則指數(shù)減n。
5 浮點(diǎn)加法器的基本結(jié)構(gòu)
在浮點(diǎn)加法器的設(shè)計(jì)中根據(jù)原理和結(jié)構(gòu)的不同,各種加法器的實(shí)現(xiàn)方法有所不同[4],主要可以分為下面幾類(lèi):
(1) 一位加法器:包括了半加器(HA)、全加器(FA)、計(jì)數(shù)器。
(2) 進(jìn)位傳播加法器CPA:包括了行波進(jìn)位加法器RAC、進(jìn)位跳躍加法器CSKA、進(jìn)位選擇加法器CSLA、進(jìn)位自增加法器CIA、超前進(jìn)位加法器CLA、并行前綴加法器PPA以及條件和加法器CPSA。
(3) 進(jìn)位保存加法器CSA:這類(lèi)加法器架構(gòu)又可以分為三操作數(shù)CSA和多操作數(shù)CSA。
(4) 多操作數(shù)加法器MOA:這類(lèi)加法器有兩種結(jié)構(gòu),陣列加法器和樹(shù)形加法器。
在具體的實(shí)際應(yīng)用中,往往是多種加法器的綜合使用從而達(dá)到最佳的效果,下面就影響浮點(diǎn)加法器的運(yùn)算速度的幾個(gè)方面進(jìn)行了分析。
(1) 指數(shù)比較
在浮點(diǎn)數(shù)的加法運(yùn)算過(guò)程中可以看出指數(shù)的比較是浮點(diǎn)加法運(yùn)算的前提,通過(guò)指數(shù)比較確定較小的指數(shù)轉(zhuǎn)化成與較大的指數(shù)相同,從而為后續(xù)的尾數(shù)加法運(yùn)算奠定基礎(chǔ)。在IEEE754標(biāo)準(zhǔn)中指數(shù)的比較即是兩個(gè)有符號(hào)整數(shù)的大小比較問(wèn)題。指數(shù)操作數(shù)位寬較小,要求該部分運(yùn)算速度非常快,才能減少整個(gè)浮點(diǎn)加法運(yùn)算的執(zhí)行時(shí)間。因此,在設(shè)計(jì)中采用對(duì)數(shù)復(fù)雜度整數(shù)比較器提高運(yùn)算速度。該比較器通過(guò)將兩個(gè)浮點(diǎn)數(shù)A和B的指數(shù)EA和EB分為多級(jí)并行的邏輯,分別比較左半串和右半串,左半串相同時(shí)比較右半串,反之亦然。然后將這一思路繼續(xù)應(yīng)用到兩個(gè)半串,這樣遞歸直至不可再分。
(2)浮點(diǎn)加法two-path算法
雙路徑算法的基本思想就是根據(jù)兩個(gè)操作數(shù)的指數(shù)差異大小來(lái)劃分?jǐn)?shù)據(jù)通路。兩條路徑CLOSE路徑和FAR路徑的劃分標(biāo)準(zhǔn)是根據(jù)指數(shù)的差值。如果指數(shù)差d小于等于1則選擇CLOSE路徑,反之 d大于1時(shí),則屬于FAR路徑 [5]。采用two-path的優(yōu)點(diǎn)在于FAR路徑中要么進(jìn)行加法運(yùn)算,要么進(jìn)行指數(shù)差異較大的減法運(yùn)算,在尾數(shù)規(guī)格化的時(shí)候最多只需要左移一位,當(dāng)尾數(shù)結(jié)果為正時(shí)就不需要再進(jìn)行原碼轉(zhuǎn)換。另外CLOSE路徑對(duì)齊操作的移位最多為1位,并且d的計(jì)算由最后兩位相減,最后的舍入處理可以避免。
(3)尾數(shù)處理中前導(dǎo)零預(yù)測(cè)
前導(dǎo)零檢測(cè)主要是根據(jù)尾數(shù)運(yùn)算的結(jié)果進(jìn)行規(guī)格化移位控制的邏輯電路。其功能是檢測(cè)出浮點(diǎn)加法運(yùn)算結(jié)果中的前導(dǎo)零個(gè)數(shù),從而確定規(guī)格化移位的操作[6]。傳統(tǒng)的浮點(diǎn)加減流程中采用串行結(jié)構(gòu),往往是首先計(jì)算出尾數(shù)的加法的結(jié)果然后再進(jìn)行尾數(shù)的規(guī)格化及舍入處理,而使用前導(dǎo)零預(yù)測(cè)就是將加減運(yùn)算與統(tǒng)計(jì)使用前導(dǎo)零預(yù)測(cè)電路(LZA)同時(shí)進(jìn)行,能夠有效地減少延遲,具體的結(jié)構(gòu)如圖1所示。
6 FPGA的實(shí)現(xiàn)
對(duì)浮點(diǎn)加法器的驗(yàn)證采用了altera公司的QuatusII,仿真工具使用的Modelsim,使用Verilog硬件描述語(yǔ)言進(jìn)行編程,通過(guò)綜合驗(yàn)證,組合邏輯的電路與傳統(tǒng)的浮點(diǎn)加法器相比邏輯延遲11.9ns。
7結(jié)論
本文介紹了浮點(diǎn)單精度數(shù)和雙精度數(shù)在計(jì)算機(jī)中的表示方式以及浮點(diǎn)加法器的幾種結(jié)構(gòu),討論了影響浮點(diǎn)加法器性能的幾個(gè)因素,分析了在浮點(diǎn)加法器中可以采用的并行指數(shù)比較、two-path算法以及前導(dǎo)零預(yù)測(cè)電路技術(shù),通過(guò)在EDA環(huán)境中的仿真驗(yàn)證了其可行性。
參考文獻(xiàn):
[1] 任愛(ài)鋒.基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)[M].西安電子科技大學(xué)出版社,2004.
[2] IEEE standard for binary floating point arithmetic. ANSI/IEEE754-1985
[3] 夏宏等.浮點(diǎn)加法器電路設(shè)計(jì)算法的研究[J].計(jì)算機(jī)工程與應(yīng)用,2001,37(13):10-12.
[4] 付娟.浮點(diǎn)處理單元結(jié)構(gòu)和算法研究[D].西安:西北工業(yè)大學(xué),2004.
[5] 馮為.一種快速浮點(diǎn)加法器的優(yōu)化設(shè)計(jì)[D].中國(guó)科技大學(xué),2009.
[6] 孫巖,張?chǎng)?,?基于并行預(yù)測(cè)的前導(dǎo)零預(yù)測(cè)電路設(shè)計(jì)[J].電子測(cè)量技術(shù),2008.31(1):84-87.
【通聯(lián)編輯:梁書(shū)】