RedHawk 动态 IR drop 的结论看四处:日志的 Worst Dynamic Voltage Drop 表、Dynamic/{design}.dvd、Dynamic/layer_drop.rpt 和 power_summary.rpt——先用日志确认角与窗口,再用 .dvd 的 min_pg_tw 算压降百分比,用 layer_drop 定位到层。
0. 阅读顺序(照这个次序走,不会得出假结论)
| 步 | 看什么 | 目的 |
|---|---|---|
| 1 | 日志头的 TECH_FILE / SPEF / VCD / TEMPERATURE | 确认这是哪个角,混合角的数字不可归因 |
| 2 | 日志的 Selection resolution / Time span selected / Sim Start-End | 确认分析窗口;跨 run 比较前必须钉死窗口 |
| 3 | 日志 “Worst Dynamic Voltage Drop” 表 | 拿到 4 个汇总数:WIRE(VDD)、WIRE(VSS)、avgTW、minTW |
| 4 | Dynamic/{design}.dvd |
逐实例的最坏电压,定位到具体 instance 与坐标 |
| 5 | Dynamic/layer_drop.rpt |
判断压降堆在哪一层(局部瓶颈 vs 全局网格) |
| 6 | power_summary.rpt |
核对功耗/频率域是否合理,窗口长度的推荐值 |
| 7 | Error/、Warn/、*.unconnect、noTiming |
确认这次运行本身有效 |
redhawk -b 的退出码恒为 0,不能用来判定成功;判有效性只看有没有 PWR-330 / ANL-013 / GEN-010,以及 adsRpt/Error/redhawk.err.<时间戳> 的内容。
1. 先钉角:数字离开角落配置就没有意义
一次动态 IR drop 结果由五件事共同决定,报告里必须能回答这五个:
| 维度 | 在报告/配置里的位置 | 常见取值 |
|---|---|---|
| 温度 | 日志 Temperature used for resistance extraction |
125 °C(签核常用) |
| 金属电阻角 | GSR TECH_FILE |
*_rcmax.tech / *_rcmin.tech / *_typ.tech |
| 信号网寄生角 | GSR CELL_RC_FILE |
{design}_max.spef / _min.spef |
| 波形 | GSR VCD_FILE |
min.vcd(最坏功耗)/ max.vcd |
| 窗口 | 日志 Sim Start Time / Sim End Time |
DYNAMIC_SIMULATION_TIME 是宽度,不是起止对 |
要点:
- PG 网的 R 是 RedHawk 从 tech file 自己抽的(SPEF 只覆盖信号网),所以 tech 角几乎线性决定压降。实测同一波形、同一窗口只把 rcmax 换 rcmin,最坏压降可差 6~7 倍——tech 是第一变量,比窗口/VCD 都大。
VCD_FILE { SELECT_RANGE -1 -1 SELECT_TYPE WORST_POWER_CYCLE }会让工具在整条波形上滑窗选最坏窗口;选中窗口写在日志里(Time span selected (A ~ B)),网格步长默认 = STA timing 里的最高频率的周期。- 用
START_TIME {ps}钉死窗口后再做对比,否则每个变体被分到不同窗口,差异 30~40% 全是窗口造成的。 setup package/wirebond/pad -r 0 -c 0 -l 0= 片外理想,没有 Ldi/dt,算出来的压降只是片上电阻性部分,是下限。
2. 结论行:Worst Dynamic Voltage Drop 表
日志里这段是给结论用的,逐行含义:
| Type | 含义 | 备注 |
|---|---|---|
WIRE (net=VDD) |
全设计最坏的片上 PG 金属压降 | 对应 .dvd 的 min_vdd_tw 最小值 |
WIRE (net=VSS) |
全设计最坏的地弹(ground bounce) | 对应 .dvd 的 max_vss_tw 最大值 |
avgTW |
窗口内总压降的平均值 | 判断是持续偏低还是瞬时尖峰 |
minTW / minWC |
全设计最差的总压降 = 1.8 V − 最小 min_pg_tw |
报“IR drop %”就用这个 |
两个必须自己做的校验:
- 自洽性:
WIRE(VDD) + WIRE(VSS) ≈ minTW。实测一例 171.30 + 164.50 = 335.80 mV,与 minTW 335.68 mV 对得上,说明最坏点就是这两侧压降叠加的同一个位置。 maxTW不要当最坏值:同一份报告里实测avgTW 297.02 mV、minTW 335.68 mV,而maxTW 107.03 mV——三者口径不同,maxTW明显偏小,报数时只用minTW/minWC。
压降百分比口径(报给项目/客户时写清口径,否则差一倍):
IR_drop% = (Videal − min_pg_tw) / Videal
= (1.800 − 1.4643) / 1.800 = 18.65%
- 只算 VDD 侧:
171.30 / 1800 = 9.52% - VDD + VSS(器件真正少掉的电压):
335.68 / 1800 = 18.65% eff_Vdd列不是最差值,它是窗内平均口径
常见的 sign-off 习惯是动态 IR drop ≤ 10%(数字核心,视工艺/电压/产品而定),所以 18.65% 必须结合 min_pg_tw 与标准单元的最低工作电压一起判断,不能只看百分比。同时要说明这是片外理想的下限值。
3. Dynamic/{design}.dvd:逐实例数据,定位到点
列顺序(第 1 行是注释):
# loc_x loc_y eff_Vdd max_pg_tw min_pg_tw min_pg_sim max_pg_sim min_vdd_tw max_vss_tw domain inst_name
xxx.xx yyyy.yy 1.5466 1.7991 1.4643 1.4643 1.7994 1.6289 0.1645 VDD C_{n}_IBUF
| 列 | 含义 | 用法 |
|---|---|---|
loc_x loc_y |
实例坐标(µm) | 和版图对应,看是否聚集在同一行/同一块 |
eff_Vdd |
窗内有效供电电压(平均口径) | 趋势参考,不能当最坏值 |
max_pg_tw |
窗内最大 PG 电压 | 一般接近理想值 |
min_pg_tw |
窗内最小 PG 电压(TW 口径) | 压降百分比就用它 |
min_pg_sim / max_pg_sim |
仿真原始极值 | 与 _tw 不同说明窗口加权起了作用 |
min_vdd_tw |
该实例 VDD 侧最低电压 | 与 1.8 差 = 该点电源线压降 |
max_vss_tw |
该实例 VSS 侧最高电压 = 地弹 | 与 0 差 = 地弹量 |
domain / inst_name |
电源域 / 实例名 | 按层次聚合找热点 |
实操(排序取最坏、看分布):
# 最坏的 10 个实例
grep -v '^#' {design}.dvd | awk '$5!="n/a"' | sort -k5,5g | head -10
# 分布:超过 10%/15%/20% 的实例数(比单个最大值更能说明是点问题还是面问题)
grep -v '^#' {design}.dvd | awk '$5!="n/a"{d=(1.8-$5)/1.8*100; if(d>10)a++; if(d>15)b++; if(d>20)c++} END{print a,b,c}'
经验判据:
- 最坏 Top-10 全部落在同一行坐标 / 同一类实例(例如一排 IBUF)⇒ 是局部供电瓶颈,改局部 strap/via 就够。
- 压降面状分布、top-10 分散 ⇒ 才是全局 PG 网格问题。
n/a行 = 该实例没有 timing window(未覆盖 STA),数量要单独记;本例 14125 有数据、689 为 n/a。- 同实例同坐标跨 run 对比是最可靠的“同点对比”抓手(尤其当版图被换过、坐标会漂移时,要按实例名 + 最近坐标配对)。
4. Dynamic/layer_drop.rpt:是局部瓶颈还是全局网格
格式:#Layer Min_drop Max_drop,分 #TOP / Net VDD / Net VSS 三段。实测一例的最大压降:
| Layer | VDD max | VSS max |
|---|---|---|
| M1 | 171.33 mV | 164.54 mV |
| T1 | 73.22 mV | 73.13 mV |
| M2 | 70.90 mV | 70.91 mV |
| T2 | 55.48 mV | 55.48 mV |
| M3 | 55.36 mV | 55.36 mV |
读法:
- 最大压降集中在 M1(最下层) ⇒ 该点靠器件很近的段/过孔不够,属局部;上面几层加起来才 ~70 mV,说明主干网格没问题。
- 逐层几乎均匀、上层也很大 ⇒ 全局网格/电源规划问题(strap 数量、宽度、pad 位置)。
- layer_drop 与
.dvd的min_vdd_tw、max_vss_tw可以互相校验:同一位置的数应当吻合。
5. power_summary.rpt:先证明“这次运行合理”
Recommended dynamic simulation time, {T} psec, to include {P}% of total power:跟随 STA 时钟(1/最高频率),与 VCD 无关。窗口远小于它时,功耗统计不完整。- 分频域/clock root/Vdd 域/单元类型的功耗拆分:用来核对 (a) 时钟网络占比是否离谱(本例 clock network 11.85 mW / 39.75 mW = 29.8%),(b) 是否有大块实例落在
NA*(未连电源或未归属 clock root),(c)#inst_count是否符合预期。 - 量级自检:
Iavg = P_total / V。本例 39.75 mW / 1.8 V ≈ 22 mA,与动态 IR drop 里看到的电压分布量级对得上,才说明功耗喂进去了。
6. 其他文件什么时候看
| 文件 | 内容 | 场景 |
|---|---|---|
worst_power_cycle.rpt |
按窗内平均功耗排名的前 500 个 cycle | 确认选窗是否合理、第 2 名和第 1 名差多少 |
worst_dpdt_cycle.rpt |
按 ΔP/cycle 排名 | SELECT_TYPE WORST_DPDT_CYCLE 时用 |
worst.block.cycle.rpt |
逐 cycle 平均功耗曲线 | 当“功耗波形”看,找活动突发 |
Dynamic/mcyc_effvdd.rpt、mcyc_rpt_time.rpt |
逐实例、逐周期的有效 Vdd 与发生时刻 | 看最坏电压发生在窗口内哪个时刻 |
Dynamic/{design}.ipwr/.ivdd/.ignd |
时间序列电流 | 峰值/平均值比(本例 peak/avg ≈ 1.5) |
Dynamic/decaps.rpt |
decap 统计 | 判断电压跌落是否有本地储能支撑 |
{design}.noTiming、vcd_missing_nets |
未覆盖 STA / VCD 未映射的网 | 覆盖率不足时,压降可能被低估 |
Error/ Warn/ |
错误与告警 | 例如库温度越界(SLB-121)、tech file 缺 Tnom(TEC-065,会让该层温度效应被忽略) |
7. 报数时必须一起给的三件事
- 口径:VDD 单侧还是 VDD+VSS;
minTW(最坏)还是avgTW(平均);_tw还是_sim。 - 角与窗口:温度 + tech + spef + VCD + 窗口(起止 ns)+ 时间步长。
- 片外是否理想:
r/c/l = 0就等于没有 Ldi/dt,结论要写成“片上电阻性下限”。
8. 常见坑(都是用真实数据换来的)
- 换了 DEF/SPEF/GSR 却没注意 mtime,直接和上周的数字比大小 ⇒ 差异其实来自版图。改版后的对比必须重跑同一套角,并且核对最坏点的实例坐标是否还成立。
- 用
eff_Vdd当最坏值 ⇒ 报小了;用avgTW当最坏值 ⇒ 也报小了。 - 只看
.dvd最大值,不看分布 ⇒ 分不清“一个点坏了”还是“整片不够”。 - 片外理想却按“含封装”的口径汇报 ⇒ 结论过于乐观;反之拿它当实测值也一样错。
- VCD 的频率与 STA 声明的频率不一致(行为模型生成的时钟很常见),此时不要靠改 SDC 去迁就 VCD:VCD 驱动下修改 SDC 频率对 IR drop 几乎无影响,正确做法是在报告里写明“波形来自哪个模式/速率”,并补最坏/全速场景。
9. 术语与缩写表
9.1 物理量与概念
| 术语 | 含义 | 说明 |
|---|---|---|
| IR drop | 电流流过电阻造成的电压降 ΔV = I·R |
电源网(VDD)上叫压降,地网(VSS)上升叫地弹 |
| static IR drop | 只算平均电流的电阻性压降 | 与开关活动无关,快,但偏乐观 |
| dynamic IR drop | 按时间变化的电流波形(VCD)仿真出的压降 | 含充放电瞬态,签核用这个 |
| ground bounce | 地网上的电压抬升(VSS 从 0 抬高) | 与 VDD 压降一起决定器件实际电压 |
| Ldi/dt | 封装/走线电感引起的动态过冲 | 片外设 r=c=l=0 时为 0,压降被低估 |
| droop | 供电电压跌落(泛指) | 报告里用 mV 或 % 表示 |
| PG mesh / strap | 电源地网格 / 电源条带 | 压降集中在 M1 时多半是 strap/via 局部不足 |
| decap | 去耦电容单元 | 抑制瞬时 droop |
| P/G pin | 单元/宏的电源地引脚 | 与网格连接不良会造成局部高阻 |
| sign-off | 签核:用最坏角出结论 | 需要角、窗口、片外模型三者都说清 |
9.2 报告字段与特定缩写
| 缩写 | 全称/含义 | 在本报告里怎么用 |
|---|---|---|
.dvd |
dynamic voltage drop 报告 | 逐实例最坏/平均电压,定位热点 |
TW |
timing window | *_tw 字段 = 按 timing window 加权后的值 |
min_pg_tw |
窗内最小 PG 电压 | 算 IR drop % 就用它 |
max_pg_tw |
窗内最大 PG 电压 | 一般接近理想电压,用来看波动范围 |
min_pg_sim / max_pg_sim |
仿真原始极值(未按窗口加权) | 与 _tw 差异说明窗口加权生效 |
min_vdd_tw |
该实例 VDD 侧最低电压 | 1.8 − 该值 = 电源线压降 |
max_vss_tw |
该实例 VSS 侧最高电压 | 该值 − 0 = 地弹 |
eff_Vdd |
有效供电电压(窗内平均口径) | 只能看趋势,不是最坏值 |
WIRE |
只看片上 PG 金属的压降(不含器件/封装) | 与 VSS 侧相加 ≈ 总压降 |
avgTW |
窗口内总压降平均值 | 与 minTW 的差看“偶发尖峰 vs 持续偏低” |
minTW / minWC |
全设计最差总压降(worst case 口径) | 业界“IR drop X%”通常指这个 |
maxTW |
另一种口径的极值,数值可能小于 avgTW | 不要拿它当最坏值 |
#TOP |
layer_drop 里 VDD/VSS 合并后的口径 | 与 Net VDD / Net VSS 两段对照 |
n/a |
该实例无 timing window | 统计覆盖率时必须单独计数 |
NA* |
未归属任何 clock root 的实例汇总行 | 出现在 power_summary 的 clock root 表里 |
| VCD / FSDB / VPD | 值变化转储波形 / Verdi 波形格式 / 另一家波形格式 | 动态分析的激励来源 |
| cycle selection | 在长波形里自动挑最坏窗口 | 由 SELECT_TYPE 决定排序口径 |
WORST_POWER_CYCLE |
按窗内平均功耗选窗(默认) | 与 worst_power_cycle.rpt 对应 |
WORST_DPDT_CYCLE |
按 ΔP/cycle 选窗 |
与 worst_dpdt_cycle.rpt 对应 |
| grid size / Selection resolution | 滑窗步长,默认 = 1/最高时钟频率 | 换 SDC 会连带换网格与选中窗口 |
| presim | 正式窗口前的预仿真 | 让网格/器件进入稳态 |
| time step | 动态仿真步长(如 20 ps) | 越小越准越慢 |
| window | 分析窗口 = START_TIME + DYNAMIC_SIMULATION_TIME |
对比实验必须钉死 |
DYNAMIC_SIMULATION_TIME |
窗口宽度(单值) | 写两个值会被当“第二个是宽度”,易报错 |
| GSR | RedHawk 的设置/命令脚本文件(.gsr) |
角、波形、窗口都在里面 |
| DEF / LEF / SPEF / DSPF | 版图交换格式 / 库抽象 / 寄生参数 / 另一种寄生格式 | DEF 换了版图就变了,别跨版本比数字 |
| tech file | 工艺文件(层、方阻、via、温度系数) | RedHawk 用它抽 PG 网 R,头号变量 |
| corner | 角(rcmax / rcmin / typ) |
必须与 spef、VCD 同角 |
| APL | 单元电流/功耗模型库(apl.current、apl.cdev、apl.pwcap) |
决定单元级电流波形精度 |
| STA / timing file / SDC | 静态时序分析 / 时序库 / 约束文件 | 提供频率与 timing window |
| EM | 电迁移 | 与 IR drop 同源(电流密度),常一起做 |
| IBUF | 输入缓冲单元 | 本例热点集中在一排 IBUF 上 |
| FILLER / decap | 填充单元 / 去耦电容单元 | 常在 IGNORE_CELLS 里被忽略功耗 |
Sources
- RedHawk 19.0.3 User Manual(Ansys/Apache),动态电压降章节与
.dvd报告格式说明 - 实测数据:一次 1.8 V、1P3M 数字核设计(约 1.9 万实例)的 RedHawk 19.0.3 动态 IR drop 运行,125 °C、rcmax tech、max SPEF、min VCD、30 ns 窗口、20 ps 步长
- 敏感度结论来自同角单变量对比实验(tech 角 / spef 角 / VCD / 窗口 / SDC 频率)