vlsiNote EN 中文
Author verified by published 2026-10-19 04:48 UTC updated 2026-10-19 04:48 UTC 7 views

How to read a RedHawk dynamic IR drop report: files, metrics and glossary

Other languages 中文 (original)English
A dynamic IR drop run is answered by four files: the log’s Worst Dynamic Voltage Drop table, Dynamic/{design}.dvd, layer_drop.rpt and…

A dynamic IR drop run is answered by four files: the log’s Worst Dynamic Voltage Drop table, Dynamic/{design}.dvd, layer_drop.rpt and power_summary.rpt — corner and window first.

0. Reading order (follow it, or you will draw false conclusions)

Step What to look at Why
1 TECH_FILE / SPEF / VCD / TEMPERATURE in the log header To establish the corner; numbers from a mixed corner cannot be attributed
2 Selection resolution / Time span selected / Sim Start-End in the log To establish the analysis window; pin it before comparing runs
3 The Worst Dynamic Voltage Drop table in the log Four summary numbers: WIRE(VDD), WIRE(VSS), avgTW, minTW
4 Dynamic/{design}.dvd Worst voltage per instance — locates the individual instance and coordinate
5 Dynamic/layer_drop.rpt Which layer the drop piles up on (local bottleneck vs global mesh)
6 power_summary.rpt Sanity of power / frequency domains, recommended window length
7 Error/, Warn/, *.unconnect, noTiming Whether the run itself is valid

redhawk -b always exits with status 0, so the exit code proves nothing. Validity is judged only by the absence of PWR-330 / ANL-013 / GEN-010 and by what adsRpt/Error/redhawk.err.<timestamp> says.

1. Pin the corner first: a number without its corner is meaningless

A dynamic IR drop result is decided by five things, and a report must be able to answer all five:

Dimension Where it lives Typical value
Temperature Log line Temperature used for resistance extraction 125 °C (common for sign-off)
Metal resistance corner GSR TECH_FILE *_rcmax.tech / *_rcmin.tech / *_typ.tech
Signal-net parasitics corner GSR CELL_RC_FILE {design}_max.spef / _min.spef
Waveform GSR VCD_FILE min.vcd (worst power) / max.vcd
Window Log Sim Start Time / Sim End Time DYNAMIC_SIMULATION_TIME is the width, not a start/end pair

Key points:

  • RedHawk extracts the PG network’s R from the tech file itself (SPEF only covers signal nets), so the tech corner decides the drop almost linearly. Measured: same waveform, same window, only rcmax swapped for rcmin — worst drop differed by 6-7x. Tech is the number-one variable, bigger than window or VCD choice.
  • VCD_FILE { SELECT_RANGE -1 -1 SELECT_TYPE WORST_POWER_CYCLE } makes the tool slide a window over the whole waveform and take the worst one; the selected window is written to the log (Time span selected (A ~ B)), and the grid step defaults to the period of the highest frequency in the STA timing file.
  • Pin the window with START_TIME {ps} before comparing variants, otherwise each variant is assigned a different window and 30-40% of the difference is simply the window.
  • setup package/wirebond/pad -r 0 -c 0 -l 0 = ideal off-chip, i.e. no Ldi/dt, so the drop you get is only the on-die resistive part and is a lower bound.

2. The verdict line: the Worst Dynamic Voltage Drop table

This block in the log is what you quote. Line by line:

Type Meaning Note
WIRE (net=VDD) Worst on-die PG metal drop in the design Matches the minimum min_vdd_tw in .dvd
WIRE (net=VSS) Worst ground bounce in the design Matches the maximum max_vss_tw in .dvd
avgTW Average total drop over the window Distinguishes a persistent low from a transient spike
minTW / minWC Worst total drop in the design = 1.8 V − smallest min_pg_tw This is the “IR drop %” you report

