资讯动态

iOS应用功耗测试完整指南:使用Instruments和ptpx进行能耗分析

发布时间:2026/10/15 16:59:23 来源:尧图企业网站定制
iOS app 功耗测试 Instruments从芯片设计到芯片量产的过程中功耗分析是必不可少的环节在流片前进行功耗分析可以大致估计芯片在各应用场景中的功耗可以提前做好功耗的优化达到我们的预期功耗目标。但毕竟不是实际芯片的测量功耗与实际芯片实际功耗还是不同的。而回片后的功耗测量则是实际的芯片功耗与预估功耗会有一定的差别。流片前的功耗分析十分重要有助于我们提前做好芯片的优化避免无效投入和资源消耗。而流片前的功耗分析能检查出在不同的工作模式下或者工作场景下是否存在不必要的功耗比如时钟该关的模块是否关闭不该工作的模块是否没有工作可以做到芯片设计的合理性检查。功耗分析分为综合后的功耗分析简称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 parasitics4读取波形文件5进行功耗分析。进行功耗分析的模板在功耗分析工具的教程里就有如用ptpx进行功耗分析的步骤介绍就在PT的目录下能找到。虽然能找到但比较简单可能在实际使用中还有所修改增补下面简单给出一个仅为方便自己以后翻看笔记并进行修改完善如有错误和欠缺的请大家慷慨指出和补充。对于iOS开发者在进行功耗测试时除了使用Instruments和ptpx等工具还可以借助KeyMob进行实时性能监控。KeyMob提供iOS性能监控功能包括CPU、GPU、内存、能耗等指标的实时监控帮助开发者优化应用性能和功耗。1 跑出功耗数据第一步设置功耗分析模型这里是固定格式注这里的averaged可以根据需求换成time_based# set the power analysis mode set power_enable_analysis TRUE set power_analysis_mode averaged注averaged功耗和time_based功耗的区别是后者是基于时间的会有一个ptpx.fsdb现实每一时刻的功耗情况在报告里后者会有peak值。第二步读取网表和库文件设置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注link_library和link_path是相同的可以用link_path替换link_library第三步读取时序约束文件# 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注sdc文件应该包含如下设置set_max_transition 0.8 [current_design] set_max_fanout 50 [current_design] set_max_capacitance 0.2 [current_design]因为这些参数会影响功耗数据。对时序的约束相对于这些参数没有那么重要原因是波形文件中已经包含用于分析功耗的时间信息且sdf中也包含基于时序约束的时间信息。这一点是基于比较去掉sdc文件和加上sdc文件的功耗结果分析得出的希望有经验的大拿帮忙分析如有不对还请指正。第四步检查、更新、报告时序# 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上面给出的是用ptpx分析功耗的大致步骤在具体使用的过程中可能还会涉及到对operating_condition的设置某些drc的设置环境变量的设置等。注设置所有pins的slack in memory。当设置为truethe arrival times and slacks of all pins of the designe are kept in memory。如果设置为falsearrival times and slacks 只针对endpoints of the design.注使能对constant pins进行max capacitance检查default为false注使能自动选择wire load modelsdefault是true注设置保存未连接的netdefault是true。注当设置为true时工具在计算slack和minimum pulse width check时会移除clock reconvergence pessimism.注设置不进行recovery/rrmoval的timing checkdefault是false。注设置PrimeTime SI (之行crosstalk analysis使能default是false。2 check为正确的功耗数据跑出功耗数据是基础但不正确的功耗数据不具有任何意义因此在跑出功耗数据后在发布功耗数据前一定要检查跑出来的功耗数据是否正确若不正确则可能大至影响上层的决策小则损失个人在团队中的形象。检查功耗数据的正确与否可以从以下几个方面出发1波形是否正确使用的sdf文件是否和网表版本一致case是否正确波形的截取时间范围是否正确。2库文件是否正确完整功耗分析的corner和库文件的corner是否一致库文件是否有缺失。3网表文件和sdf文件是否正确网表文件和sdf文件版本要一致也要和波形文件一致。3log的检查其中的error和warning是否可以忽略网表和库文件是否link成功。如果以上几个方面都是正确的符合要求的则输出的功耗数据便具有分析的意义可以进行下一步的功耗分析。补充1在跑功耗的脚本里一定要加上这一句save_session 保存到的具体路径保存到的具体路径最好里面是空的只存session的内容该文件可以用于本次功耗分析退出后再次查看本次功耗的分析结果直接在pt_shell中使用restore_session 保存到的具体路径即可。如果没有保存session需要再次生成该次功耗分析的其他报告时需要重新跑功耗分析后才能输出这样很浪费时间甚至不可复现。补充2在跑time_based功耗后会产生一个ptpx.fsdb的文件用于查看实时功耗波形变化这个可以用verdi打开具体的打开命令是verdi -ssf ptpx.fsdb 一个Verdi可以打开多个波形包括rtl级或者门级的仿真波形可以查看对比功耗随工作的变化也可以帮助分析功耗。先写到这里后面有更新或修改再补充修改。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