20×18位符號定點乘法器的FPGA實現(xiàn)
摘要:在數字信號處理中經常需要進行乘法運算,乘法器的設計對整個器件的性能有很大的影響,在此介紹20×18比特定點陣列乘法器的設計。采用基4-Booth算法和4-2壓縮的方案,并采用先進的集成電路工藝,使用SMIC O.18 μm標準單元庫,提高了乘法器的速度,節(jié)省了器件。利用Xilinx FPGA(xc2vp70-6ffl517)對乘法器進行了綜合仿真,完成一次乘法運算的時間為15.922 ns,在減少乘法器器件的同時,提高了乘法器的速度,降低了器件的功耗。
關鍵詞:定點乘法器;Verilog HDL;Booth 算法;4-2壓縮;波形仿真
隨著計算機和信息技術的快速發(fā)展,人們對器件處理速度和性能的要求越來越高,在高速數字信號處理器(DSP)、微處理器和RSIC等各類芯片中,乘法器是必不可少的算術邏輯單元,且往往處于關鍵延時路徑中,乘法運算需要在一個時鐘周期內完成,它完成一次乘法操作的周期基本上決定了微處理器的主頻,因此高性能的乘法器是現(xiàn)代微處理器及高速數字信號處理中的重要部件。目前國內乘法器設計思想有4種,分別為:并行乘法器、移位相加乘法器、查找表乘法器、加法樹乘法器。其中,并行乘法器易于實現(xiàn),運算速度快,但耗用資源多,尤其是當乘法運算位數較寬時,耗用資源會很龐大;移位相加乘法器設計思路是通過逐項移位相加實現(xiàn),其耗用器件少,但耗時鐘,速度慢;查找表乘法器將乘積直接放在存儲器中,將操作數作為地址訪問存儲器,得到的輸出數據就是乘法結果,該方法的速度只局限于存儲器的存儲速度,但隨乘數的位數增加,存儲器的空間會急劇增加,該方法不適合位數高的乘法操作;加法樹乘法器采用流水線結構,能在一個時鐘完成兩數相乘,但當乘數的位數增加,流水線的級數增多,導致會使用很多寄存器,增加器件的耗用,而采用Booth算法的乘法器,會在速度、器件、精度、功耗方面有很大優(yōu)勢。
在此介紹了20×18比特定點陣列乘法器的設計,采用基4-Booth算法,4-2壓縮,基本邏輯單元為中芯國際(SMIC)公司O.18/μm工藝所提供的標準單元庫,在減少乘法器器件的同時,使系統(tǒng)具有高速度,低功耗的特點,并且結構規(guī)則,易于FPGA的實現(xiàn),同時在ASIC設計中,也是一種很好的選擇。
l 乘法器結構
20×18位乘法器的邏輯設計可分為:Booth編碼,部分積的產生,4-2壓縮樹,超前加法器,舍人溢出處理。其中。Booth算法可以減少50 %的部分乘積項,而4-2壓縮樹,減少求和的加數個數,它可以減少加法器個數,節(jié)省器件,與傳統(tǒng)方法比,同時少了串行累加或Wallace樹結構中的多級傳遞延遲,從而提高整個乘法器的速度。
4-2壓縮完后最后的兩個數,直接相加,其延時為一個超前進位加法器的延時,得到結果后,再根據需要數據的精度,做溢出處理及四舍五入如圖1所示。
[!--empirenews.page--]
1.1 Booth編碼與部分積的設計
在此采用的是基4-Booth編碼方式。在補碼表示的二進制數據中,擴展其最高位,并無影響。乘數A位寬為N,若N為奇數將A作符號擴展為A',使其位寬為偶數。設定:經過處理以后,乘數A'寬度為H,H為偶數且不得小于N。則乘數A'可表示為:
其值如表1所示:
可以看到:基4布思編碼一次考慮了3位:本位、相鄰高位、相鄰低位;處理了2位,確定運算量0,1B,2B,形成(H/2)項編碼項、乘積項。對于2B的實現(xiàn),只需要將B左移1位。因此,不管從那方面來說,基4算法方便又快捷。而基2算法1次只考慮2位、處理1位,形成N項編碼項、乘積項,只是方便而已。SMIC提供的O.18 vm標準單元庫中,布思編碼邏輯表達式為:
以M2指示相鄰高位,以M1指示本位,以M0指示相鄰低位。S為0時正,為1時負;A為0時操作數為0,為1時操作數為B;X2為O時操作數為0,為1時操作數為28。對于0,B,2B都比較好實現(xiàn),2B=(B<<1);對于(-2B)實現(xiàn)如下:一2B=2×(-B)=[~(B<<1)]+1在硬件實現(xiàn)中,相鄰部分積之間的權相差4,也就是部分積之間錯開兩位,把加1拿出來;對于所有As為1時,把所有的加1拿出來單獨做部分積,這樣可以省去多個加法器,節(jié)省器件。對與一個18 b的乘數,可以產生9個部分積,改進此Booth編碼,再加上一個補1的數,一共產生10個加數。
1.2 4-2壓縮邏輯實現(xiàn)
4-2壓縮原理圖如圖2所示。它有5個輸入端:A,B,C,D,ICI;三個輸出端:S,CO,ICO。將5-3編碼器并成1行,即為5-3計數行;若將相鄰低位之ICO接入本位之ICI,則成為4-2壓縮器。這樣可以減少2個操作數。5-3計數器代數運算式如下:
S+CO×2+ICO×2=A+B+C+D+ICI
即:I0,I1,I2,I3,Ci,D權值為1;C,C0權值為2。
[!--empirenews.page--]
SMIC提供的0.18 vm標準單元庫中,4-2壓縮CMPR42的邏輯表達式為:
在硬件實現(xiàn)該模塊時,因為有10個部分積,一共調用4-2壓縮4次,分為3級,從頂到底為2—1—1型。4-2壓縮互聯(lián)如圖3所示。
1.3 溢出處理及四舍五入
定點數相乘不會溢出,只不過結果的最終位數有所增加。20 b×18 b結果為38 b。有時38 b并不全部存儲,只需其中的一些位就可以。這涉及到四舍五人。假設數A共20位,1位符號,5位整數位,14位小數位,數B共18位,1位符號位,2位整數位,15位小數位,結果格式同A。
如圖4所示,因為只保留5位整數,把前3位都看成是符號位,如果不同,說明溢出;反之,沒溢出。再根據前兩位真正的符號判斷是上溢還是下溢,若為O,則上溢,為20'h7ffff,反之,下溢,為20'h80001。在邏輯設計上用個選通可以實現(xiàn),Verilog HDL代碼為:assignceil=data in[37]:20'h80001:20'h7ffff;其中data in[37]為最高位。
由于Verilog HDL語言是應用最為廣泛的硬件描述語言之一,可以進行各種層次的邏輯設計,也可以進行仿真驗證,時序分析,并且可移植到不同產家的不同芯片中,代碼可讀性比較強,因此本模塊設計用Ver-ilog HDL語言。
如果要舍入的數沒有溢出,那么還要考慮小數部分的舍入。若舍入數為正數,舍入相鄰位為1,舍入時必須進1;反之不用。若舍人數為負數,舍入相鄰位為1且舍人相鄰位后面還有一位為1,則舍入時需加1;反之,不加1。
[!--empirenews.page--]
2 32位浮點乘法器的實現(xiàn)與仿真測試
該模塊仿真實現(xiàn)用Mentor Graphics公司的Model-Sim SE 6.0d仿真軟件,圖5列出本設計的:FPGA仿真結果。圖5中in1是被乘數20 b。in2是乘數18 b。reset是復位清零信號,低電平有效。booth_multiplier_out是用Booth編碼乘法器算出來的結果38 b。derect_multiplier_out是直接用乘號“×”得到的結果,也是18 b。兩者結果一致。round_out是舍入后的結果,20 b。eq是測試時加的一個1 b信號,如果booth_multiplier_out和derect_multiplier_out相等為1,否則為0。
由于在測試時,將輸入和輸出都用寄存器鎖存了一個時種clk,最后輸出結果延了2個時種clk,在圖5中,第一個時種clk,輸入乘數和被乘數分別為126 999,68 850;輸出結果為第3個時種clk的8 743 881 150。因為126 999×68 850=8 743 881 150,故結果正確。在測試時,因實際數據量比較大,in1從-219~219-1,ModelSim SE 6.0d仿真軟件需要運行大概1 min,若in1從-219~219-1,in2從-217~217-1大概需要時間T=218min=4 369 h=182 day,因此在PC機上不能全測,故在寫testbench時,用random函數產生隨機數測試,該乘法器用ModelSim仿真軟件運行12 h,eq信號始終為1,即乘法器算出的結果與直接乘的結果一致,認為該方法完全可行。
3 性能比較與創(chuàng)新
該模塊用Synplify Pro8.1綜合,用XilinxISE 7.1i實現(xiàn)布局布線。在Xilinx ISE中ImplementDesign下Map報告系統(tǒng)占用資源如表2所示。
而靜態(tài)時序分析報告顯示速度和延時分別為62.805 MHz,15.922 ns。
該設計采用高壓縮率的4—2壓縮算法,壓縮率為50%,而一般的3-2壓縮壓縮率為33%,并且采用先進的集成電路制造工藝,使用SMIC公司O.18μm的標準單元庫,因此在提高了速度的同時,能減少器件,該乘法器能在1個時鐘內完成,不像采用流水線結構,雖然可以提高速度到105.38 MHz,但需3個時鐘,需要大量鎖存器,從而在增加器件的同時增加功耗,而且完成一次乘法運算時間要24.30 ns。因國內集成電路制造起步晚,目前中國80%的集成電路設計公司還在采用0.35/μm及以下工藝,國內同類乘法器,采用上華0.5 μm的標準單元庫,完成1次乘法運算時間接近30 ns,邏輯單元是1 914個。但該設計完成1次乘法運算時間僅15.922 ns,器件只有494個Slices,性能明顯提高。
4 結 語
給出了20×18位符號定點乘法器的設計,整個設計采用了Verilog HDL語言進行結構描述,采用的器件是xc2vp70-6ff1517。該設計采用基4 Booth編碼,4-2壓縮,以及采用SMIC0.18μm標準單元庫,使得該乘法器面積降低的同時,延時也得到了減小,做到芯片性能和設計復雜度之間的良好折中,該設計應用于中國地面數字電視廣播(DTMB)ASIC中3 780點FFT單元的20×18位符號定點乘法器,在60 MHz時工作良好,達到了預定的性能要求,具有一定的實用價值。