Two checks you must do yourself:

  1. Self-consistency: WIRE(VDD) + WIRE(VSS) ≈ minTW. Measured once: 171.30 + 164.50 = 335.80 mV against minTW 335.68 mV — the worst point is the same location where both sides add up.
  2. Do not treat maxTW as the worst value: in the same report avgTW 297.02 mV and minTW 335.68 mV, while maxTW 107.03 mV — different definitions, and maxTW is clearly smaller. Quote only minTW/minWC.

Definition of the drop percentage (state it when reporting to a project or a customer, otherwise the number differs by a factor of two):

IR_drop% = (Videal − min_pg_tw) / Videal
         = (1.800 − 1.4643) / 1.800 = 18.65%
  • VDD side only: 171.30 / 1800 = 9.52%
  • VDD + VSS (the voltage the device actually loses): 335.68 / 1800 = 18.65%
  • The eff_Vdd column is not the worst value; it is a window-average definition

A common sign-off habit is dynamic IR drop ≤ 10% (digital core, depending on process / voltage / product), so 18.65% has to be judged together with min_pg_tw and the standard cells’ minimum operating voltage, not as a percentage alone. Also state that this is the lower bound of an off-chip-ideal run.

3. Dynamic/{design}.dvd: per-instance data, down to the point

Column order (line 1 is a comment):

# 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
Column Meaning Use
loc_x loc_y Instance coordinate (µm) Map to layout; check whether hotspots sit on one row / one block
eff_Vdd Effective supply voltage (window-average definition) Trend only, never as the worst value
max_pg_tw Maximum PG voltage in the window Usually close to the ideal value
min_pg_tw Minimum PG voltage in the window (TW definition) The drop percentage comes from this
min_pg_sim / max_pg_sim Raw simulation extremes Differing from _tw means window weighting is active
min_vdd_tw Lowest VDD-side voltage of the instance 1.8 − value = supply wire drop at that point
max_vss_tw Highest VSS-side voltage = ground bounce value − 0 = bounce
domain / inst_name Power domain / instance name Aggregate by hierarchy to find hotspots

Practical commands (rank the worst, look at the distribution):

# the 10 worst instances
grep -v '^#' {design}.dvd | awk '$5!="n/a"' | sort -k5,5g | head -10

# distribution: how many instances exceed 10%/15%/20%
# (says more about "one point" vs "the whole block" than a single maximum)
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}'

Rules of thumb:

  • Worst top-10 all on the same coordinate row / the same instance type (e.g. a row of IBUF) ⇒ local supply bottleneck; local strap/via work is enough.
  • Areal distribution, top-10 scattered ⇒ a genuine global PG mesh problem.
  • n/a rows = the instance has no timing window (not covered by STA); count them separately; in this example 14125 had data and 689 were n/a.
  • Same instance, same coordinate across runs is the most reliable “same-point” comparison (especially after a layout swap, when coordinates drift: pair by instance name plus nearest coordinate).

4. Dynamic/layer_drop.rpt: local bottleneck or global mesh

Format: #Layer Min_drop Max_drop, in three blocks: #TOP / Net VDD / Net VSS. One measured example (maximum drop per layer):

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

How to read it:

  • Worst drop concentrated on M1 (bottom layer) ⇒ segments/vias too close to the devices are insufficient; local. The layers above add only ~70 mV, so the backbone mesh is fine.
  • Near-uniform per layer with large values on the upper layers ⇒ global mesh / power-planning problem (number and width of straps, pad placement).
  • layer_drop and the .dvd columns min_vdd_tw / max_vss_tw cross-check each other: at the same location the numbers should agree.

5. power_summary.rpt: first prove the run itself is sane

  • Recommended dynamic simulation time, {T} psec, to include {P}% of total power: follows the STA clock (1/highest frequency), independent of the VCD. If the window is much shorter, power statistics are incomplete.
  • Power split by frequency domain / clock root / Vdd domain / cell type: use it to check (a) whether the clock-network share is implausible (in this example clock network 11.85 mW / 39.75 mW = 29.8%), (b) whether a large block of instances lands in NA* (not connected to power, or not assigned to a clock root), (c) whether #inst_count matches expectations.
  • Order-of-magnitude self-check: Iavg = P_total / V. In this example 39.75 mW / 1.8 V ≈ 22 mA, consistent with the voltage distribution seen in the dynamic run — that is how you know the power really got in.

