大概在遙遠的90nm之前,leakage power在library里確實是被描述成一個常值的。但從90nm開始,為了更加精確,library里的leakage power不再是個常值了,而是被模擬成一個輸入狀態的函數。所以基礎還是library,在一個library里跟leakage相關的變量大致有:
library(my_lib) {
leakage_power_unit :"1nW";
default_leakage_power_density :0.0;
default_cell_leakage_power :0.0;
cell_leakage_power :53057.365200;
leakage_power(){
when :"!A & !B & !CI";
value: ...;
power_level:"VDD";}
}
-
Leakage_power_unit:標示leakage power的單位,如果所有庫里都沒有該變量的定義,每個工具都會有自己默認的單位,如Genus默認用nW。
-
cell_leakage_power:標示固定的leakage power值,如果library里沒有該變量的定義,或者該變量是個負值,工具會用default_cell_leakage_power的值,如果default_cell_leakage_power也沒有指定,則用default_leakage_power_density的值乘以該cell的面積來計算得出一個leakage值,如果這三個變量都沒有定義,則leakage的值為0。
-
leakage_power(){}:這一部分就是用來定義跟輸入狀態相關的leakage power,其中"when"用於定義輸入的狀態,如果某種狀態沒有定義,則用cell_leakage_power定義的值來計算leakage;power_level用於多電壓cell中指定是跟哪個電壓相關的leakage power。
1.如果library里既沒有定義cell_leakage_power也沒有定義default_cell_leakage_power而只定義了default_leakage_power_density,則:
cell_leakage_power= area *default_leakage_power_density
2.
拿AND2X2這個cell為例,它的輸入總共有四種組合狀態,在lib中只定義了三種狀態,同時還定義了cell_leakage_power,所以對於沒定義的狀態,在計算時用cell_leakage_power指定的值。假設,A處在狀態"1"的概率是0.6,B處在狀態"1"的概率是0.3,則該cell的leakge power為:
prob(!A) x prob(!B) x yy11+ prob(!A) x prob(B) x yy22 +prob(A) x prob(!B) x yy33 +prob(A) x prob(B) x YYYY=0.4 x 0.7 x yy11 +0.4 x 0.3 x yy22 + 0.6 x 0.7 x yy33 +0.6 x 0.3 x YYYY
在實際項目中,如果沒有讀入activity的文件,不同的工具都會有根據默認或指定的probability來計算每個cell輸入pin的probability,不同工具也會有相應的命令來report出當前的probability是多少,如Genus可以用命令:report instance –power,也可以通過以下attribute得到相關信息:
lp_probability_type
lp_default_probability
lp_computed_probability
不成熟的小建議:找一個cell在不同的工具里分別去報它的leakage,再根據本文陳述的內容,去觀摩工具的行為,這一點就會盡在你的掌握之中了。