功耗越低,同等電量下電子產(chǎn)品工作時間越長,便攜性設(shè)備的電池容量和體積設(shè)計的困難度也會降低。例如,手機越做越薄,性能還不受影響,就是因為低功耗設(shè)計發(fā)揮了至關(guān)重要的作用。
功耗越大,耗能越多,產(chǎn)生的熱量越多,各器件的工作性能就會受到影響。例如,手機使用時間較長時,會感覺手機發(fā)熱,而且各應(yīng)用軟件也會出現(xiàn)卡頓的現(xiàn)象。
不考慮低功耗設(shè)計時,一個功能的實現(xiàn)方法可能較為繁瑣,實現(xiàn)的器件增多,產(chǎn)品面積增大;同時,功耗過大時,就要考慮散熱裝置,這又增加了組裝成本。 總之,低功耗設(shè)計有很多的優(yōu)點,也是以后數(shù)字設(shè)計的發(fā)展趨勢。
功耗類型一般可分為動態(tài)功耗、靜態(tài)功耗和浪涌功耗。
動態(tài)功耗主要包括開關(guān)功耗(又稱為翻轉(zhuǎn)功耗)和短路功耗(又稱為內(nèi)部功耗)。
1、開關(guān)功耗
在 CMOS 數(shù)字電路中,對負載電容進行充放電時消耗的功耗為開關(guān)功耗。如下 CMOS 非門:
當 Vin = 0 時,上面的 PMOS 導(dǎo)通,下面的 NMOS 截止;VDD 對負載電容 Cload 進行充電。充電完成后,Vout 的電平為高。
當 Vin = 1 時,上面的 PMOS 截止,下面的 NMOS 導(dǎo)通,負載電容通過 NMOS 進行放電。放電完成后,Vout 的電平為低。
這樣一開一閉的變化,即電源的充放電,就形成了開關(guān)功耗。開關(guān)功耗的計算公式如下所示:
其中,VDD 為供電電壓,Cload 為后級電路等效的負載電容,Tr 為輸入信號的翻轉(zhuǎn)率。
2、短路功耗
信號的翻轉(zhuǎn)不是在瞬時完成的。因此,在輸入信號進行翻轉(zhuǎn)時,PMOS 和 NMOS 總有一段時間是同時導(dǎo)通的,那么從電源 VDD 到地 VSS 之間就有了通路,形成短路電流,產(chǎn)生短路功耗。如下反相器電路圖所示:
短路功耗的計算公式如下:
其中,Vdd 為供電電壓,Tr 為翻轉(zhuǎn)率,Q 為一次翻轉(zhuǎn)過程中從電源流到地的電荷量。
在 CMOS 電路中,靜態(tài)功耗主要是漏電流引起的功耗,往往與工藝有關(guān)。
漏電流的組成主要為:PN 結(jié)反向電流 I1、源極和漏極之間的亞閾值漏電流 I2、柵極漏電流(包括柵極和漏極之間的感應(yīng)漏電流 I3)、柵極和襯底之間的隧道漏電流 I4。
一般情況下,漏電流主要是指柵極泄漏電流和亞閾值電流。對于超深亞微米工藝,隧道漏電流成為主要電流之一。
靜態(tài)功耗的計算公式如下:
浪涌功耗是浪涌電流引起的功耗。浪涌電流是指開機或者喚醒時,器件流過的最大電流,因此浪涌電流也稱為啟動電流。浪涌功耗不是本次所討論的內(nèi)容。
下面是一種 library 工藝的前幾行代碼描述,包含功耗有關(guān)的參數(shù),具體含義在注釋中說明。
library (xxx) {
/* library head: xxx */
technology (cmos) ;
simulation : true ;
nom_process : 1 ;
nom_temperature : -40; //默認溫度
nom_voltage : 0.81; //默認電壓
voltage_map(VDD, 0.81); //定義lib中多個電壓,包括以下幾行
voltage_map(TVDD, 0.81);
voltage_map(VDDDST, 0.81);
voltage_map(VDDGR, 0.81);
voltage_map(VDDSRC, 0.81);
voltage_map(VSS, 0);
operating_conditions("ssg0p81vm40c"){ //一種corner定義
process : 1; /* SSGlobalCorner_LocalMC_MOS_MOSCAP-SSGlobalCorner_LocalMC_RES_BIP_DIO_DISRES */
temperature : -40;
voltage : 0.81;
tree_type : "balanced_tree";
}
default_operating_conditions : ssg0p81vm40c ;
capacitive_load_unit (1,pf) ; //定義電容單位
voltage_unit : "1V" ; //定義電壓單位
current_unit : "1mA" ; //定義電流單位
time_unit : "1ns" ; //定義時間單位
pulling_resistance_unit : "1kohm";
define_cell_area (pad_drivers,pad_driver_sites) ;
……
一個 library 中會有多個基本功能單元,用關(guān)鍵字 cell 聲明,也包含了多種功耗信息。
cell (AN2D0BWP7T40P140) {
area : 0.392;
cell_footprint : "an2d1";
pg_pin (VDD) { //電源引腳
pg_type : primary_power;
voltage_name : VDD;
}
……
pin(A1) { //輸入信號引腳
driver_waveform_fall : "tcbn22ullbwp7t40p140ssg0p81vm40c:fall";
driver_waveform_rise : "tcbn22ullbwp7t40p140ssg0p81vm40c:rise";
direction : input;
related_ground_pin : VSS; //輸入引腳地端
related_power_pin : VDD; //輸入引腳電壓
capacitance : 0.000418924 ; //輸入引腳電容
……
}
pin(Z) {
direction : output;
power_down_function : "!VDD + VSS";
function : "(A1 A2)";
related_ground_pin : VSS; //輸出引腳地端
related_power_pin : VDD; //輸出引腳電壓
max_capacitance : 0.04182; //輸出引腳最大電容
min_capacitance : 0.00013; //輸出引腳最小電容
……
}
此時,如果再知道翻轉(zhuǎn)率,就可以計算出動態(tài)功耗。
翻轉(zhuǎn)率(Toggle rate,Tr),指單位時間內(nèi)信號(包括時鐘、數(shù)據(jù)等信號) 的翻轉(zhuǎn)次數(shù)。如下所示,信號在 40ns 時間內(nèi)跳轉(zhuǎn)了 4 次,則翻轉(zhuǎn)率為 Tr = 4/4ns = 0.1GHz。
cell 定義中,內(nèi)部功耗會有如下定義。
internal_power() {
related_pin : "A1" ;
related_pg_pin : VDD ;
rise_power(power_template_8x8) { //內(nèi)部功耗查找表
index_1("0.0026, 0.0101, 0.0252, 0.0553, 0.1155, 0.236, 0.4769, 0.9587");
index_2("0.00013, 0.00046, 0.00112, 0.00243, 0.00506, 0.01031, 0.02081, 0.04182");
values ( \
"0.000249215, 0.000254481, 0.000262354, 0.000261007, 0.00026381, 0.000277799, 0.000304295, 0.000345046", \
"0.000239751, 0.000248667, 0.000255454, 0.0002551, 0.000268563, 0.000275995, 0.000294669, 0.000336529", \
……
);
}
fall_power(power_template_8x8) { //內(nèi)部功耗查找表
index_1("0.0026, 0.0101, 0.0252, 0.0553, 0.1155, 0.236, 0.4769, 0.9587");
index_2("0.00013, 0.00046, 0.00112, 0.00243, 0.00506, 0.01031, 0.02081, 0.04182");
values ( \
"0.000577367, 0.000584652, 0.000589472, 0.000591623, 0.000592223, 0.000591943, 0.00059185, 0.000592132", \
"0.000563896, 0.000570743, 0.000576589, 0.000579818, 0.000580794, 0.00057962, 0.000579997, 0.000579136", \
"0.000550059, 0.000555794, 0.00056188, 0.000565568, 0.000567663, 0.000567231, 0.000567712, 0.00056745", \
……
);
}
}
cell 的內(nèi)部功耗與其轉(zhuǎn)換時間和輸出電容負載有關(guān)。根據(jù)輸入轉(zhuǎn)換時間和輸出電容的大小,在工藝庫中進行查表,得到上升功耗和下降功耗,再根據(jù)下面公式進行計算,可得到總的內(nèi)部功耗:
cell 定義中,靜態(tài)功耗(漏電功耗)會有如下定義。
leakage_power () {
value : 0.059561;
related_pg_pin : VDD;
}
leakage_power () {
value : 0.048082;
when : "!A1 !A2 !Z";
related_pg_pin : VDD;
}
leakage_power () {
value : 0.053318;
when : "!A1 A2 !Z";
related_pg_pin : VDD;
}
……
靜態(tài)功耗跟 cell 的狀態(tài)有關(guān),也就是輸入輸出信號在不同的狀態(tài)下,功耗也會有所差異。通過狀態(tài)進行查表,就可以得到相應(yīng)的靜態(tài)功耗了。 實際分析功耗時,不會手動的去查找相關(guān)參數(shù)來計算功耗,否則工作量會大到難以估計。往往是借助一些功耗分析工具,提取這些標準單元庫的功耗信息進行整合計算。
更多建議: