How do you implement a multivoltage design hierarchically in ICC2?
From PDVerse Low-Power Physical Design Mentor Guide · pdVerse Mentor Guide
Short Answer
You split the flat design and its UPF into blocks, shape the blocks so their voltage areas fit, build top-level straps, and push a PG strategy down to each block. Each block then builds its own PG and secondary PG constraints and is implemented against its block UPF, while the top commits the block constraints and checks everything together. The order matters because each step uses data the previous one produced.
Technical Explanation
- Partition:
split_constraints(ICC2) writes block-level constraints and UPF, andcommit_block(ICC2) turns the partitions into physical blocks. - Shape:
shape_blocks(ICC2) creates block shapes and the voltage area shapes inside them. - Top PG: build top straps first, then
characterize_block_pg(ICC2) derives the PG strategy each block must follow. - Block PG:
compile_pg(ICC2) builds straps in each block, then you create and commit that block secondary PG constraints. - Top commit:
commit_secondary_pg_placement_constraints -commit_subblocks(ICC2) commits any uncommitted block constraints along with the top ones. - Consistency: block supply ports and top supplies must connect, or supplies become independent and the system PST grows.
- Block scope: keep block UPF supplies inside the block scope, so the block can be implemented alone without names that only exist at the top.
# [ICC2] icc2_shell
split_constraints
commit_block
shape_blocks
characterize_block_pg
compile_pg
commit_secondary_pg_placement_constraints -commit_subblocks
report_secondary_pg_placement_constraints -all_blocks
check_secondary_pg_placement_constraints -blocks {BLK_CPU BLK_DSP}
check_mv_designWhat To Check
- Each block UPF matches the slice of the top UPF it came from.
- Block voltage areas sit inside their block shapes with guard bands intact.
- Top and block straps line up at the block boundary.
- Block and top secondary PG constraints are all committed.
Command Checks & Actions
split_constraintsWrite block constraints and UPF from the top
shape_blocksCreate block and voltage area shapes
characterize_block_pgPush the top PG strategy to each block
compile_pgBuild the block power grid
report_secondary_pg_placement_constraints -all_blocksList constraints in every block
check_secondary_pg_placement_constraints -blocks {BLK_CPU BLK_DSP}Check chosen blocks for conflicts
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Every block reports committed constraints and
check_mv_designis clean at the top. - Suspicious (illustrative): Blocks are clean alone, but the top shows two supply net groups where one was expected.
- Hard stop: Block straps miss the top straps at the boundary, or a block has uncommitted secondary PG constraints at top commit.
Common Mistake
The Trap: Building block PG before the top straps and characterization exist.
- Block straps then miss the top straps at the boundary, and the fix means redoing PG in every affected block.
- Secondary PG constraints built on the old straps must also be re-derived and re-committed, so the schedule slips twice.
What The Interviewer Is Testing
- Can you order the hierarchical MV steps?
- Do you know what the top must re-check after blocks come back?
Follow-up Question & Model Response
"How does the top see a finished block during MV checks?"
Candidate Model Response: Through its block UPF and an abstract or ETM that carries the port supplies. The top needs each block port to have a known related supply, so crossings at the boundary can be checked. save_upf -full_chip -block (ICC2) can also write a full-chip UPF for specific blocks, which helps when a block team needs the surrounding intent. If a port supply is missing, the top treats the crossing as unknown and misses isolation or level shifters.
Practical Example
Design Scenario: (illustrative) MYCHIP is split into BLK_CPU (PD_CPU) and BLK_DSP (PD_DSP), with PD_COP and PD_MYCHIP at the top. After shape_blocks, the team builds M9 and M10 straps at the top, runs characterize_block_pg, then compile_pg in each block. BLK_CPU commits its VDD1p0 secondary constraints for the dual-rail level shifters on its inputs from PD_MYCHIP. At the top, commit with -commit_subblocks finds BLK_DSP still uncommitted, commits it, and check_mv_design comes back clean. Only then do the block teams start placement, knowing the straps and constraints at every boundary agree.
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