数字电路到了一定规模,把数字电路网表转成原理图,通过跑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。
审核编辑:黄飞
-
原理图
+关注
关注
1298文章
6343浏览量
234101 -
VCD
+关注
关注
0文章
37浏览量
34735 -
数字电路
+关注
关注
193文章
1605浏览量
80629 -
前端设计
+关注
关注
0文章
19浏览量
10068
发布评论请先 登录
相关推荐
评论