jake的个人空间 https://blog.eetop.cn/1592 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Voltus功耗分析

热度 31已有 13140 次阅读| 2021-6-20 22:36 |系统分类:芯片设计

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

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

1. Switching power

这部分功耗来自各个标准元之间的连线interconnect的充放电。描述这部分功耗的经典公式是image.png。这里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变化引起的功耗。工具根据输入Atransition time查询rise_power, fall_power 表。这个例子简化了一些。通常这两个表中的数据多几个,工具插值计算更精确一些。

image.png

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

image.png

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

3. Leakage power

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

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

image.png

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

这里引申出一个有趣的问题。Voltus dynamic power能否像S家的PTPX一样用来算电路的功耗呢?当然是可以的。功耗基本的算法就是那三类,本质上是一样的。Voltus dynamic powerVCD时间段取得和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 databaseIR

Voltus生成的各种plot非常漂亮,赏心悦目。 Voltus是个很有趣的工具。

14

点赞

刚表态过的朋友 (14 人)

发表评论 评论 (23 个评论)

回复 andywang3791 2021-9-27 15:37
jake,interconnect switch power里CL=Cnet+Cpin,在internal switch power是否也包括了Cpin?这样在计算功耗时是否重复计算了?
回复 andywang3791 2021-9-27 18:06
不太理解average的static power分析方法,如果没有得到time-based的power数据,如何求平均呢?
回复 jake 2021-9-28 10:16
andywang3791: jake,interconnect switch power里CL=Cnet+Cpin,在internal switch power是否也包括了Cpin?这样在计算功耗时是否重复计算了?
CL=Cnet+Cpin, 这里的Cnet, Cpin只是capacitance,功耗=1/2*C*V^2。
Internal switching power里的pin power定义是不一样的。不妨打开一个.lib看一下。Input pin switching power是input pin transition时造成的input stage short circuit power,只跟input transition有关。Output pin switching power有的文献称为arc power,属于input变化造成output变化时output stage short circuit power,跟related input pin transition和output load capacitance有关,但跟1/2*C*V^2本质不同。
回复 jake 2021-9-28 10:26
andywang3791: 不太理解average的static power分析方法,如果没有得到time-based的power数据,如何求平均呢?
Static average power用到的switching activity就是一个平均值,因为不是time based, switching activity很可能不准,所以power算得也不准
回复 andywang3791 2021-9-28 15:47
jake: CL=Cnet+Cpin, 这里的Cnet, Cpin只是capacitance,功耗=1/2*C*V^2。
Internal switching power里的pin power定义是不一样的。不妨打开一个.lib看一下。Input pi ...
您的意思是input pin/output pin根据查找表都是short power,但是internal switch power在哪里体现呢?因为有资料说internal power=short power + internal switch power
回复 andywang3791 2021-9-28 15:49
jake: Static average power用到的switching activity就是一个平均值,因为不是time based, switching activity很可能不准,所以power算得也不准 ...
对于time-based power分析是不能用switching activity来得到吗?
回复 jake 2021-9-28 21:52
andywang3791: 您的意思是input pin/output pin根据查找表都是short power,但是internal switch power在哪里体现呢?因为有资料说internal power=short power + internal swit ...
我的理解是表里的数据已经包括了short circuit power+switching power。
回复 jake 2021-9-28 22:59
andywang3791: 对于time-based power分析是不能用switching activity来得到吗?
可能我没理解对原来的问题,各个工具文献用的术语各不相同。从Voltus的设置来看,static power是由用户给出各个输入的activity,工具propagate activity到internal nodes,随后计算power。 用户给的activity不一定准,很多时候只是一个估值,Voltus算出来的power也就不准了。
如果用户提供一个VCD,给出一个时间段,而且这个时间段相当于一个可重复的周期,那么Voltus就可以用VCD里这个时间段各个节点的activity来算power, 这样会准很多。
回复 andywang3791 2021-9-29 09:17
jake: 可能我没理解对原来的问题,各个工具文献用的术语各不相同。从Voltus的设置来看,static power是由用户给出各个输入的activity,工具propagate activity到intern ...
嗯 如果提供的是VCD,因为每个时间都有各个节点acti息,那就是dynamic power分析了,所以可以理解提供VCD就必须用time-based分析吗,或者说VCD也可以进行static power分析?
回复 jake 2021-9-29 10:01
andywang3791: 嗯 如果提供的是VCD,因为每个时间都有各个节点acti息,那就是dynamic power分析了,所以可以理解提供VCD就必须用time-based分析吗,或者说VCD也可以进行static  ...
是的,提供VCD, Voltus 跑 dynamic_vectorbased,一样也可以算power。 如果时间段取得长,或是正好是所有时钟的整倍数,算出来的power实际效果就是average power。
回复 omgaa 2022-3-30 16:11
您好,请教一个问题,我是做前端的,之前都是提供vcd,指定时间段,然后用RC跑功耗,吐出一个report,包含leakage/dynamic power,现在换成了voltus。
上面说的static不是time based所以不准,是指static不能根据vcd来进行功耗分析吗?但是我看文档里static也是支持vcd来分析功耗的
回复 jake 2022-3-31 11:14
omgaa: 您好,请教一个问题,我是做前端的,之前都是提供vcd,指定时间段,然后用RC跑功耗,吐出一个report,包含leakage/dynamic power,现在换成了voltus。
上面说的s ...
Voltus UG写得有些乱。
set_power_analysis_mode  -method  {static | dynamic_vectorless | dynamic_vectorbased | dynamic_mixed_mode }, 就4种模式,不包含static vectorbased。
回复 omgaa 2022-3-31 14:43
您好! 下面这一段是我在voltus2013_lab这个文档里复制的原文,位于static power analysis这一章:
" SDCs do not define switching activity for primary inputs and other nets. SDCs also do not define how often the output of a clock gate toggles. If available, these toggle rates can be defined through a toggle count file (TCF) or a value change dump file (VCD). VCD will be covered later."
确实是只有static模式,没有static vectorbased模式。根据这个描述是否可以认为static也是支持vcd的,用vcd来描述电路的activity,以此得到较为准确的平均功耗?
回复 jake 2022-3-31 23:03
omgaa: 您好! 下面这一段是我在voltus2013_lab这个文档里复制的原文,位于static power analysis这一章:
" SDCs do not define switching activity for primary i ...
按照voltus_2013_lab.pdf往下走,你会发现static模式下并没有用到vcd。唯一用到vcd的是dynamic_vectorbased模式。
static模式下是可以用vcd的,要用read_activity_file读进来。lab没有提到。
回复 Curacao 2022-10-31 11:11
hello jake
目前我在研究voltus-Fi-L怎么使用,目前遇到了问题:做到调节RGB光谱让layout显示电压降这一步时,我怎么调节RGB处也没有让layout指定的线发生颜色变化,可以请教下是什么原因吗
回复 jake 2022-11-2 13:34
Curacao: hello jake
目前我在研究voltus-Fi-L怎么使用,目前遇到了问题:做到调节RGB光谱让layout显示电压降这一步时,我怎么调节RGB处也没有让layout指定的线发生颜色变 ...
色彩条最上面红色条右边有个对应的数字,例如1.0e+2, 数字右边有个向下的小箭头。点那个箭头,输入上限数字。 同样,色彩条最下面蓝色条对应的是最小值,也可以点向下的箭头,输入新的下限数字。
Tcl命令也可以实现,例如:
set_power_rail_display -range_min 0.001 -range_max 100 -filter_min 0.001 -filter_max 100
建议查一下手册。
回复 邦邦 2023-4-19 11:00
hi jake :
  目前本人在用hspice仿真来check  .lib里面的值。delay和transition已经验证完成,数据都对的上,现在在模拟power的时候遇到了问题,那问题是在测Internal power时,输入A变化引起功耗的变化所对应的rise_power和fall_power的值是表示什么意思?是输入A点的cap值还是功耗值,这个值是如何计算出来的?望大佬解惑?