6. When to look at the other files

File Content When
worst_power_cycle.rpt Top 500 cycles ranked by average power in the window Whether the selected window makes sense; how far #2 is from #1
worst_dpdt_cycle.rpt Ranked by ΔP/cycle Used with SELECT_TYPE WORST_DPDT_CYCLE
worst.block.cycle.rpt Average power per cycle Treat it as a power waveform; find activity bursts
Dynamic/mcyc_effvdd.rpt, mcyc_rpt_time.rpt Effective Vdd per instance per cycle, with time stamps When within the window the worst voltage occurs
Dynamic/{design}.ipwr/.ivdd/.ignd Current time series Peak/average ratio (≈1.5 in this example)
Dynamic/decaps.rpt Decap statistics Whether local charge storage supports the droop
{design}.noTiming, vcd_missing_nets Nets without STA coverage / not mapped from the VCD Insufficient coverage means the drop may be underestimated
Error/, Warn/ Errors and warnings e.g. library temperature out of range (SLB-121), tech file missing Tnom (TEC-065, which makes the temperature effect on that layer ignored)

7. Three things that must ship with any number

  1. Definition: VDD side only, or VDD+VSS; minTW (worst) or avgTW (average); _tw or _sim.
  2. Corner and window: temperature + tech + spef + VCD + window (start-end in ns) + time step.
  3. Whether off-chip is ideal: r/c/l = 0 means no Ldi/dt, so the conclusion must read “on-die resistive lower bound”.

8. Common traps (each one paid for with real data)

  • DEF/SPEF/GSR was swapped but the mtime was missed, and the number is compared with last week’s ⇒ the difference actually comes from the layout. A post-ECO comparison must re-run the same corner set and check whether the worst-point instance coordinate still holds.
  • Using eff_Vdd as the worst value ⇒ reported too low; using avgTW as the worst value ⇒ also too low.
  • Looking only at the .dvd maximum and not at the distribution ⇒ cannot tell “one point is bad” from “the whole block is short”.
  • Reporting an off-chip-ideal run with an “including package” definition ⇒ too optimistic; using it as a measured value is equally wrong.
  • The frequency in the VCD disagrees with what the STA deck declares (common with behaviour-model clocks): do not bend the SDC to match the VCD — under VCD-driven analysis, changing the SDC frequency has almost no effect on IR drop. State which mode/rate the waveform came from, and add a worst/full-speed scenario.

9. Glossary

9.1 Physics and concepts

Term Meaning Note
IR drop Voltage lost to resistance, ΔV = I·R On the supply net (VDD) it is a drop; on the ground net (VSS) it is ground bounce
static IR drop Resistive drop from average current only Independent of switching activity, fast, optimistic
dynamic IR drop Drop simulated from a time-varying current waveform (VCD) Includes charge/discharge transients; this is what sign-off uses
ground bounce Voltage rise on the ground net (VSS lifted above 0) Together with the VDD drop it decides the voltage the device actually sees
Ldi/dt Dynamic overshoot caused by package/trace inductance Zero when off-chip is set to r=c=l=0, and the drop is then underestimated
droop Generic term for supply collapse Reported in mV or %
PG mesh / strap Power/ground mesh / power strap A drop concentrated on M1 usually means local strap/via shortage
decap Decoupling capacitor cell Damps transient droop
P/G pin Power/ground pin of a cell or macro Poor connection to the mesh gives local high resistance
sign-off Concluding from the worst corner Requires corner, window and off-chip model all stated

9.2 Report fields and jargon

