当前位置:首页 > > 艾思后端实现
在当下的芯片设计中,工艺越先进,芯片规模越大,功耗就越发敏感,降低功耗的诉求越来越紧迫。在小编过往的文章中,有过低功耗设计实现的一些讨论,具体猛戳如下链接:浅谈芯片低功耗的设计实现(上)浅谈芯片低功耗的设计实现(下)

优化一定是建立在计算和数据的基础上的,那么对于EDA而言,功耗是怎么算出来的呢?今天,就让小编带领大家一起从EDA的视角,来洞察功耗计算的零零总总。
开篇之前,先复习一下功耗的计算公式:注解

EDA对功耗评估的分类

基于上述功耗的计算理论,为了方便计算,EDA工具对功耗的评估分为如下几类

基于library非功耗的信息,计算功耗

基于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%)
据上,器件的功耗的相关性可以用如下的表格来归类

EDA的功耗计算示例

EDA工具提供了相应的信息和抽取方式来拟合library的描述。以常用的DC工具里的report_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下的总和表达。为了方便表达,工具使用了上述三种对象对功耗进行了分拆,总结如下可以看出,EDA工具为了简化对功耗的核算,使用了归一化的操作,这样可以大大减少报告数量和歧义,这个对library的诉求也是得到了一致限于篇幅。上文提到的SDPD、toggle rate和state probability等和功耗计算细节相关的属于,放在下一篇文章中讨论,敬请期待。

本章词汇


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