How do you read a `check_mv_design` report and triage what it finds?
From PDVerse Low-Power Physical Design Mentor Guide · pdVerse Mentor Guide
Short Answer
check_mv_design (ICC2) prints one section per rule group, from power domain and supply rules through strategy rules to cell rules, with each message followed by an MV-080 total for that message ID. Triage from the top: supply and domain problems cascade into everything below, so fix those first, then strategy conflicts, then individual cells. For any cell or path it flags, report_mv_path (ICC2) tells you why a cell was inserted, associated or rejected.
Technical Explanation
- Sections: power domain, supply net, supply port, isolation / level shifter / retention / power switch strategy, repeater, terminal boundary, then cell rules.
- Each message ends with an ID and an MV-080 total; MV-011 (supply net with no driver) is an error, MV-022 (unconnected supply port) a warning.
- Scope: the default run excludes PG net and PG connection checks; add
-pg_netlistor-all(ICC2). -max_message_countdefaults to 20 per message type, so set it to all before you trust a count.- Cell rule example: MV-071 means an isolation cell is not associated with any strategy;
report_mv_path -cell(ICC2) shows why. - MV-097 reports forward or reverse biasing violations, and only once you allow biasing with
set_power_domain_constraints(ICC2). - Level shifter strategies with
-ruleor-no_shift(UPF) that block insertion turn errors into warnings, so read warnings too.
# [ICC2] icc2_shell
check_mv_design -all -max_message_count all
check_mv_design -isolation -level_shifter -objects [get_pins U_COP/dout]
report_mv_path -cell U_COP/DATA_UPF_ISO
report_mv_path -level_shifter -net cop_doutWhat To Check
- The run includes PG checks (
-allor-pg_netlist) and uses an unlimited message count. - Supply and domain sections are clean before you spend time on strategy or cell messages.
- Every warning is either fixed or explained, not only the errors.
- Each remaining cell message has a
report_mv_path(ICC2) explanation.
Command Checks & Actions
check_mv_design -all -max_message_count allRuns every MV rule, including PG checks, with no message cap.
check_mv_design -isolation -level_shifter -objects [get_pins U_COP/dout]Rechecks isolation and level shifting only on paths through one pin.
report_mv_path -cell U_COP/DATA_UPF_ISOExplains a flagged MV cell: strategy, supplies, driver and loads.
report_mv_path -level_shifter -net cop_doutShows the level shifter path and the voltage shifting situation on one net.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): All sections read No errors or warnings in a
-all -max_message_count allrun. - Suspicious (illustrative): Only warnings remain, such as MV-022 on a spare supply port, each with a written reason.
- Hard stop: Any MV-011 supply net with no valid driver, or isolation cells flagged MV-071 on outputs of a switchable domain.
Common Mistake
The Trap: Fixing cell-level messages first because they are the longest part of the report.
- Many of them come from one supply or strategy error higher up, such as a supply net with no driver.
- You patch symptoms one by one, and the next run shows new ones until the root supply problem is fixed.
What The Interviewer Is Testing
- Can read the report structure and message totals.
- Triages from supplies down to cells.
- Knows the default scope and message cap of the command.
Follow-up Question & Model Response
"The report says zero violations, but simulation shows a floating clamp. How?"
Candidate Model Response: First check what you ran. A default check_mv_design (ICC2) skips PG net and PG connection checks, so an isolation cell whose backup pin sits on the switched rail passes. Rerun with -pg_netlist or -all (ICC2). Also check the message cap: with the default 20 per type, you may have read a truncated report.
Practical Example
Design Scenario: (illustrative, message text as documented) A run on MYCHIP after create_mv_cells (ICC2) shows UPF-049 (cannot derive PG type for supply net vddx), MV-011 (vddx has no valid driver), two MV-022 on U11/vdd089 and 14 MV-071 isolation-cell messages. The team fixes the UPF: vddx gets its supply port connection and PG type. On rerun, MV-011 and UPF-049 are gone. report_mv_path -cell (ICC2) on the MV-071 cells shows they were inserted under an isolation strategy that was later renamed, so the team reruns create_mv_cells (ICC2) and all 14 associate with iso_cop_out.
Low-Power & UPF Handbook
Master Low-Power VLSI & Multivoltage Design
Read the complete low-power guide library covering power domains, level shifters, isolation clamps, state retention, and UPF signoff verification.

Continue practising