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