隨著計(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.1Booth編碼與部分積的邏輯設(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 =1×a22a21….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)和加法器的種類也很多。比如串行累加: 而Wallace 樹(shù)的乘法陣列如下: 加法器之間的連接關(guān)系如圖1, 圖2 所示, 或者從公式(7) 與(8) 中可以看出, 圖1中串行累加的方法延遲為11個(gè)3-2 加法器的延遲, 而圖2中, Wallace樹(shù)延遲為5個(gè)3 -2加法器的延遲。圖1的延遲比圖2的延遲大。 圖1串行累加 圖2Wallace 樹(shù) 232 位浮點(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)位。所以提高了精度范圍。 圖332 位浮點(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ù), 即1×Ma 和1×Mb, 最高位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ù)位。 332 位浮點(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ù)。 圖432 位浮點(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)。 |