摘 要:通過對現有編碼算法的改進,提出一種新的編碼算法,它降低功耗的方法是通過減少部分積的數量來實現的。因為乘法器的運算主要是部分積的相加,因此,減少部分積的數量可以降低乘法器中加法器的數量,從而實現功耗的減低。在部分積的累加過程中,又對用到的傳統全加器和半加器進行了必要的改進,避免了CMOS輸入信號不必要的翻轉,從而降低了乘法器的動態功耗。通過在Altera公司的FPGA芯片EP2C70F896C中進行功耗測試,給出了測試結果,并與現有的兩種編碼算法進行了比較,功耗分別降低3.5%和8.4%。 關鍵詞:乘法器; 動態功耗; FPGA; ASIC
中圖分類號:TN492-34文獻標識碼:A
文章編號:1004-373X(2010)22-0015-04
Design of 24×24 bit Low-power Multiplier Based on FPGA
XING Jin-peng1, LI Zhe-ying2
(1. School of Electronic and Information Engineering, Beijing Jiaotong University, Beijing 100044, China;
2. Institute of Microelectronic Application Technology, Beijing Union University, Beijing 100101, China)
Abstract:A new coding algorithm is introduced through improving the existed coding algorithms. The algorithm can decrease the power dissipation of multiplier with the method of reducing the number of partial production. The main operation of multiplier is the sum of partial productions, so this method can decrease the number of adder in multiplier and decrease the power dissipation of multiplier. During the sum of partial productions, it improves the basic structure of the traditional full-adder and half-adder, and reduces the activity rate of the input signal of CMOS, so decreases the dynamic power dissipation. Through comparison with multipliers which are designed with existed coding algorithms, the power dissipation of the improved coding algorithm is decreased by 3.5% and 8.4%.Keywords: multiplier; low-power dissipation; FPGA; ASIC
收稿日期:2010-05-29
0 引 言
乘法器被廣泛應用于各種數字電路系統中,如DSP、數字圖像處理等系統。隨著便攜電子設備的普及,系統的集成度越來越高,這也對產品的功耗及芯片的散熱提出了更高的要求。本文提出了一種新的編碼算法,通過這種算法實現的乘法器可以進一步降低功耗,從而降低整個電子系統的功耗。
1 乘法器結構
本文介紹的24×24位乘法器的基本結構如圖1所示。其中,“降低乘數中‘1’的數量”實現對乘數y的編碼,以降低乘數y中“1”的數量,這可以在“部分積產生電路”中降低部分積的數量,“部分積產生電路”產生的部分積在“改進后的陣列加法器”和“超前進位加法器”中相加,最后得到乘積z。
圖1 乘法器結構圖
2 降低部分積數量的編碼算法
設x,y是被乘數和乘數,它們分別用24位二進制數表示,最高位是符號位,z是乘積,用47位二進制表示,最高位是符號位,“1”表示負數,“0”表示正數。則它們的關系可以用下式表示:
x=x23∑22i=0xi×2i(1)
y=y23∑22j=0yj×2j (2)
z=x×y=(x23⊕y23)∑22j=0(∑22i=0xi×2i)×yj×2j(3)
式中:xi,yj分別是x,y的權位。如果按式(3)進行乘法計算,需要將∑22i=0xi×2i與所有的yi相乘,產生23行部分積,然后再將其相加,即使yi=0,也要進行上述運算,這樣就勢必增加乘法器的功耗和延時,因此,在下面將會對全加器和半加器進行改進,使∑22i=0xi×2i僅與yi=1相乘,從而避免與yi=0相乘。首先介紹降低乘數y中“1”的數量的編碼算法。用一個事例說明本文介紹的算法的優越性。設m1,m2分別是乘數和被乘數,且令m1=01110111,如果用m2與m1中的每一位相乘,則會產生6個m2和2個“0”列,如果按照Sanjiv Kumar Mangal 和 R.M.Patrikar[1]所建議的方法,則:
01110111(m1)=10001000(n1)-
00010001(n2) (4)
將m2分別與n1和n2相乘,再將它們的乘積相減即得乘積結果。但是,在這一過程中,一共產生4個m2。如果按照本文所建議的方法,會進一步降低m2的數量,即:
01110111(m1)=10000000(n1)-00001001(n2) (5)
由式(5)可以看出,n1和n2中共有3個“1”,因此,可以進一步降低部分積的數量。當乘數的位數較大時,本文提出的算法優越性更大。具體編碼流程如圖2所示。
3 部分積的產生及相加
在數字電路中,功耗主要由3部分構成,即[2]:
Pavg=Pdynamic+Pshort+Pleakage (6)
式中:Pdynamic是動態功耗;Pshort是短路功耗;Pleakage是漏電流功耗。當CMOS的輸入信號發生翻轉時,會形成一條從電源到地的電流Id對負載電容進行充電,從而產生Pdynamic。一般情況下,Pdynamic占系統功耗的70%~90%。因此,有效地降低Pdynamic也就降低了電路功耗。
為了降低CMOS輸入信號的翻轉活動率,本文對部分積相加過程中用到的全加器和半加器[3]進行了必要的改進,從而避免當乘數y的某一位是“0”時輸入信號的翻轉,本文的全加器和半加器的結構如圖3所示。
圖2 降低y中“1”的數量的編碼算法流程圖
圖3 改進后的全加器和半加器電路圖
圖3中,xi+1,xi分別是被乘數的某一位,yj是乘數的某一位,ci,ci+1,co是加法器的進位輸出信號,si是加法器的和。
從圖1中可以看到,y經過編碼以后得到兩個數b和c,其中,b是24位二進制數,c是21位二進制數。由式(5)可得到下式:
z=x×b-x×c(7)
為了降低乘法器的延遲,將b和c分別分成三部分(即b[23:16], b[15:8], b[7:0], c[20:16], c[15:8]和c[7:0]),x分別與這6個數相乘可以得到6組部分積,每一組部分積分別采用圖4所示的陣列加法器相加,即得到6個部分積和(sb2,sb1,sb0,sc2,sc1,sc0)。圖4[4]中的HA,FA0,FA1分別對應圖3中的HA,FA0,FA1;ADD是FA0改進前的全加器。則sb2,sb1和sb0錯位相加可以得到x×b的積sb,sc2,sc1和sc0錯位相加可以得到x×c的積sc,所有這些錯位相加以及得到最后的乘積z都是通過超前進位加法器來實現的。
在由sb,sc得到z的兩個47位二進制數相加過程中,用到了3個如圖5所示[5-6]的16位二進制加法器,它包括4個4位超前進位加法器和1個超前進位單元(其中,Pi為進位傳播函數,Gi為進位產生函數)。錯位相加過程中用到的超前進位加法器與圖5中16位超前進位加法器結構類似,在此不再闡述。
圖4 23×8陣列加法器結構圖
圖5 16位超前進位加法器
4 仿真與功耗測試[7]結果
圖6所示是乘法器的功能仿真波形圖,可以看到,本文所介紹的乘法器的功能是正確的。
圖6 乘法器功能仿真結果
本文所介紹的乘法器是由VerilogHDL[8]編程實現的,因此,在Altera的FPGA芯片EP2C70F896C中進行功耗測試,功耗測試過程中環境變量設置如表1所示。
表1 功耗測試環境變量設置
期間電壓特性核電壓/VI/O電壓/V自動設定交叉點溫度/℃板級建模
正常1.21.526.0無
對功耗的測試時間是1 μs。在測試時間內,給乘法器加入不同的測試激勵,觀察功耗變化情況,為了說明本文提出的算法的優越性,同時也測試了由現有的兩種編碼算法所實現的乘法器,測試結果分別如表2~表4所示(其中,whole表示表格前部的測試激勵在測試時間內依次輸入)。
表2 采用圖2編碼設計的乘法器功耗
x×y總功耗/mW核動態功耗/mW核靜態功耗/mWI/O功耗/mW
0×0163.50.00154.848.66
8 388 607×8 388 607163.960.00154.859.11
4 489 630×4 489 630163.740.00154.858.89
2 489 635×2 489 635163.750.00154.858.90-2 489 635×2 489 635163.740.00154.858.89-4 489 630×4 489 630163.760.00154.858.91-8 388 607×8 388 607163.710.00154.858.86-1 897 593×1 897 593163.760.00154.858.91
whole220.3933.70155.0431.65
表3 文獻[1]中介紹的乘法器功耗
x×y總功耗/mW核動態功耗/mW核靜態功耗/mWI/O功耗/mW
0×0163.760.00154.858.91
8 388 607×8 388 607164.080.00154.859.23
4 489 630×4 489 630163.880.00154.859.03
2 489 635×2 489 635163.930.00154.859.08-2 489 635×2 489 635163.950.00154.859.10-4 489 630×4 489 630163.860.00154.859.01-8 388 607×8 388 607163.970.00154.859.12-1 897 593×1 897 593163.940.00154.859.09
whole228.3524.42155.0748.86
從圖6中可以看出,在測試時間內,當測試激勵保持不變時,FPGA芯片的核動態功耗0.00 mW,總功耗比較小,用三種編碼算法實現的乘法器功耗差別不大,說明在只進行一次乘法運算時,COMS的輸入信號基本沒有翻轉;當輸入激勵在測試時間內變化,即在whole狀態時,三個乘法器都有動態功耗,說明CMOS的輸入信號隨著電路輸入信號的變化而翻轉。本文介紹的乘法器的總功耗比文獻[1]介紹的算法降低了3.5%,比基于Booth-Wallace Tree[9-10]的乘法器的功耗降低了8.4%。
表4 采用Booth-Wallace-Tree 設計的乘法器功耗
x×y總功耗/mW核動態功耗/mW核靜態功耗/mWI/O功耗/mW
0×0163.750.00154.858.9
8 388 607×8 388 607164.080.00154.859.23
4 489 630×4 489 630163.880.00154.859.03
2 489 635×2 489 635163.940.00154.859.09-2 489 635×2 489 635163.910.00154.859.06-4 489 630×4 489 630163.910.00154.859.06-8 388 607×8 388 607163.950.00154.859.10-1 897 593×1 897 593163.950.00154.859.10
whole240.8544.20155.1141.54
5 結 語
本文介紹了一種新的編碼方法,它相對于文獻[1]中的編碼可以進一步降低乘數中“1”的數量,從而進一步降低了乘法器的功耗;另外,還對傳統的全加器和半加器進行了改進,從而降低CMOS輸入信號的翻轉率,從而降低了功耗。并且,通過在Altera公司的FPGA芯片EP2C70F896C中進行功耗測試,可以看出本文介紹的乘法器的功耗比文獻[1]中介紹的乘法器的功耗降低了3.5%,比基于Booth-Wallace Tree[9-10]的乘法器的功耗降低了8.4%。
參考文獻
[1]MANGAL Sanjiv K, BADGHARE R M, DESHMUKH Raghavedra B, et al. FPGA implementation of low power parallel multiplier[C]//IEEE 20th International Conference on VLSI Design. Nagpur: VNIT,2007: 115-120.
[2]CHONG K S, GWEE B , CHANG J S. Low energy 16-bit Booth leapfrog array multiplier using dynamic adders [J]. IET Circuits Devices Syst., 2007,1(2): 170-174.
[3]李哲英,駱麗,鈕文良.電子技術及其應用基礎(數字部分)[M].2版.北京:高等教育出版社,2009.
[4]ECONOMAKOS George, ANAGNOSTOPOULOS Kostas. Bit level architectural explorationi technique for the design of low power multipliers [C]//Proceedings 2006 IEEE International Symposium on Circuits and systems. Greece: Nalional Tech. Univ. of Athens, 2006: 1483-1486.
[5]PRABAKAR TN, AKSHMINARAYANAN G, ANILKUMAR K. FPGA based asynchronous pipelined multiplier with intelligent delay controller[C]//2008 International SoC Design Conference. Tiruchirappalli: Saranathan Cou. of Engineering, 2008,1: 304-309.
[6]Katz, R H.現代邏輯設計[M].北京:電子工業出版社,2005.
[7]王誠,吳繼華,范麗珍,等.Altera FPDA/CPLD 設計(基礎篇)[M].北京:人民郵電出版社,2005.
[8]夏宇聞.Verilog 數字系統設計教程[M].北京:北京航空航天大學出版社,2003.
[9]MAHANT-SHETTI Shivaling S, BALSARA P T, LEMONDS C. High performance low power array multiplier using temporal tiling [J]. IEEE Transactions on Very Large Scale Integration(VLSI)Sysytems, 1999, 7(1): 121-124.
[10]HUANG Zhi-jun, ERCEGOVACMilos D. High-performace low-power left-to-right arrary multiplier design [J]. IEEE Transaction on Computers, 2005,54(3):272-283.