孟銳


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