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