《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA的流水線單精度浮點數(shù)乘法器設計
基于FPGA的流水線單精度浮點數(shù)乘法器設計
2017年微型機與應用第4期
彭章國1,張征宇1,2,王學淵1,賴瀚軒1,茆驥1
1. 西南科技大學 信息工程學院,四川 綿陽 621010;2. 中國空氣動力研究與發(fā)展中心,四川 綿陽 621000
摘要: 針對現(xiàn)有的采用Booth算法與華萊士(Wallace)樹結構設計的浮點乘法器運算速度慢、布局布線復雜等問題,設計了基于FPGA的流水線精度浮點數(shù)乘法器。該乘法器采用規(guī)則的Vedic算法結構,解決了布局布線復雜的問題;使用超前進位加法器(Carry Lookahead Adder,CLA)將部分積并行相加,以減少路徑延遲;并通過優(yōu)化的4級流水線結構處理,在Xilinx ISE 14.7軟件開發(fā)平臺上通過了編譯、綜合及仿真驗證。結果證明,在相同的硬件條件下,本文所設計的浮點乘法器與基4-Booth算法浮點乘法器消耗時鐘數(shù)的比值約為兩者消耗硬件資源比值的1.56倍。
Abstract:
Key words :

  彭章國1,張征宇1,2,王學淵1,賴瀚軒1,茆驥1

 ?。?. 西南科技大學 信息工程學院,四川 綿陽 621010;2. 中國空氣動力研究與發(fā)展中心,四川 綿陽 621000)

       摘要:針對現(xiàn)有的采用Booth算法與華萊士(Wallace)樹結構設計的浮點乘法器運算速度慢、布局布線復雜等問題,設計了基于FPGA的流水線精度浮點數(shù)乘法器。該乘法器采用規(guī)則的Vedic算法結構,解決了布局布線復雜的問題;使用超前進位加法器(Carry Lookahead Adder,CLA)將部分積并行相加,以減少路徑延遲;并通過優(yōu)化的4級流水線結構處理,在Xilinx ISE 14.7軟件開發(fā)平臺上通過了編譯、綜合及仿真驗證。結果證明,在相同的硬件條件下,本文所設計的浮點乘法器與基4-Booth算法浮點乘法器消耗時鐘數(shù)的比值約為兩者消耗硬件資源比值的1.56倍。

  關鍵詞:浮點乘法器;超前進位加法器;華萊士樹;流水線結構;Vedic算法;Booth算法

  中圖分類號:TP331.2文獻標識碼:ADOI: 10.19358/j.issn.1674-7720.2017.04.022

  引用格式:彭章國,張征宇,王學淵,等.基于FPGA的流水線單精度浮點數(shù)乘法器設計[J].微型機與應用,2017,36(4):74-77,83.

0引言

  *基金項目: 國家自然科學基金(51475453);國家自然科學基金(11472297)浮點乘法器(eFloating Point Multiplier,F(xiàn)PM)是數(shù)字信號處理(eDigital Signal Processing,DSP)、視頻圖像處理以及信號識別等應用鄰域重要的運算單元。尤其是在視頻圖像處理領域,隨著對高速海量圖像數(shù)據(jù)處理的實時性要求逐漸提高,設計一種具有更高速率、低功耗、布局規(guī)律、占用面積小和集成度高的浮點乘法器極其重要。

  陣列乘法器是采用移位與求和的算法而設計的一種乘法器[1]。陣列乘法器具有規(guī)則的結構,易于布局布線等特點。隨著乘數(shù)位寬的增加,部分乘積的個數(shù)也成倍地增加,部分乘積項數(shù)目決定了求和運算的次數(shù),直接影響乘法器的速度。修正的Booth算法對乘數(shù)重新編碼,可以減少相加的部分乘積的數(shù)量,因為部分積的存在,部分積相加過程與陣列乘法器沒有太大差異。為了實現(xiàn)速度的提高,Wallace樹結構可以改變部分積求和方式,將求和級數(shù)從O(N)減少到O(logN)。因此現(xiàn)有很多乘法器設計都采用修正的Booth算法與Wallace樹結構相結合的方法。但是Wallace樹結構缺乏規(guī)整性,布局布線困難;引線的延長導致寄生電容增加,妨礙了電路速度的進一步提高。同時不規(guī)則的結構會增加硅板的面積,并且由于路由復雜而導致中間連接過程的增多,繼而導致功耗的增大[23]。

  吠陀乘法器具有其獨特規(guī)則的結構,隨著乘數(shù)位寬的增加,門延遲和面積的增加很緩慢,因此乘法器能夠在時間延遲、面積、功耗上達到最優(yōu)。文獻[4]設計了一種高速的4×4位吠陀乘法器,通過實驗證明了4×4位吠陀乘法器比同位寬的陣列乘法器、Booth算法乘法器的運算速度快;文獻[5]設計了單精度的浮點乘法器,其中尾數(shù)計算部分分別采用了吠陀乘法器和Booth算法乘法器兩種方法,結果證明吠陀乘法器在時間延遲和面積上都優(yōu)于Booth算法乘法器;文獻[6]在吠陀乘法器中分別采用行波進位加法器(eRipple Carry Adders,RCA)和超前進位加法器(eCarry Lookahead Adder,CLA)計算部分乘積的和,通過實驗數(shù)據(jù)對比,采用超前進位加法器可以獲得更高的速度和占更少的面積。然而對于海量的圖像數(shù)據(jù)進行浮點數(shù)乘法運算時,每一組數(shù)據(jù)從運算開始到結束期間會產生時間延遲,可以在乘法器中加入流水線結構來減少延遲時間,為此本文設計了一種基于吠陀數(shù)學的流水線浮點乘法器。

