罗风 · 2021年03月29日

四月清和雨乍晴,静态功耗乱伊心

WeChat Image_20210329102846.jpg

很长一段时间,对leakage power的计算都有一个错误的认知,认为只要cell个数类型确定,leakage就是个固定值,同一个网表不论在哪个工具里report出来的leakage值都一样。直到一次被一个实际例子狠扇了两巴掌,深究后,各工具的行为终得解释清除。正好今天跟宠萌的萌萌说起这个东西,发出来,仅供参考。

WeChat Image_20210329102849.jpg

大概在遥远的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。

搞清library中相关变量的定义后,剩下就是如何计算的问题了,其他情况好理解,分别看一下如何用default\_leakage\_power\_density计算leakage power,及如何计算跟输入状态相关的leakage power。

  • 如果library里既没有定义cell\_leakage\_power也没有定义default\_cell\_leakage\_power而只定义了default\_leakage\_power\_density,则:

cell\_leakage\_power= area *default\_leakage\_power\_density

WeChat Image_20210329102854.png

  • 跟输入状态相关的leakge\_power计算,计算公式为

WeChat Image_20210329102907.jpg

拿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

WeChat Image_20210329102930.jpg

在实际项目中,如果没有读入activity的文件,不同的工具都会有根据默认或指定的probability来计算每个cell输入pin的probability,不同工具也会有相应的命令来report出当前的probability是多少,如Genus可以用命令:report instance –power,也可以通过以下attribute得到相关信息:

lp\_probability\_type

lp\_default\_probability

lp\_computed\_probability

不成熟的小建议:找一个cell在不同的工具里分别去报它的leakage,再根据本文陈述的内容,去观摩工具的行为,这一点就会尽在你的掌握之中了。

参考文献:

genus\_library.pdf
genus\_lowpower\_legacy.pdf

作者:陌上风骑驴
来源:https://mp.weixin.qq.com/s/iNEKyo2d4AZsRCdM2n4NHg
作者微信公众号
捕获.PNG

相关文章推荐

更多IC设计技术干货请关注IC设计技术专栏。
推荐阅读
关注数
19643
内容数
1303
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息