ExpertQuestion 33 of 50Source: Synopsys IC Compiler II Multivoltage User Guide: Always-On Legalization of Preinstantiated RTL Buffers and Inverters, Moving Single-Rail Buffers to Nearby Voltage Areas

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 Reference DiagramHow does ICC2 legalize always-on buffers that already exist in the RTL netlist?
Flow from a pre-instantiated RTL buffer on an always-on net: check its supply against driver and loads, then either convert single-rail to dual-rail (backup pin on the always-on rail), convert dual-rail back to single-rail, or insert a level shifter, ending with the MV-055 message count; steps tagged create_mv_cells -always_on (ICC2) and compile_fusion (FC).

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 before compile_fusion (FC) or create_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_shifter to 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_fusion

What 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

ICC2 (icc2_shell)set_app_options -as_user_default -name mv.upf.ao_legalize_gtech_buf -value true

Enable AO legalization of GTECH buffers and inverters

ICC2 (icc2_shell)create_mv_cells -always_on -level_shifter

Legalize all buffers and insert level shifters together

ICC2 (icc2_shell)check_mv_design

Confirm no MV violations remain on the buffer trees

Fusion Compiler (fc_shell)compile_fusion

Run 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_design is 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_design still 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

Read the complete low-power guide library covering power domains, level shifters, isolation clamps, state retention, and UPF signoff verification.

Low-Power VLSI & UPF Handbook — nine chaptersLow-Power & UPFDomains, isolation, retention, and multivoltage UPF. →