PTPX功耗分析笔记——跑出功耗报告

从芯片设计到芯片量产的过程中功耗分析是必不可少的环节,在流片前进行功耗分析可以大致估计芯片在各应用场景中的功耗,可以提前做好功耗的优化,达到我们的预期功耗目标。但毕竟不是实际芯片的测量功耗,与实际芯片实际功耗还是不同的。而回片后的功耗测量则是实际的芯片功耗,与预估功耗会有一定的差别。流片前的功耗分析十分重要,有助于我们提前做好芯片的优化,避免无效投入和资源消耗。而流片前的功耗分析能检查出在不同的工作模式下或者工作场景下是否存在不必要的功耗,比如时钟该关的模块是否关闭,不该工作的模块是否没有工作,可以做到芯片设计的合理性检查。

功耗分析分为综合后的功耗分析(简称pre功耗分析)和PR后的功耗分析(简称post功耗分析)。pre功耗分析是直接用综合后的网表和sdf文件跑出波形文件(这里用的是fsdb波形文件),进行功耗分析。post的功耗分析用的网表是经过布局布线、插入时钟树等相关操作后的网表和sdf文件跑出波形文件(这里用的是fsdb波形文件)来进行功耗分析,且在PR过程中可能会引入新的库文件,在post功耗分析时需要将新的库文件加入功耗分析的库里面。

不论是pre功耗分析还是post功耗分析,个人认为功耗分析的能力分为三种级别:(1)根据输入文件能跑出正确的功耗;(2)能对跑出的功耗进行正确合理与否的分析;(3)能根据功耗报告提出相应的功耗优化措施。这里的笔记是关于如何跑出功耗报告,关于分析和优化建议后面会用其它笔记记录。

这里记录的功耗分析是使用ptpx进行的,进行功耗分析主要分为以下几个步骤:(1)设置功耗分析模型,总共包括time_based和averaged两个功耗分析模型;(2)读取库文件和网表文件并将它们link起来;(3)设置input transition和annotate parasitics;(4)读取波形文件;(5)进行功耗分析。进行功耗分析的模板在功耗分析工具的教程里就有,如用ptpx进行功耗分析的步骤介绍就在PT的目录下能找到。虽然能找到,但比较简单,可能在实际使用中还有所修改增补,下面简单给出一个,仅为方便自己以后翻看笔记并进行修改完善,如有错误和欠缺的,请大家慷慨指出和补充。

1 跑出功耗数据

第一步:设置功耗分析模型,这里是固定格式,注:这里的averaged可以根据需求换成time_based

# set the power analysis mode

set power_enable_analysis TRUE

set power_analysis_mode averaged

第二步:读取网表和库文件,设置current_design,将它们link起来,注:关于库文件的设置可以单独放在一个文件里,在这个script中直接source 放库的文件,放库的文件可以参考综合时对综合库的文件进行放置。

# read and link the gate level netlist

set search_path "../src/hdl/gate ../src/lob/snps . "

set link_library "* core_type.db"

#source ptpx_setup_lib.tcl

read_verilog design.vg

current_design design_top

link

第三步:读取时序约束文件

# read sdc and set transition time or annotate parasitics

read_sdc ../../design.sdc

#read_parasitics ../src/annotate/mac.spef.gz

read_sdf -analysis_type on_chip_variation design_top.sdf

第四步:检查、更新、报告时序

# check update or report the timing

check_timing

update_timing

report_timing > ./rpt/report_timing.rpt

第五步:读取波形文件

# read switching activity file

#read_vcd -strip_path tb/macinst ../sim/vcd.dump.gz

read_fsdb -strip_path "tb_top.design_top"   /path/wavie.fsdb -time {start_time end_time}

report_switching_activity -list_not_annotated > ./rpt/report_switching_activity_annotated.rpt

第六步:检查、更新、报告功耗到指定的文件中

# check or update or report power

check_power > ./rpt/check_power.rpt

update_power

report_power -hierarchy > ./rpt/report_power.rpt

report_power -verbose > ./rpt/report_power_verbose.rpt

quit

两种功耗分析模型的报告不一样,下面展示一下手册里的报告,如有侵权,请及时告知并会即使删除。第一张为time_based的功耗报告,第二张为averaged的功耗报告。

 上面给出的是用ptpx分析功耗的大致步骤,在具体使用的过程中,可能还会涉及到对operating_condition的设置,某些drc的设置,环境变量的设置等。

set_operating_conditions -tt_typical_max_0p90v_25c -analysis_type on_chip_variation

set timing_save_pin_arrival_and_slack true

set timing_save_pin_arrival_and_required true

set timing_enable_max_capacitance_set_case_analysis true

set auto_wire_load_selection false

set svr_keep_unconnected_nets true

set timing_remove_clock_reconvergence_pessimism true

set timing_disable_recovery_removal_checks false

set timing_early_launth_at_borrowing_latches false

set si_enable_analysis true

2 check为正确的功耗数据

跑出功耗数据是基础,但不正确的功耗数据不具有任何意义,因此在跑出功耗数据后,在发布功耗数据前一定要检查跑出来的功耗数据是否正确,若不正确则可能大至影响上层的决策,小则损失个人在团队中的形象。检查功耗数据的正确与否可以从以下几个方面出发:

(1)波形是否正确,使用的sdf文件是否和网表版本一致,case是否正确;波形的截取时间范围是否正确。

(2)库文件是否正确完整:功耗分析的corner和库文件的corner是否一致;库文件是否有缺失。

(3)网表文件和sdf文件是否正确:网表文件和sdf文件版本要一致,也要和波形文件一致。

(3)log的检查:其中的error和warning是否可以忽略;网表和库文件是否link成功。

如果以上几个方面都是正确的,符合要求的则输出的功耗数据便具有分析的意义,可以进行下一步的功耗分析。

补充1:

在跑功耗的脚本里一定要加上这一句:save_session 保存到的具体路径

保存到的具体路径最好里面是空的,只存session的内容,该文件可以用于本次功耗分析退出后再次查看本次功耗的分析结果,直接在pt_shell中使用restore_session 保存到的具体路径即可。

如果没有保存session,需要再次生成该次功耗分析的其他报告时,需要重新跑功耗分析后才能输出,这样很浪费时间甚至不可复现。

补充2

在跑time_based功耗后会产生一个ptpx.fsdb的文件,用于查看实时功耗波形变化,这个可以用verdi打开,具体的打开命令是:verdi -ssf ptpx.fsdb &

一个Verdi可以打开多个波形包括rtl级或者门级的仿真波形,可以查看对比功耗随工作的变化,也可以帮助分析功耗。

先写到这里,后面有更新或修改再补充修改。

  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值