功耗分析工具入门:主流EDA功耗分析工具的基本使用流程
做功耗收敛,手里没几把好用的工具可不行。今天咱们聊聊三款主流工具——PrimeTime PX、Redhawk、Voltus。这三兄弟各有各的脾气,我用它们做过不少项目,踩过坑也攒了些经验,分享给你。
一、工具定位:谁该干谁的活
先搞清楚一件事:这三款工具不是互相替代的关系,而是互补的。我刚开始做功耗时,以为一个工具就能搞定所有,后来发现根本不是那么回事。
| 工具 | 主要用途 | 分析阶段 | 我常用的场景 |
|---|---|---|---|
| PrimeTime PX | 门级功耗分析 | 综合后、布局后 | 签核前的功耗验证 |
| Redhawk | IR Drop + 功耗分析 | 布局布线后 | 电源完整性检查 |
| Voltus | IR Drop + EM分析 | 布局布线后 | 大芯片的电源网络验证 |
说白了,PrimeTime PX 是搞「功耗数值」的,Redhawk 和 Voltus 是搞「功耗分布」的。你想想看,一个告诉你芯片总共耗多少电,另一个告诉你哪里耗电多、哪里电压掉得厉害。两个都得看。
二、PrimeTime PX 的基本使用流程
PrimeTime PX 是我用得最顺手的工具。它的流程其实不复杂,核心就三步:读设计、设活动因子、跑分析。
2.1 读入设计与库
先准备好门级网表和时序库。我个人习惯把库文件路径写在一个 .synopsys_dc.setup 里,省得每次敲一堆命令。
# 读入门级网表
read_verilog ./outputs/chip_synth.v
current_design chip_top
link
# 读入库文件
read_db ./libs/tcbn28hpcplus_ffg0p88v125c.db
read_db ./libs/tcbn28hpcplus_ssg1p08v125c.db
嗯,这里要注意:库文件一定要跟你的时序分析用同一个corner,否则功耗数据会偏差很大。我曾经吃过这个亏,分析结果差了15%以上。
2.2 设置活动因子
活动因子是功耗分析的关键。说白了,就是告诉工具你的信号翻转有多频繁。这个数据通常来自仿真产生的SAIF文件或VCD文件。
# 读取SAIF文件
read_saif -input ./sim/chip_top.saif -instance testbench/u_chip_top -verbose
# 或者用VCD
read_vcd -input ./sim/chip_top.vcd -strip_path testbench/u_chip_top
如果没有仿真数据怎么办?我建议用默认的活动因子先跑一轮,看看大概功耗水平。默认值一般是0.1~0.2,但实际项目中,时钟树的活动因子可能高达0.5,而一些使能信号可能只有0.01。你想想看,用同一个值去估,误差能不大吗?
2.3 运行功耗分析
# 设置分析模式
set_power_analysis_mode -method static
# 运行功耗分析
report_power -analysis_effort high -output_file ./reports/power_report.rpt
# 查看详细功耗分布
report_power -hierarchy -levels 4 -output_file ./reports/power_hierarchy.rpt
跑完之后,我会重点关注几个指标:总功耗、动态功耗占比、漏电功耗占比。如果动态功耗占比超过70%,说明设计还有优化空间。如果漏电功耗占比过高,那就要考虑多阈值库的替换了。
三、Redhawk 的基本使用流程
Redhawk 是 Ansys 家的工具,主打电源完整性分析。它的流程跟 PrimeTime PX 不太一样,更关注物理层面的功耗分布。
3.1 准备输入文件
Redhawk 需要的东西比较多:LEF/DEF 文件、SPEF 寄生参数、时序库、以及功耗数据。我刚开始用的时候,光整理这些文件就花了大半天。
# 设置工艺文件
set_tech_lef ./tech/tech.lef
set_cell_lef ./libs/std_cells.lef
# 读入设计数据
read_def ./outputs/chip_route.def
read_spef ./outputs/chip_top.spef
# 读入功耗数据
read_power -format vcd ./sim/chip_top.vcd -instance testbench/u_chip_top
3.2 设置电源网络
这一步很关键。Redhawk 需要知道你的电源网络是怎么连的,包括VDD和VSS的分布。
# 定义电源域
create_power_domain -name VDD_CORE -voltage 0.88
create_power_domain -name VDD_IO -voltage 1.8
# 设置电源端口
set_power_ports -domain VDD_CORE -pins {VDD VSS}
set_power_ports -domain VDD_IO -pins {VDDIO VSSIO}
我记得有一次做项目,电源域设错了,结果IR Drop分析出来全是红的。后来发现是VDD和VDDIO混用了,改过来之后一切正常。所以,这一步千万别马虎。
3.3 运行IR Drop分析
# 设置分析模式
set_analysis_mode -type static -corner worst
# 运行IR Drop分析
run_ir_drop -output_dir ./results/ir_drop
# 查看结果
report_ir_drop -threshold 0.05 -output_file ./results/ir_drop.rpt
Redhawk 会生成一个热力图,红色区域表示电压降超过5%的地方。我一般会盯着这些红色区域看,如果面积太大,就得考虑加电源strap或者调整floorplan了。
四、Voltus 的基本使用流程
Voltus 是 Cadence 家的工具,跟 Redhawk 功能类似,但操作习惯不太一样。我个人觉得 Voltus 在EM分析上更顺手一些。
4.1 启动与设置
Voltus 可以跟 Innovus 无缝集成,这是它的一个优势。如果你用的是 Cadence 的流程,那 Voltus 会省很多事。
# 在Innovus中启动Voltus
voltus -design chip_top -mode static
# 设置工艺参数
set_tech_params -temperature 125 -voltage 0.88
# 读入设计
read_design -lef ./tech/tech.lef -def ./outputs/chip_route.def
4.2 设置功耗场景
Voltus 支持多场景分析。比如你可以同时分析「最高性能模式」和「待机模式」下的功耗分布。
# 创建功耗场景
create_scenario -name perf_mode -type functional
create_scenario -name standby_mode -type functional
# 设置活动因子
set_activity -scenario perf_mode -file ./sim/perf_mode.tcf
set_activity -scenario standby_mode -file ./sim/standby_mode.tcf
4.3 运行EM分析
EM(电迁移)分析是 Voltus 的强项。它能告诉你电源网络里的电流密度是否超标。
# 设置EM规则
set_em_rule -layer M1 -max_current_density 1.5e-3
set_em_rule -layer M2 -max_current_density 2.0e-3
# 运行EM分析
run_em -scenario perf_mode -output_dir ./results/em
# 查看EM违规
report_em_violations -output_file ./results/em_violations.rpt
嗯,这里要注意:EM分析的结果跟温度关系很大。我一般会用最差温度条件来跑,这样留的余量更足。
五、工具选择建议
说了这么多,到底该用哪个?我的建议是看你的项目阶段和需求:
- 综合后阶段: 用PrimeTime PX就够了。速度快,能快速评估功耗是否超标。
- 布局布线后: 用Redhawk或Voltus。这时候需要看IR Drop和EM,PrimeTime PX搞不定。
- 签核阶段: 三个工具都得跑。PrimeTime PX做功耗签核,Redhawk/Voltus做电源完整性签核。
你想想看,如果只跑PrimeTime PX,你永远不知道芯片内部哪里电压会掉。如果只跑Redhawk,你又不知道总功耗到底多少。三个工具配合使用,才能把功耗收敛做好。
好了,工具的基本使用流程就聊到这儿。下一节咱们会深入讲讲如何用这些工具定位功耗热点,那才是真正考验功力的时候。
可可精品资料库