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