32位單精度浮點(diǎn)乘法器的FPGA實(shí)現(xiàn)
關(guān)鍵詞: 浮點(diǎn)乘法器; Boo th 算法; W allace 樹(shù); 波形仿真
隨著計(jì)算機(jī)和信息技術(shù)的快速發(fā)展, 人們對(duì)微處理器的性能要求越來(lái)越高。乘法器完成一次乘法操作的周期基本上決定了微處理器的主頻, 因此高性能的乘法器是現(xiàn)代微處理器中的重要部件。本文介紹了32 位浮點(diǎn)陣列乘法器的設(shè)計(jì), 采用了改進(jìn)的Booth 編碼, 和Wallace樹(shù)結(jié)構(gòu), 在減少部分積的同時(shí), 使系統(tǒng)具有高速度, 低功耗的特點(diǎn), 并且結(jié)構(gòu)規(guī)則, 易于VLSI的實(shí)現(xiàn)。
1 乘法計(jì)算公式
32 位乘法器的邏輯設(shè)計(jì)可分為: Booth編碼與部分積的產(chǎn)生, 保留進(jìn)位加法器的邏輯, 乘法陣列的結(jié)構(gòu)。
1.1 Booth編碼與部分積的邏輯設(shè)計(jì)
尾數(shù)的乘法部分,本文采用的是基4 Booth編碼方式, 如表1。首先規(guī)定Am和Bm表示數(shù)據(jù)A和B的實(shí)際尾數(shù),P 表示尾數(shù)的乘積, PPn表示尾數(shù)的部分積。浮點(diǎn)32 位數(shù), 尾數(shù)是帶隱含位1 的規(guī)格化數(shù), 即: Am =1a22a21….a0和Bm = 1 b22b21.…b0, 由于尾數(shù)全由原碼表示,相當(dāng)于無(wú)符號(hào)數(shù)相乘, 24 24 位尾數(shù)乘積P 的公式為:
1.2 乘法器的陣列結(jié)構(gòu)
本文采用的是3 -2 加法器, 輸入3 個(gè)1 位數(shù)據(jù): a, b,ci; 輸出2 個(gè)1 位數(shù)據(jù): s, Co。運(yùn)算式如下:
其邏輯表達(dá)式如下:
當(dāng)每個(gè)部分積PPn 產(chǎn)生之后, 將他們相加便得到每個(gè)乘法操作的結(jié)果。相加的步驟有很多, 可采用的結(jié)構(gòu)和加法器的種類(lèi)也很多。比如串行累加:
而Wallace 樹(shù)的乘法陣列如下:
加法器之間的連接關(guān)系如圖1, 圖2 所示, 或者從公式(7) 與(8) 中可以看出, 圖1中串行累加的方法延遲為11個(gè)3-2 加法器的延遲, 而圖2中, Wallace樹(shù)延遲為5個(gè)3 -2加法器的延遲。圖1的延遲比圖2的延遲大。
圖1 串行累加 圖2 Wallace 樹(shù)
2 32 位浮點(diǎn)乘法器的設(shè)計(jì)
本文是針對(duì)IEEE754 單精度浮點(diǎn)數(shù)據(jù)格式進(jìn)行的浮點(diǎn)乘法器設(shè)計(jì)。IEEE754 單精度浮點(diǎn)格為32位, 如圖3 所示。設(shè)A ,B均為單精度IEEE754格式, 他們的符號(hào)位, 有效數(shù)的偏移碼和尾數(shù)部分分別用S , E 和M來(lái)表示。雙精度和單精度采用的運(yùn)算規(guī)則是一致的, 只是雙精度的位長(zhǎng)增加了一倍, 雙精度是64位, 其中尾數(shù)52位, 指數(shù)11位, 1位符號(hào)位。所以提高了精度范圍。
圖3 32 位浮點(diǎn)數(shù)據(jù)格式
32 位浮點(diǎn)數(shù)據(jù)格式: A = (- 1) S M 2E-127。其中乘法器運(yùn)算操作分4步進(jìn)行。
(1) 確定結(jié)果的符號(hào), 對(duì)A 和B 的符號(hào)位做異或操作。
(2) 計(jì)算階碼, 兩數(shù)相乘, 結(jié)果的階碼是兩數(shù)的階碼相加, 由于A 和B 都是偏移碼, 因此需要從中減去偏移碼值127,得到A 和B 的實(shí)際階碼, 然后相加, 得到的是結(jié)果的階碼, 再把他加上127, 變成偏移碼。
(3) 尾數(shù)相乘,A 和B 的實(shí)際尾數(shù)分別為24位數(shù), 即1Ma 和1Mb, 最高位1是隱藏位, 浮點(diǎn)數(shù)據(jù)格式只顯示后23位, 所以尾數(shù)相乘結(jié)果應(yīng)為一個(gè)48位的數(shù)據(jù)。
(4) 尾數(shù)規(guī)格化, 需要把尾數(shù)相乘的48位結(jié)果數(shù)據(jù)變成24 位的數(shù)據(jù), 分3步進(jìn)行:
① 如果乘積的整數(shù)位為01, 則尾數(shù)已經(jīng)是規(guī)格化了;如果乘積的整數(shù)位為10, 11, 則需要把尾數(shù)右移1位, 同時(shí)把結(jié)果階碼加1。
② 對(duì)尾數(shù)進(jìn)行舍入操作, 使尾數(shù)為24位, 包括整數(shù)的隱藏位。
③ 把結(jié)果數(shù)據(jù)處理為32位符合IEEE浮點(diǎn)數(shù)標(biāo)準(zhǔn)的結(jié)果。包括1位符號(hào)位, 8位結(jié)果階碼位, 結(jié)果23尾數(shù)位。
3 32 位浮點(diǎn)乘法器的實(shí)現(xiàn)與仿真
圖4 列出本設(shè)計(jì)的FPGA 仿真結(jié)果。圖中data1是被乘數(shù), data2是乘數(shù), reset是清零信號(hào), 高有效。start 是開(kāi)始信號(hào), 也是高有效。dataout10是兩個(gè)浮點(diǎn)32 位數(shù)相乘, 進(jìn)行規(guī)格化以后的結(jié)果, 是一個(gè)32 位數(shù)。Product 是24位尾數(shù)相乘的結(jié)果, 是一個(gè)48位數(shù)。
圖4 32 位浮點(diǎn)乘法器的仿真結(jié)果
整個(gè)設(shè)計(jì)采用了VHDL和Verilog HDL語(yǔ)言進(jìn)行結(jié)構(gòu)描述, 如果采用的是上華0.5 的標(biāo)準(zhǔn)單元庫(kù), 并用Synopsys DC 進(jìn)行邏輯綜合, 其結(jié)果是完成一次32位浮點(diǎn)乘法的時(shí)間為30ns, 如果采用全定制進(jìn)行后端版圖布局布線, 乘法器性能將更加優(yōu)越。
4 結(jié) 語(yǔ)
本文給出了32 位浮點(diǎn)乘法器的設(shè)計(jì), 浮點(diǎn)算法具有高精度性以及較寬的運(yùn)算范圍, 使得乘法的設(shè)計(jì)更能夠滿足工程和科學(xué)計(jì)算的要求, 電路的設(shè)計(jì)、模擬和實(shí)現(xiàn)均采用Altera Quartus II 4.1開(kāi)發(fā)工具。采用的器件EPF10K100EQ 240-1, 邏輯單元是1914個(gè), PIN的數(shù)量是147,本設(shè)計(jì)采用了一系列的算法和結(jié)構(gòu), 如采用Booth編碼的方法和Wallace樹(shù)的結(jié)構(gòu), 使得系統(tǒng)具有高速度特點(diǎn), 并且易于ASIC的后端版圖實(shí)現(xiàn)。
評(píng)論