Term Meaning How it is used in this report
.dvd dynamic voltage drop report Worst/average voltage per instance; locates hotspots
TW timing window *_tw fields = values weighted over timing windows
min_pg_tw Minimum PG voltage in the window The drop percentage comes from this
max_pg_tw Maximum PG voltage in the window Usually near the ideal value; shows the swing
min_pg_sim / max_pg_sim Raw simulation extremes (not window-weighted) Differing from _tw shows window weighting is active
min_vdd_tw Lowest VDD-side voltage of the instance 1.8 − value = supply wire drop
max_vss_tw Highest VSS-side voltage of the instance value − 0 = ground bounce
eff_Vdd Effective supply voltage (window-average definition) Trend only, not the worst value
WIRE Drop considering on-die PG metal only (no device/package) Added to the VSS side ≈ total drop
avgTW Average total drop over the window Difference from minTW separates “occasional spike” from “persistently low”
minTW / minWC Worst total drop in the design (worst-case definition) What the industry usually means by “IR drop X%”
maxTW An extreme under a different definition; may be smaller than avgTW Do not use it as the worst value
#TOP In layer_drop, the VDD/VSS combined view Read it against the Net VDD / Net VSS blocks
n/a The instance has no timing window Must be counted separately for coverage
NA* Summary row of instances not assigned to any clock root Appears in the clock-root table of power_summary
VCD / FSDB / VPD Value-change dump / Verdi waveform format / another vendor’s waveform format The stimulus for dynamic analysis
cycle selection Automatically picking the worst window in a long waveform The ranking criterion is set by SELECT_TYPE
WORST_POWER_CYCLE Select the window by average power (default) Corresponds to worst_power_cycle.rpt
WORST_DPDT_CYCLE Select the window by ΔP/cycle Corresponds to worst_dpdt_cycle.rpt
grid size / Selection resolution Sliding-window step, default = 1/highest clock frequency Changing the SDC changes both the grid and the selected window
presim Pre-simulation before the analysis window Lets the mesh and devices reach steady state
time step Dynamic simulation step (e.g. 20 ps) Smaller is more accurate and slower
window Analysis window = START_TIME + DYNAMIC_SIMULATION_TIME Must be pinned for comparison experiments
DYNAMIC_SIMULATION_TIME Window width (single value) Writing two values makes the second one the width — easy to trip over
GSR RedHawk settings/command script (.gsr) Corner, waveform and window all live there
DEF / LEF / SPEF / DSPF Layout exchange format / library abstraction / parasitics / another parasitic format A new DEF means a new layout — do not compare across versions
tech file Process file (layers, sheet resistance, vias, temperature coefficients) RedHawk extracts the PG network R from it; the number-one variable
corner Process corner (rcmax / rcmin / typ) Must match spef and VCD
APL Cell current/power model library (apl.current, apl.cdev, apl.pwcap) Determines cell-level current waveform accuracy
STA / timing file / SDC Static timing analysis / timing library / constraints Supply frequency and timing windows
EM Electromigration Same root as IR drop (current density); usually done together
IBUF Input buffer cell In this example the hotspots sit on one row of IBUFs
FILLER / decap Fill cell / decoupling capacitor cell Often listed in IGNORE_CELLS so their power is ignored

Sources

  • RedHawk 19.0.3 User Manual (Ansys/Apache), dynamic voltage drop chapter and .dvd report format
  • Measured: one RedHawk 19.0.3 dynamic IR drop run on a 1.8 V, 1P3M digital core design (about 19k instances), 125 °C, rcmax tech, max SPEF, min VCD, 30 ns window, 20 ps step
  • Sensitivity conclusions come from single-variable comparison experiments at the same corner (tech corner / spef corner / VCD / window / SDC frequency)
IR-dropRedHawkpower-integritysignoffEDAnotestranslation

Credibility

How far would you trust this note? 0-10.

How this note earned its label

Author verified bill2026 2026-10-19 04:48 UTC

Comments (0)

No comments yet.
Markdown source RSS Share card: light · dark The author checked this note line by line.