在当下的芯片设计中,工艺越先进,芯片规模越大,功耗就越发敏感,降低功耗的诉求越来越紧迫。在小编过往的文章中,有过低功耗设计实现的一些讨论,具体猛戳如下链接:
浅谈芯片低功耗的设计实现(上)
浅谈芯片低功耗的设计实现(下)
优化一定是建立在计算和数据的基础上的,那么对于EDA而言,功耗是怎么算出来的呢?今天,就让小编带领大家一起从EDA的视角,来洞察功耗计算的零零总总。
开篇之前,先复习一下功耗的计算公式:
Total Power | ||
Dymanic Power | Leakage Power | |
Switching Power | Internal Power | |
Pswithing=1⁄2V2 ×Cload ×Tr | Pinternal=V×Tr ×Qx | Pleakage=V×Ileakage |
注解
- V :器件电压
- C l o a d C_{load} Cload :器件有效负载电容
- T r T_{r} Tr : 翻转率
- Q x Q_{x} Qx:一次翻转过程中从电源流到地的电荷量
- l l e a k a g e l_{leakage} lleakage:漏电电流
EDA对功耗评估的分类
基于上述功耗的计算理论,为了方便计算,EDA工具对与功耗的评估分为如下几类
基于library非功耗的信息,计算功耗
switching power可以结合设计状态,通过演算获取功耗
- V:用户定义,和library保持一致
- C l o a d C_{load} Cload: 负载输入input pin的电容(来自于负载器件的pin的library信息)和绕线寄生电容(RC回路模型)
- T r T_{r} Tr:频率变化信息,由设计里的信号翻转的信息决断
基于SDPD的功耗查看
leakage power可以基于SDPD,直接查看library获取功耗
- 基于器件输入状态进行功耗查看:器件状态决断SDPD (Status Dependency Path Dependency)
- library同时提供默认的leakage power的功耗信息
基于SDPD和pin的属性查找表
internal power可以基于SDPD和input/outputl 的RC属性查找表来获取
- 基于SDPD的数据查询
- input pin:基于input transiton的查找表
- output pin:基于input transiton和output cap的查找表
- cel的internal power是所有pin在SDPD下的总和
注释:SDPD是一种瞬态值。在芯片常规的工作中,某一时刻,芯片是某一种固定的SDPD,所以一个芯片的实际工作状态(功耗)是由各种SDPD按照出现的比率描述的一个完备值(各种SDPD出现概率总和是100%)
据上,器件的功耗的相关性可以用如下的表格来归类
功耗分类 | 设计 | lib | 对象类别 | SDPD比率合并 |
---|---|---|---|---|
switching power | 电压、信号频率,绕线RC负载 | 器件负载输入pin的cap | net | NA |
leakage power | 信号频率 | 基于SDPD和和input_trans的查找表 | cell | state probability |
internal power | 信号频率 | 基于SDPD和 input_tran 后者 input_tran和output_cap的查找表 | pin | toggle rate |
EDA的功耗计算示例
EDA工具提供了相应的信息和抽取方式来拟合library的描述。以常用的DC工具里的report_power
命令为例,工具会罗列出下面的功耗信息:
表头解析:
cell | Cell Internal Power | Driven net Switching power | Tot Dynamic Power (% Cell/Tot) | Cell Leakage Power |
---|---|---|---|---|
器件name | 来自于internal power的查找表 | 基于负载pin的cap,主要被电压(V)和 T r T_r Tr所决断 所以,工具在此处将driven net 和switching power做了合并。 | dynamic power 总和(switching+internal),后面的百分比表述了,switching power占整个dynamic power的比率,即cell的功耗贡献比率 | 来自于leakage power的查找表 |
DC也会把器件分类进行功耗报告打印:
对于器件的分类方法见下表:
通常,report_power
默认行为是打印类似上述的芯片功耗的总和结果,这些都是每一个器件单独功耗的合计值,当然,也可以使用一些选项打印出某一个cell或者net或的功耗细节。
但是通常不太会这么做,因为去看每一个cell或者net的功耗意义并不很大,反而是找到芯片里边的最差功耗的cell或者net会比较有趣(设计里的功耗大户)。
譬如关心cell的动态功耗,这时可以使用下列命令来罗列:
如果用户对功耗最大的cell比较感兴趣,可以使用-verbose的选项
罗列出更多的细节:
类似的也可以针对net类型进行sort、verbose的报告。
cell、net和pin的功耗归一化:
从上文描述中可以看到,net会描述switching power,cell对标的则是internla power和leakage power。但是工具在产生报告的时候,无论是net还是cell都会把三类功耗打印完全,这里是使用output pin对应的net来做的cell、net归一化处理
对于internal power,其在在library里的描述是pin based的
在report_power
命令里边,internal power被整合为cell类型,但是本质上就是所有pin在SDPD下的总和表达。
为了方便表达,工具使用了上述三种对象对功耗进行了分拆,总结如下
功耗类别 | 目标类别 | 计算公式 | 解释 |
---|---|---|---|
内部功耗 | pin | P l i n t e r n a l = ∑ 1 n A P i n i n t e r n a l P_{linternal}=\sum_1^nAPin_{internal} Plinternal=∑1nAPininternal | 基于所有pin上漏电功耗的总和 |
翻转功耗 | net | P s w i t c h i n g = O N e t s w i t c h i n g P_{switching}=ONet_{switching} Pswitching=ONetswitching | 基于cell的output net 上的反转率和cap进行的核算 |
漏电功耗 | cell | P l e a k a g e = C e l l l e a k a g e P_{leakage}=Cell_{leakage} Pleakage=Cellleakage | 基于对cell的自身的漏电的library查看 |
可以看出,EDA工具为了简化对功耗的核算,使用了归一化的操作,这样可以大大减少报告数量和歧义,这个对library的诉求也是得到了一致
限于篇幅。上文提到的SDPD、toggle rate和state probability等和功耗计算细节相关的属于,放在下一篇文章站看讨论,敬请期待。
本章词汇
词汇 | 解释 |
---|---|
动态功耗 | 器件输入信号发生变化过程中产生的功耗 |
漏电功耗 | 器件在空闲状态是由于漏电流带来的功耗 |
翻转功耗 | 器件输入管脚翻转所产生的功耗 |
内部功耗 | 器件输入管脚翻转过程中,所导致的PMOS、NMOS瞬时同导通时所产生的功耗 ,也叫短路功耗(short power) |
SDPD | 基于状态和路径的分析方法:Status Dependency Path Dependency |
toggle rate | 反转率:指在单位时间(unit time),信号的翻转次数 |
state probability | 状态概率:单位时间内逻辑1占用(高电平)所占的比率 |
【敲黑板划重点】
理解工具对于三类功耗的计算方法:pin、cell和net就可以在查验、优化功耗的地方做到有的放矢,疏而不漏。
参考资料
Rakesh Chadha • J. Bhasker An ASIC Low Power Primer
Michael Keating • David Flynn • Robert Aitken Alan Gibbons • Kaijian Shi Low Power Methodology Manual For System-on-Chip Design
沧海一升 (一)低功耗设计目的与功耗的类型