热度 30| |
数字电路到了一定规模,把数字电路网表转成原理图,通过跑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。
Voltus生成的各种plot非常漂亮,赏心悦目。 Voltus是个很有趣的工具。
andywang3791: jake,interconnect switch power里CL=Cnet+Cpin,在internal switch power是否也包括了Cpin?这样在计算功耗时是否重复计算了?
andywang3791: 不太理解average的static power分析方法,如果没有得到time-based的power数据,如何求平均呢?
jake: CL=Cnet+Cpin, 这里的Cnet, Cpin只是capacitance,功耗=1/2*C*V^2。
Internal switching power里的pin power定义是不一样的。不妨打开一个.lib看一下。Input pi ...
jake: Static average power用到的switching activity就是一个平均值,因为不是time based, switching activity很可能不准,所以power算得也不准 ...
andywang3791: 您的意思是input pin/output pin根据查找表都是short power,但是internal switch power在哪里体现呢?因为有资料说internal power=short power + internal swit ...
andywang3791: 对于time-based power分析是不能用switching activity来得到吗?
jake: 可能我没理解对原来的问题,各个工具文献用的术语各不相同。从Voltus的设置来看,static power是由用户给出各个输入的activity,工具propagate activity到intern ...
andywang3791: 嗯 如果提供的是VCD,因为每个时间都有各个节点acti息,那就是dynamic power分析了,所以可以理解提供VCD就必须用time-based分析吗,或者说VCD也可以进行static ...
omgaa: 您好,请教一个问题,我是做前端的,之前都是提供vcd,指定时间段,然后用RC跑功耗,吐出一个report,包含leakage/dynamic power,现在换成了voltus。
上面说的s ...
omgaa: 您好! 下面这一段是我在voltus2013_lab这个文档里复制的原文,位于static power analysis这一章:
" SDCs do not define switching activity for primary i ...
Curacao: hello jake
目前我在研究voltus-Fi-L怎么使用,目前遇到了问题:做到调节RGB光谱让layout显示电压降这一步时,我怎么调节RGB处也没有让layout指定的线发生颜色变 ...
邦邦: hi jake :
目前本人在用hspice仿真来check .lib里面的值。delay和transition已经验证完成,数据都对的上,现在在模拟power的时候遇到了问题,那问题是在测Int ...