3. Voltus环境与数据准备
Voltus 的 IR/EM 分析结果是否可信,几乎在“读入数据”这一步就已经决定了大半。Voltus 本身并不产生设计数据,它只是把一套彼此一致的输入“拼装”成一个可求解的电源网络模型:工艺库提供电阻/电容/电流的物理含义,网表提供连接关系,寄生参数提供真实的 RC 网络,功耗文件提供每个实例的电流激励,电源意图文件提供供电网络的定义。任何一类数据缺失、版本错配或格式不符,都会在 log 中表现为 warning 甚至 error,最终反映为压降分布异常或收敛困难。
四类核心输入及其作用
可以把 Voltus 的输入理解为四个互相咬合的层次:
- 工艺库(Tech / QRC / Cell Liberty):定义金属层、通孔、单位方块电阻、层间电容、电流密度限值(EM limit),以及标准单元的时序与功耗信息。Voltus 依赖这些数据把几何尺寸换算成电阻和电容。
- 网表(Verilog / SPICE / DEF):描述实例、端口与网络的连接关系。Voltus 通常以 Verilog 网表配合 LEF/DEF 使用,DEF 提供物理位置与电源布线。
- 寄生参数(SPEF / DSPF):给出每根网络的 RC 网络,是 IR 计算精度的关键。SPEF 中的耦合电容是否被处理、单位是否一致,直接影响结果。
- 功耗文件(VCD / SAIF / TCF / Power Intent):提供每个实例的翻转活动或平均电流,是动态 IR 的激励来源。静态 IR 则常配合 UPF/CPF 中的电源域定义。
这四类数据必须来自同一工艺节点、同一设计版本、同一 corner。例如 7nm 工艺库配 16nm 的 SPEF,或 RTL 网表配综合后的功耗文件,都会导致模型自相矛盾。
导入流程与关键命令
Voltus 的典型导入顺序是:先建立设计库与工艺环境,再读网表与物理数据,然后读寄生与功耗,最后做一致性检查。以下是一段示意性的命令序列(参数为示例,实际以项目 corner 为准):
# 1. 设置工艺与库环境
set_db init_lib_search_path {./libs ./lef}
set_db init_hdl_search_path {./netlist}
read_libs slow.lib fast.lib
read_physical -lef {tech.lef stdcell.lef macro.lef}
# 2. 读入网表与物理数据
read_hdl -sv top.v
read_def top.def
# 3. 读入寄生参数(指定 corner 与单位)
read_spef -corner slow -units {1e-12 1e-9} top.spef
# 4. 读入功耗活动
read_activity -format vcd -scope top_tb/dut top.vcd
# 或 read_power_intent -upf top.upf
# 5. 一致性检查
check_design -type power
report_analysis_setup
其中 read_spef 的 -units 必须与 SPEF 文件头 *DESIGN 后的单位声明一致,否则 RC 会被整体缩放,压降结果可能差一个数量级。read_activity 的 -scope 必须指向 DUT 在 testbench 中的层次路径,否则活动率会全部落到顶层而无法映射到实例。
常见数据问题与排查
导入阶段最常见的问题可以归为四类,排查时建议按“先看 log、再查映射、后验数值”的顺序进行:
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
| 大量 instance 未映射 | 网表与 Liberty 单元名不一致,或 LEF 缺失 | 检查 report_unmapped,核对 cell 命名前缀 |
| SPEF 读入后 RC 为 0 | corner 名不匹配或单位错误 | 查看 SPEF 头 *CORNER 与 -corner 是否一致 |
| 活动率全为默认值 | VCD scope 路径错误或时间窗未覆盖 | 用 report_activity 查看覆盖率 |
| 电源网络开路/短路 | DEF 中 PG pin 未连接或 LEF 缺 PG 定义 | 运行 check_design -type power |
例如,当 log 中出现 Cannot find cell 'INVX1_H' in library 时,通常不是库真的缺这个单元,而是网表里用了综合后的名字,而 Liberty 里是 INVX1。此时应检查综合脚本是否做了 cell 重命名,或在 Voltus 中用 set_db hdl_cell_name_mapping 做映射。
report_analysis_setup,它会汇总库、网表、SPEF、活动文件的加载状态与覆盖率,是判断“数据是否齐备”的最快入口。数据一致性检查清单
为了减少反复试错,可以在导入后逐项确认:
- 工艺库、LEF、SPEF、功耗文件是否来自同一工艺节点与同一 corner。
- 网表顶层模块名与 DEF 的
DESIGN名是否一致。 - SPEF 中的 instance 名是否能在网表中找到对应层次。
- VCD/SAIF 的时间窗是否覆盖了关心的活动区间。
- 电源域定义(UPF/CPF)中的 supply net 是否与 DEF 中 PG 网络同名。
下面这张图把四类输入、导入顺序与典型问题排查路径放在一起,便于对照理解数据之间的依赖关系。
把这张图当作导入阶段的检查地图:四类输入各自独立,但只有在同一 corner、同一设计版本下汇聚,Voltus 才能构建出可信的电源网络模型。导入完成后,建议先看 report_analysis_setup 的覆盖率,再进入实际的 IR 分析,避免在错误的数据基础上反复调参。