新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 32位單精度浮點乘法器的FPGA實現

        32位單精度浮點乘法器的FPGA實現

        作者: 時間:2007-11-13 來源:網絡 收藏
        摘 要: 采用Verilog HDL語言, 在上實現了32位單的設計, 通過采用改進型Booth編碼,和Wallace 樹結構, 提高了的速度。本文使用Altera Quartus II 4.1仿真軟件, 采用的器件是EPF10K100EQ 240 -1, 對進行了波形仿真, 并采用0.5CMOS工藝進行邏輯綜合。
        關鍵詞: 乘法器; Boo th 算法; W allace 樹; 波形仿真

        隨著計算機和信息技術的快速發展, 人們對微處理器的性能要求越來越高。乘法器完成一次乘法操作的周期基本上決定了微處理器的主頻, 因此高性能的乘法器是現代微處理器中的重要部件。本文介紹了32 位陣列乘法器的設計, 采用了改進的Booth 編碼, 和Wallace樹結構, 在減少部分積的同時, 使系統具有高速度, 低功耗的特點, 并且結構規則, 易于VLSI的實現。

        1 乘法計算公式

        32 位乘法器的邏輯設計可分為: Booth編碼與部分積的產生, 保留進位加法器的邏輯, 乘法陣列的結構。

        1.1 Booth編碼與部分積的邏輯設計

        尾數的乘法部分,本文采用的是基4 Booth編碼方式, 如表1。首先規定Am和Bm表示數據A和B的實際尾數,P 表示尾數的乘積, PPn表示尾數的部分積。浮點32 位數, 尾數是帶隱含位1 的規格化數, 即: Am =1a22a21….a0和Bm = 1 b22b21.…b0, 由于尾數全由原碼表示,相當于無符號數相乘, 24 24 位尾數乘積P 的公式為:





        1.2 乘法器的陣列結構
        本文采用的是3 -2 加法器, 輸入3 個1 位數據: a, b,ci; 輸出2 個1 位數據: s, Co。運算式如下:

        其邏輯表達式如下:


        當每個部分積PPn 產生之后, 將他們相加便得到每個乘法操作的結果。相加的步驟有很多, 可采用的結構和加法器的種類也很多。比如串行累加:


        而Wallace 樹的乘法陣列如下:


        加法器之間的連接關系如圖1, 圖2 所示, 或者從公式(7) 與(8) 中可以看出, 圖1中串行累加的方法延遲為11個3-2 加法器的延遲, 而圖2中, Wallace樹延遲為5個3 -2加法器的延遲。圖1的延遲比圖2的延遲大。

        圖1 串行累加 圖2 Wallace 樹

        2 32 位浮點乘法器的設計

        本文是針對IEEE754 單浮點數據格式進行的浮點乘法器設計。IEEE754 單浮點格為32位, 如圖3 所示。設A ,B均為單精度IEEE754格式, 他們的符號位, 有效數的偏移碼和尾數部分分別用S , E 和M來表示。雙精度和單精度采用的運算規則是一致的, 只是雙精度的位長增加了一倍, 雙精度是64位, 其中尾數52位, 指數11位, 1位符號位。所以提高了精度范圍。

        圖3 32 位浮點數據格式

        32 位浮點數據格式: A = (- 1) S M 2E-127。其中乘法器運算操作分4步進行。
        (1) 確定結果的符號, 對A 和B 的符號位做異或操作。
        (2) 計算階碼, 兩數相乘, 結果的階碼是兩數的階碼相加, 由于A 和B 都是偏移碼, 因此需要從中減去偏移碼值127,得到A 和B 的實際階碼, 然后相加, 得到的是結果的階碼, 再把他加上127, 變成偏移碼。
        (3) 尾數相乘,A 和B 的實際尾數分別為24位數, 即1Ma 和1Mb, 最高位1是隱藏位, 浮點數據格式只顯示后23位, 所以尾數相乘結果應為一個48位的數據。
        (4) 尾數規格化, 需要把尾數相乘的48位結果數據變成24 位的數據, 分3步進行:

        ① 如果乘積的整數位為01, 則尾數已經是規格化了;如果乘積的整數位為10, 11, 則需要把尾數右移1位, 同時把結果階碼加1。
        ② 對尾數進行舍入操作, 使尾數為24位, 包括整數的隱藏位。
        ③ 把結果數據處理為32位符合IEEE浮點數標準的結果。包括1位符號位, 8位結果階碼位, 結果23尾數位。

        3 32 位浮點乘法器的實現與仿真

        圖4 列出本設計的 仿真結果。圖中data1是被乘數, data2是乘數, reset是清零信號, 高有效。start 是開始信號, 也是高有效。dataout10是兩個浮點32 位數相乘, 進行規格化以后的結果, 是一個32 位數。Product 是24位尾數相乘的結果, 是一個48位數。

        圖4 32 位浮點乘法器的仿真結果
        整個設計采用了VHDL和Verilog HDL語言進行結構描述, 如果采用的是上華0.5 的標準單元庫, 并用Synopsys DC 進行邏輯綜合, 其結果是完成一次32位浮點乘法的時間為30ns, 如果采用全定制進行后端版圖布局布線, 乘法器性能將更加優越。

        4 結 語

        本文給出了32 位浮點乘法器的設計, 浮點算法具有高精度性以及較寬的運算范圍, 使得乘法的設計更能夠滿足工程和科學計算的要求, 電路的設計、模擬和實現均采用Altera Quartus II 4.1開發工具。采用的器件EPF10K100EQ 240-1, 邏輯單元是1914個, PIN的數量是147,本設計采用了一系列的算法和結構, 如采用Booth編碼的方法和Wallace樹的結構, 使得系統具有高速度特點, 并且易于ASIC的后端版圖實現。


        關鍵詞: FPGA 精度 浮點 乘法器

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 龙陵县| 沽源县| 邹城市| 黄龙县| 三原县| 清丰县| 交城县| 监利县| 玉门市| 鹿泉市| 开化县| 金秀| 昆山市| 徐州市| 遂昌县| 巴东县| 西峡县| 德州市| 花莲县| 思南县| 孝感市| 霍邱县| 肥乡县| 扎囊县| 孟津县| 台东市| 汕头市| 大田县| 昌吉市| 孝昌县| 花莲市| 吉安市| 西安市| 武城县| 绵阳市| 阜新| 崇明县| 蒙城县| 获嘉县| 安化县| 梁平县|