简单的Voltus功耗分析

描述

数字电路到了一定规模,把数字电路网表转成原理图,通过跑Spectre/Ultramsim仿真来获得功耗就变得mission impossible了。 新的运算工具应运而生。Voltus的前生是EPS (Encounter Power System),是一款非常优秀的功耗分析工具。

数字电路功耗包括下面三个部分。

1. Switching power

这部分功耗来自各个标准元之间的连线interconnect的充放电。描述这部分功耗的经典公式是原理图。这里F代表频率,A代表average switching activity。

从这个经典公式可以衍生出有趣的问题?如何降低switching power呢?通常CL在前端设计中无法控制。电路的F是设计指标决定的,也改不了。前端设计能改变的只有A。这时前端设计中引入clock gating就很有必要了。 当然,有些使用场景可以降低V,但实现起来有些困难的,需要供电电路能配合,需要库在不同电压下characterize。总体来说,降低A是前端设计最直接最有效的降低switching power的方法。

2. Internal power

这部分是标准元内部由switching造成的功耗。 工具根据.lib里的数据计算这部分功耗。 下面是一个AND gate的例子。

输入A变化引起的功耗。工具根据输入A的transition time查询rise_power, fall_power 表。这个例子简化了一些。通常这两个表中的数据多几个,工具插值计算更精确一些。

原理图

输出Y的变化可以是输入A变化引起的,也可以是输入B变化引起的。Y的internal power相对复杂一些。 这里rise_power,fall_power的表是二维的。工具根据相关输入的input_transition_time,Y输出的total_output_capacitance来查询这几个表。

原理图

标准元的internal power本质上依然是电路中各个节点的switching引起的。 设计中尽量降低各个节点的switching可以有效地降低相联标准元地internal power。

3. Leakage power

这部分就是常说的漏电。 即使电路处于静止状态,没有时钟,没有任何switching,这部分功耗依然存在。 在低功耗待机状态下,如何降低漏电功耗是设计挑战。

工具计算漏电功耗也是根据.lib中的数据。下面是一个AND gate例子。 这里可以看到leakage power是和A,B输入的状态有关的。A,B同时为高电平时leakage power最大,43.7371。如果A,B电平无法确定,工具取平均值,即第二个框里的33.4556。

原理图

Voltus虽然有几个工作模式,但各个模式下功耗的算法依然遵循上面分的三类。 各个模式的区别只是设置而已。

Voltus static power

Voltus static power 本质上算的是电路的平均功耗。

Voltus static power 要求用户提供各个输入的activity。工具根据用户提供的activity,加上SDC文件内时钟的定义,就可以推算出内部各个节点的activity,再配合SPEF文件内各个连线的RC,就可以算出这个电路的switching power。同时,工具也知道内部每个标准元的输入输出特性,各个标准元的internal power也就可以算出来了。

Voltus static power理论上可以算得蛮准的,但实际操作上是有陷阱的。如果用户提供的activity不准,计算的结果就偏离了。很多时候,默认的activity 0.1可能过于悲观,造成static power 也过于悲观。

Voltus dynamic power

Voltus dynamic power本质上是计算瞬时峰值功耗,分两种方法,vectorless 或 vector-driven。 Vectorless 估算每个节点的activity,意义不大,这里就略过了。 Vector-driven采用VCD标注内部各个节点的activity。VCD来自于后仿。VCD中每个节点的activity和实际电路时一一对应的。显然,使用VCD的dynamic power可以算得很准。 通常VCD文件可以记录整个电路完整的运行过程。 但对于峰值功耗,通常只需要取VCD中的一小段时间。 这里需要注意的是,指定的这一小段时间必须对应的是activity最集中的时间段。 如果自己是电路的设计者,应该知道哪一段时间activity最多。另一个方法是先取比较长的一段时间跑一次dynamic power,在Voltus里调用Simvision打印出VDD 电流,根据VDD电流波形选择峰值时间段。随后在这个缩短的时间段再跑一下dynamic power,生成power database,供后续的IR drop分析使用。

这里引申出一个有趣的问题。Voltus dynamic power能否像S家的PTPX一样用来算电路的功耗呢?当然是可以的。功耗基本的算法就是那三类,本质上是一样的。Voltus dynamic power里VCD时间段取得和PTPX功耗分析VCD时间段一样,两者计算出来的结果在2-3%以内。 个人认为Voltus dynamic power设置对了,Voltus static power就没必要了,PTPX也可以替代了。 这样做有个小小的缺陷。通常算average power需要取比较长的时间段。这样跑Voltus dynamic power 生成的power database非常庞大。后续的Voltus IR如果还用这个庞大的power database,基本就跑不动了。 解决方法也很简单。 就像上面提到的,取缩短的时间段再跑一次dynamic power,生成对应峰值电流的power database,随后用这个小很多的power database跑IR。

审核编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分