1總體設計

  本文所設計的單精度浮點數(shù)乘法器主要包含以下幾個部分:24位吠陀乘法器、一個8位無符號加法器、一個9位無符號減法器、一個符號位計算單元和一個標準化單元。其結構框圖如圖1所示。

  

001.jpg

  1.1符號位與階碼計算

  IEEE 754標準[7]為二進制浮點運算提供了一個精確的浮點數(shù)格式計算規(guī)范操作及異常處理。這一標準定義了32位單精度浮點數(shù)和64位雙精度浮點數(shù)兩種類型。它們都分別由符號位、尾數(shù)、階碼組成,表1給出了單精度浮點數(shù)格式,由式(1)表示為:

  {I{C{P3N`X%SRKGJA4%{3I6.png

  式中S 代表符號位;Exp表示階碼;Bias為固定值,其值為127;M為尾數(shù)。

007.jpg

 ?。?)符號位計算:兩個數(shù)相乘的結果的符號位由這兩個乘數(shù)的符號位相異或()得到,如式(2)所示。

  S=S1I~41LN7R]%ED8WON%J7WZ1I.pngS2(2)

  式中S1、S2為兩個單精度度浮點數(shù)的符號位,S 為兩者之間的異或結果。

 ?。?)階碼計算:該加法器模塊主要將兩個乘數(shù)的階碼相加,其結果再減去偏差值而得到相乘后結果的階碼,如式(3)所示。

  PExp=AExp+BExp-Bias(3)

  式中AExp、BExp為兩個單精度浮點數(shù)的階碼;Bias為固定值,其值為127。

  1.224位吠陀乘法器的邏輯電路設計

  吠陀乘法器是基于吠陀數(shù)學而設計的。吠陀數(shù)學是Sri Bharati Krishna Tirthaji(巴拉蒂·克里希納·第勒塔季)在研究印度古代吠陀經文的基礎上重構的數(shù)學計算體系,其中包括了算術、代數(shù)、幾何、三角函數(shù)和微積分等學科的處理方法。本文設計的24位吠陀乘法器是基于Urdhva Tiryakbhyam 圖22×2吠陀乘法器Sutra(字面意思是垂直和橫向)而設計的,2位吠陀乘法器的結構框圖如圖2所示,它由4個與門和2個半加器組成,它是24位吠陀乘法器的基本組成單元。

002.jpg

  根據(jù)2位吠陀乘法器的結構,一個4位吠陀乘法器可以分解為4個2位吠陀乘法器和3個4位加法器,如圖3所示。

 

003.jpg

  同理,一個8位吠陀乘法器可以由4個4位吠陀乘法器和3個8位加法器組成,因此,n位的吠陀乘法器能夠使用4個n/2位吠陀乘法器和3個n位的加法器實現(xiàn)。綜上,n位的吠陀乘法器被分解成n/2個n/2位的乘法器,然后這些較小位寬的乘法器(n/2位)再次分為更小位寬的乘法器(n/4位),直到被乘數(shù)位寬為2位,從而簡化整個增殖過程。

  由吠陀乘法器的結構可知,乘法器中會用到進位加法器將各部分積并行相加,隨著加法器的引入,必然會產生路徑時間延遲,從而降低乘法器的運算速度。本文使用CLA先行求得多位加法各位間的進位值,它由進位位產生進位,各進位彼此獨立,不依賴于進位傳播,從而減少等待進位所需要的時間延遲。其推導過程如下:

  設二進制加法器的第i位為 Ai 和 Bi ,輸出為Si,進位輸入為 Ci,進位輸出為 Ci+1,則有:

  Si=Ai+Bi+Ci(4)

  Ci+1=Ai&Bi+Ci&(Ai+Bi)(5)

  令:Gi=Ai&Bi,Pi=Ai+Bi ,則有:

  Ci+1=Gi+Ci&Pi(6)

  只要 Gi=1 ,就會產生向 Ci+1 位的進位,稱 Gi 為進位產生函數(shù)。同樣,只要Pi=1,就會把 Ci 傳遞到 Ci+1 位;其中 Pi 為進位傳遞函數(shù)。隨著位數(shù)的增加式(5)會加長,但總保持三個邏輯級的深度,因此形成進位的延遲是與位數(shù)無關的常數(shù)。

004.jpg

  24位吠陀乘法器結構圖如圖4所示,其中包括1個16位吠陀乘法器、2個16×8位吠陀乘法器、1個8位吠陀乘法器、3個CLA。

005.jpg

  1.3流水線結構設計

  為了提高FPM對批量數(shù)據(jù)的運算速度,根據(jù)乘法器內部獨特的結構,乘法器中采用了4級流水線進行處理,如圖5所示。通過對24位吠陀乘法器的結構進行分析可知,該乘法器主要由4個不同位寬的吠陀乘法器級聯(lián)而成,因此從最基本的2位吠陀乘法器單元出發(fā),在每一個乘法器單元中加入了移位寄存器,形成流水線結構。

2實驗結果與分析

  整個FPM設計使用Verilog HDL語言描述,然后在Xilinx ISE14.7集成軟件環(huán)境下進行了編譯、綜合及功能仿真,最后在XiLinx公司的Virtex6(xc6vlx240t-1ff1156 )硬件實驗平臺上進行了驗證。FPM中尾數(shù)乘積部分是其最重要的部分,因此設計了采用Vedic、基2-Booth、基4-Booth三種算法的24位無符號整數(shù)乘法器,并對三種算法的乘法器消耗的硬件資源進行了對比,如表2所示。

008.jpg

  由表2可知,由于乘法器中每一級都包含了3個CLA,Vedic算法乘法器消耗的LUTs數(shù)目是三種算法乘法器中最多的,而在其他方面的資源消耗是最少的?;?-Booth算法乘法器相對于基2Booth算法乘法器消耗了更多的資源。

  形如圖6~圖8所示。其中基2-Booth算法完成一次計算需要52個時鐘周期,基4-Booth算法需要15個時鐘周期,而Vedic算法乘法器由組合邏輯電路設計而成,不需要消耗時鐘周期。  

006.jpg

  表3列出了基2Booth、基4-Booth兩種算法設計的FPM與本文設計的基于吠陀數(shù)學的流水線FPM在消耗FPGA資源數(shù)目上的對比。

  由表3所知,三種方法的FPM在資源、時鐘周期消耗上與無符號整數(shù)乘法器所得結論基本一致。其中基2Booth算法FPM完成一次計算需要52個時鐘周期,基4-Booth算法需要24個時鐘周期,Vedic算法的浮點乘法器需要9個時鐘周期。綜上,Vedic算法FPM在運算速度上更快,這是因為吠陀乘法器的部分積并行相加的結果,采用高速的超前進位加法器,使得運算速度進一步提升。三種算法的浮點數(shù)乘法器的仿真波形如圖9~圖11所示。

009.jpg 

  通過計算基4-Booth FPM與本文設計的FPM消耗資源、時鐘周期數(shù)目的比值發(fā)現(xiàn),本文設計的FPM與基4-Booth算法FPM消耗時鐘數(shù)的比值約為兩者消耗FPGA資源比值的1.56倍。

3結論

  本文設計了一種基于吠陀數(shù)學的流水線FPM。乘法器采用Vedic算法,并在其結構中采用超前進位保留加法器將產生的部分積結果并行相加,從而減少了電路延遲,4級流水線結構也使得乘法器運算速度進一步得到了提高。相比于華萊士樹算法相結合設計的乘法器,吠陀乘法器具有較規(guī)則的結構,容易布局布線。雖然本文設計的浮點乘法器消耗了更多的資源,但是在速度上獲得了提高。

  參考文獻

 ?。?] 胡正偉,仲順安. 一種多功能陣列乘法器的設計方法[J]. 計算機工程, 2007, 33(22): 2325.

 ?。?] 夏煒, 肖鵬. 一種高效雙精度浮點乘法器[J]. 計算機測量與控制,2013, 21(4): 10171020.

  [3] 李飛雄, 蔣林.一種結構新穎的流水線 Booth 乘法器設計[J]. 電子科技, 2013, 26(8):4648.

  [4] KARTHIK S, UDAYABHAUN P. FPGA implementation of high speed vedic multipliers[C].International Journal of Engineering Research and Technology. ESRSA Publications, 2012, 1(10).


此內容為AET網站原創(chuàng),未經授權禁止轉載。