基于FPGA的高速流水線浮點乘法器設(shè)計與實現(xiàn)
1引言
在數(shù)字化飛速發(fā)展的今天,人們對微處理器的性能要求也越來越高。作為衡量微處理器性能的主要標準,主頻和乘法器運行一次乘法的周期息息相關(guān)。因此,為了進一步提高微處理器性能,開發(fā)高速高精度的乘法器勢在必行。同時由于基于IEEE754標準的浮點運算具有動態(tài)范圍大,可實現(xiàn)高精度,運算規(guī)律較定點運算更為簡捷等特點,浮點運算單元的設(shè)計研究已獲得廣泛的重視。本文介紹了32位浮點乘法器的設(shè)計,采用了基4布思算法,改進的4:2壓縮器及布思編碼算法,并結(jié)合FPGA自身特點,使用流水線設(shè)計技術(shù),在實現(xiàn)高速浮點乘法的同時,也使是系統(tǒng)具有了高穩(wěn)定性、規(guī)則的結(jié)構(gòu)、易于FPGA實現(xiàn)及ASIC的HardCopy等特點。
2運算規(guī)則及系統(tǒng)結(jié)構(gòu)
2.1浮點數(shù)的表示規(guī)則
本設(shè)計采用單精度IEEE754格式【2】。設(shè)參與運算的兩個數(shù)A、B均為單精度浮點數(shù),即:
2.2浮點乘法器的硬件系統(tǒng)結(jié)構(gòu)
本設(shè)計用于專用浮點FFT處理器,因此對運算速度有較高要求。為了保證浮點乘法器可以穩(wěn)定運行在80M以下,本設(shè)計采用了流水線技術(shù)。流水線技術(shù)可提高同步電路的運行速度,加大數(shù)據(jù)吞吐量。而FPGA的內(nèi)部結(jié)構(gòu)特點很適合在其中采用流水線設(shè)計,并且只需要極少或者根本不需要額外的成本。綜上所述,根據(jù)系統(tǒng)分割,本設(shè)計將采用5級流水處理,圖1為浮點乘法器的硬件結(jié)構(gòu)圖。
3主要模塊設(shè)計與仿真
3.1指數(shù)處理模塊(E_Adder)設(shè)計
32位浮點數(shù)格式如文獻【2】中定義。由前述可知,浮點乘法的主要過程是兩個尾數(shù)相乘,同時并行處理指數(shù)相加及溢出檢測。對于32位的浮點乘法器而言,其指數(shù)為8位,因而本設(shè)計采用帶進位輸出的8位超前進位加法器完成指數(shù)相加、去偏移等操作,具體過程如下。
E_Adder模塊負責完成浮點乘法器運算中指數(shù)域的求和運算,如下式所示:
其中,E[8]為MSB位產(chǎn)生的進位。Bias=127是IEEE754標準中定義的指數(shù)偏移值。Normalization完成規(guī)格化操作,因為指數(shù)求和結(jié)果與尾數(shù)相乘結(jié)果有關(guān)。在本次設(shè)計中,通過選擇的方法,幾乎可以在Normalization標志產(chǎn)生后立刻獲得積的指數(shù)部分,使E_Adder不處于關(guān)鍵路徑。
本設(shè)計收集三級進位信號,配合尾數(shù)相乘單元的Normalization信號,對計算結(jié)果進行規(guī)格化處理,并決定是否輸出無窮大、無窮小或正常值。
根據(jù)E_Adder的時序仿真視圖,可看出設(shè)計完全符合應(yīng)用需求。
3.2改進的Booth編碼器設(shè)計
由于整個乘法器的延遲主要決定于相加的部分積個數(shù),因此必須減少部分積的數(shù)目才能進而縮短整個乘法器的運算延遲。本設(shè)計采用基4布思編碼器,使得部分積減少到13個,并對傳統(tǒng)的編碼方案進行改進。編碼算法如表1所示。
由于FPGA具有豐富的與、或門資源,使得該方法在保證速度和準確性的前提下,充分利用了FPGA內(nèi)部資源,節(jié)省了面積,同時符合低功耗的要求。
3.3部分積產(chǎn)生與壓縮結(jié)構(gòu)設(shè)計
3.3.1部分積產(chǎn)生結(jié)構(gòu)
根據(jù)布思編碼器輸出結(jié)果,部分積產(chǎn)生遵循以下公式【4】:
其中,PPi為部分積;Ai為被乘數(shù)。經(jīng)過隱藏位和符號位的擴展后,26位的被乘數(shù)尾數(shù)將產(chǎn)生13個部分積。在浮點乘法器中,尾數(shù)運算采用的是二進制補碼運算。因此,當NEG=1時要在部分積的最低位加1,因為PPi只完成了取反操作。而為了加強設(shè)計的并行性,部分積最低位加1操作在部分積壓縮結(jié)構(gòu)中實現(xiàn)。另外,為了完成有符號數(shù)相加,需對部分積的符號位進行擴展,其結(jié)果如圖4所示。13個部分積中,除第一個部分積是29位以外,其余部分積擴展為32位。其中,第一個部分積包括3位符號擴展位“SSS”,第2至13個部分積的符號擴展位為“SS”,加一操作位為“NN”,遵循如下公式:
其中,i為部分積的行數(shù),sign(i)為第i行部分積的符號。
3.3.2部分積壓縮結(jié)構(gòu)
本設(shè)計混合使用4:2壓縮器、3:2壓縮器、全加器和半加器,實現(xiàn)了13個部分積的快速壓縮,并保證了精度。本文部分積壓縮結(jié)構(gòu)的劃分如圖2所示。
圖2中,虛線給出了傳統(tǒng)部分積的壓縮劃分,而實線描述的是本文采用的部分積壓縮結(jié)構(gòu)劃分,這樣的劃分有利于簡化第二級的壓縮結(jié)構(gòu),從而在保證速度的基礎(chǔ)上,節(jié)省FPGA內(nèi)部資源。從圖2中可看出,有些位不必計算,因為這些位是由Booth編碼時引入的乘數(shù)尾數(shù)的符號位產(chǎn)生的,48位足以表達運算結(jié)果。
3.3.3改進的4:2壓縮器
本設(shè)計采用廣泛使用的4:2壓縮器,并針對FPGA內(nèi)部資源特點,對其進行了改進。如圖3所示。傳統(tǒng)的4:2壓縮器即兩個全加器級聯(lián),共需要四個異或門和8個與非門。而改進的4:2壓縮器需要四個異或門和兩個選擇器(MUX)。8個與非門需要36個晶體管,而兩個MUX需要20個晶體管。同時,F(xiàn)PGA內(nèi)部集成了大量的異或門和選擇器資源,這種設(shè)計方法也是對FPGA的一個充分利用。
由于壓縮部分積需要大量的4:2壓縮器,所以改進的電路能在一定程度上減小版圖的面積,也為該乘法器的ASIC后端設(shè)計帶來了優(yōu)勢。另外,改進的壓縮器的4個輸入到輸出S的延時相同,都是3級XOR門延時。
432位浮點乘法器的實現(xiàn)與仿真
圖4顯示了本設(shè)計的FPGA時序仿真結(jié)果,時序仿真環(huán)境為QuartusII7.0,目標芯片為Cyclone系列的EP1C6Q240C8,功能仿真環(huán)境為Modelsim6.0b。整個設(shè)計采用VHDL語言進行結(jié)構(gòu)描述,綜合策略為面積優(yōu)先。由仿真視圖可看出,該浮點乘法器可穩(wěn)定運行在80M及以下頻率,在延時5個周期后,以后每一個周期可穩(wěn)定輸出一級乘法運算結(jié)果,實現(xiàn)了高吞吐量。如果采用全定制進行后端版圖布局布線,乘法器的性能將更加優(yōu)越。
5結(jié)語
本文作者創(chuàng)新點:針對FPGA器件內(nèi)部資源特性,獨創(chuàng)地提出了一種適合FPGA實現(xiàn)的5級流水高速浮點乘法器。該乘法器支持IEEE754標準32位單精度浮點數(shù),采用了基4布思算法、改進的布思編碼器、部份積壓縮結(jié)構(gòu)等組件,從而在保證高速的前提下,縮小了硬件規(guī)模,使得該乘法器的設(shè)計適合工程應(yīng)用及科學計算,并易于ASIC的后端版圖實現(xiàn)。該設(shè)計已使用在筆者設(shè)計的浮點FFT處理器中,取得了良好效果。