大概在遥远的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,再根据本文陈述的内容,去观摩工具的行为,这一点就会尽在你的掌握之中了。

 

posted on 2019-08-25 23:28  春风一郎  阅读(3394)  评论(0编辑  收藏  举报