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