How does ICC2 legalize always-on buffers that already exist in the RTL netlist?
From PDVerse Low-Power Physical Design Mentor Guide · pdVerse Mentor Guide
Short Answer
Buffers and inverters written in the RTL are hard terminals with a fixed supply, so on an always-on net inside a shutdown domain they create violations the tool cannot fix by adding cells around them. AO legalization lets ICC2 change their supply: it converts single-rail ones to dual-rail user library cells, or back, at the same time as level-shifter insertion. You enable it with mv.upf.ao_legalize_gtech_buf (ICC2) for GTECH cells, or run create_mv_cells -always_on (ICC2) to cover every buffer and inverter.
Technical Explanation
- The problem: an RTL buffer in PD_COP takes the switched rail, so an always-on control through it dies at shutdown, and the tool treats it as fixed.
- Option:
mv.upf.ao_legalize_gtech_buf(ICC2) is false by default; set it true beforecompile_fusion(FC) orcreate_mv_cells(ICC2). - In compile_fusion: legalization runs after isolation insertion, so it does not disturb source and sink isolation strategies, and alongside level-shifter insertion.
- Joint fix: the tool can add a level shifter, convert a buffer to dual-rail, or both, which solves voltage violations that were stuck before.
- User cells: it converts to dual-rail user library cells, not GTECH ones, so the secondary supply connection survives mapping.
- All buffers:
create_mv_cells -always_on(ICC2) also covers non-GTECH buffers and inserts nothing else; add-level_shifterto combine both jobs. - Priority: with
-always_on -level_shifter, ICC2 minimizes the number of level shifters before the number of dual-rail buffers.
# [ICC2] icc2_shell
set_app_options -as_user_default -name mv.upf.ao_legalize_gtech_buf -value true
create_mv_cells -always_on -level_shifter
check_mv_design
# [FC] fc_shell
set_app_options -as_user_default -name mv.upf.ao_legalize_gtech_buf -value true
compile_fusionWhat To Check
- MV-055 counts match the number of RTL buffers you expected to change.
- Converted dual-rail buffers have their backup pin on the always-on rail.
- No voltage or isolation violation remains on the always-on nets.
- The library has usable dual-rail buffers and inverters.
Command Checks & Actions
set_app_options -as_user_default -name mv.upf.ao_legalize_gtech_buf -value trueEnable AO legalization of GTECH buffers and inverters
create_mv_cells -always_on -level_shifterLegalize all buffers and insert level shifters together
check_mv_designConfirm no MV violations remain on the buffer trees
compile_fusionRun synthesis with AO legalization after isolation insertion
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): MV-055 reports 6 GTECH buffers converted from single-rail to dual-rail, and
check_mv_designis clean. - Suspicious (illustrative): MV-055 also reports conversions back to single-rail on nets you thought were always-on.
- Hard stop: No MV-055 message appears and
check_mv_designstill flags the same always-on nets, so legalization never ran.
Common Mistake
The Trap: Setting the option after create_mv_cells (ICC2) has already run.
- The option only acts when the command runs, so the RTL buffers stay single-rail on the switched rail and the violations stay.
- Worse, the team adds level shifters around the stuck buffers by hand, which costs area and still leaves the always-on net dying at shutdown.
What The Interviewer Is Testing
- Do you know why RTL buffers block MV fixing?
- Can you say what the option covers and what -always_on adds?
Follow-up Question & Model Response
"What if the library has no dual-rail buffers at all?"
Candidate Model Response: Then conversion is impossible, and the fallback is to move the buffer. fix_mv_design -buffer (ICC2) with -move_within_x / -move_within_y (ICC2) can move a single-rail buffer into a nearby voltage area where its needed supply is the primary. That needs feedthroughs allowed in the target VA and a legalize_placement (ICC2) afterwards. If neither works, change the RTL to route the net around the shutdown domain.
Practical Example
Design Scenario: (illustrative) In MYCHIP, the retention control from U_PC reaches PD_COP through 6 RTL buffers inside U_COP, all single-rail on VDD1p0_SW. After setting the option and running create_mv_cells -always_on -level_shifter (ICC2), MV-055 reports 6 GTECH buffers converted from single-rail to dual-rail and 1 converted back where the load was local to PD_COP. The dual-rail buffers need VDD1p0 secondary straps in VA_COP, which the team adds before placement.
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