热度 14| |
网友haier822在这里问了一个很好的问题。
https://bbs.eetop.cn/thread-963639-1-1.html
以前也曾经注意到static power报出的数值和dynamic power有不同,没有深究。这次花了点时间研究,找到了原因,记录一下。
首先Voltus Static Power analysis这个名字起得非常不好。这里的static并不是静态功耗的意思,而是Voltus计算平均功耗的算法之一。个人觉得Voltus Static Power 算法适用于项目中后期而不是final阶段,如缺失VCD的场景。
到了final阶段,如果DEF,SPEF,VCD都有了,Voltus Static Power算法是可以得到与Voltus Dynamic Power一致的功耗值的,但是需要改动一下设置。
set_power_analysis_mode -method static -static_netlist def
这里-static_netlist 默认是verilog。根据Cadence提供的文档,基于verilog的power analysis算法精度低于基于DEF的power analysis。
同时,Cadence的文档也指出,使用Voltus Dynamic Power Analysis算法也可以计算平均功耗。
set_power_analysis_mode -method dynamic_* -write_static_currents true
这里必须加上-write_static_currents true。
如果其他输入一致,VCD选取的时间段完全一致,基于DEF的Voltus Static Power和Voltus Dynamic Power得到的数值完全一致。这里要特别注意VCD选取的时间段一致。从这个意义上讲,到了final阶段,再跑Voltus Static Power就显得冗余了。
这里要注意的是,通常计算平均功耗时需要比较长的时间段,推荐至少是N个主时钟周期。跑Voltus Dynamic Power的时候,取这样一个比较长的时间段,生成的power.db会比较大。后续跑Voltus Dynamic Rail的时候,power.db过大,rail analysis就跑不动了。个人推荐的解决方法是建两个目录,如dyn_power,dyn_rail。
dyn_power只用来算平均功耗,VCD时间段取得长一些。跑完report_power后,看一下电流waveform,在电流波形中找到最大的尖峰,记录下时间。注意,尖峰的绝对时间等于波形里的时间加上VCD的-start指定的时间。
dyn_rail中先跑一次dynamic power,但这次VCD时间段取的时间要小一些。通常dynamic rail选50ps的分辨率,Cadence推荐采样1000点做dynamic rail analysis,对应的VCD时间段大小就是小于等于 (1000 – 1)*50ps,我们在VCD里取包含最大电流尖峰的一个小于49.95ns的时间段就可以了。这样生成的power.db小,后续的rail analysis就没有任何计算容量的问题了。
jake: Redhawk没有用过,不太好评论。理论上leakage power应该就是根据.lib里的数字算的,Redhawk报的SRAM leakage应该就是.lib里的电流乘上电压,不知道Redhawk哪里是 ...
haoshiyang: 我测试出来是我自己做的sram的APL文件出问题了,我看流程介绍用APL文件会更准些,就自己搞了一个sram的apl文件,但是用avm方式生成的 感觉还是不对!!! ...
jake: SRAM通常是memory compiler生成的,也许用memory compiler生成的APL会可靠一些
haoshiyang: memory complier生成的apl文件是啥啊?我在compiler里找了半天好像没有APL类型的文件啊,有什么关键字吗?
leluo: 楼主你好 请教一个问题 我跑static power的时候 read_activity_file不填start和end time也能跑出来一个功耗 这个值有啥意义吗 我拿它和全区间跑出的功耗值(star ...
jake: 目前没有试过不加-start -end,需要做个试验。建议用simvision打开vcd看一下,是否start,end确实是全范围,有时候vcd刚开始很长一段是空的,到某个时间点才开始 ...
leluo: 谢谢 楼主再请教个问题 我跑vectorbased flow时候 用vector profile得到了vcd window的值 且产生了一个报告 这个报告里面的功耗和最终我用report_power报出来的 ...