回复 jake 2023-4-19 21:05
邦邦: hi jake :
  目前本人在用hspice仿真来check  .lib里面的值。delay和transition已经验证完成,数据都对的上,现在在模拟power的时候遇到了问题,那问题是在测Int ...
.lib里输入pin变化,但是输出不变,对应的功耗放在rise_power, fall_power表里。 查一下仿真的条件是否与rise_power, fall_power表前面的when条件相符。
rise_power, fall_power代表输入节点充放电,输出不变时消耗的功耗
回复 happy/ed 2023-9-13 00:25
写得好好!期待您写一个静态和动态IR-drop分析!
回复 tcwyfrex 2023-11-30 15:48
你好,jake:
我有个关于动态功耗的问题想请教一下。就是我们做动态功耗的分析,需要选取一段波形时间,然后它的计算结果=总功耗/总时间,这样子一平均,功耗结果还是很理想的。但是在计算peak power(PTPX或者redhawk分析最差时刻点的峰值功耗)的时候,问题就出来了,时间间隔单位如何定?即按照1ps、1ns、1/T来分析,它们算下来的峰值功耗都是不同的,差异巨大,时间越短功耗越大。那么哪个才是真正有意义的,能帮助后端分析IR drop和电源设计?工具手册或者文档里也没看到明确的使用建议,就让我很困惑,这个最小时间段定的越大,结果越乐观,越小结果越差,到底该信谁?
12下一页

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 272

    粉丝
  • 96

    好友
  • 346

    获赞
  • 294

    评论
  • 2549

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 19:47 , Processed in 0.019467 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部