IntermediateQuestion 37 of 60Source: Synopsys IC Compiler II Multivoltage User Guide: Allowing Insertion of Level Shifters on Clock Nets and Ideal Nets

How do you build a clock tree that crosses power domains?

From PDVerse Low-Power Physical Design Mentor Guide · pdVerse Mentor Guide

Short Answer

A clock that enters a domain at a different voltage needs a level shifter like any other signal, but ICC2 does not insert level shifters on clock nets by default. You name the clock nets in mv.upf.auto_ls_clock_nets (ICC2) and allow shifting on ideal nets with mv.upf.allow_ls_on_ideal_networks (ICC2). Then you keep the shifted branch balanced, watch duty cycle, and make sure clock buffers feeding always-on logic stay on when their domain powers down.

Technical Reference DiagramHow do you build a clock tree that crosses power domains?
Clock tree rooted at CLK_TOP in the solid-tint PD_CPU voltage area at 0.9 V, with one branch crossing into the hatched PD_COP voltage area at 1.0 V through a low-to-high level shifter at the boundary, AO clock buffers on a branch that feeds always-on retention control logic, and an ICG at the PD_COP branch root.

Technical Explanation

  • Clock level shifting: a low-to-high clock crossing needs a level shifter; ICC2 skips clock nets unless you list them in mv.upf.auto_ls_clock_nets (ICC2).
  • Set that option to specific clock nets, or to "*" for every clock net that needs shifting.
  • mv.upf.allow_ls_on_ideal_networks (ICC2) defaults to false; set it true so shifters go in while clocks are still ideal.
  • Delay and duty cycle: a level shifter adds insertion delay on one branch and can distort rise and fall, so balance and check duty cycle.
  • Always-on clock branches: clock buffers in a shutdown area that feed always-on logic must be dual-rail AO cells.
  • Gate the clock of a domain before it powers down, so no edge hits registers while their rail collapses.
  • A missing clock level shifter leaves a weak high level at the sink, causing duty-cycle errors or no clocking at all.
# [UPF]  design.upf
set_level_shifter ls_cop_in -domain PD_COP -applies_to inputs -rule low_to_high -location self
# [ICC2]  icc2_shell
set_app_options -name mv.upf.auto_ls_clock_nets -value {CLK_TOP}
set_app_options -name mv.upf.allow_ls_on_ideal_networks -value true
create_mv_cells -level_shifter
check_mv_design -level_shifter
report_mv_path -level_shifter -net CLK_TOP

What To Check

  • Every clock net that crosses a voltage boundary is listed in mv.upf.auto_ls_clock_nets (ICC2) or has an instantiated level shifter.
  • Level shifters on clock paths are sized for balanced rise and fall and included in the skew targets.
  • Clock buffers in shutdown areas that drive always-on sinks are dual-rail.
  • check_mv_design -level_shifter (ICC2) reports no voltage-shifting violations on clock nets.

Command Checks & Actions

ICC2 (icc2_shell)set_app_options -name mv.upf.auto_ls_clock_nets -value {CLK_TOP}

Lets the tool insert level shifters on the CLK_TOP clock net.

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

Allows level shifters on ideal nets; the default is false.

ICC2 (icc2_shell)create_mv_cells -level_shifter

Inserts level shifters from the UPF strategies, now including the clock net.

ICC2 (icc2_shell)check_mv_design -level_shifter

Checks level shifter strategies, cells and voltage shifting.

ICC2 (icc2_shell)report_mv_path -level_shifter -net CLK_TOP

Shows the level shifter path, driver and load supplies on the clock net.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): CLK_TOP has one level shifter at the PD_COP edge, skew across both domains is 25 ps against a 40 ps target, and duty cycle stays within 48 to 52%.
  • Suspicious (illustrative): Level shifter in place but it adds 90 ps on the PD_COP branch, leaving CTS little room to balance it.
  • Hard stop: check_mv_design (ICC2) reports a 0.9 V to 1.0 V shifting violation on CLK_TOP because the clock net was never listed.

Common Mistake

The Trap: Relying on the default flow and assuming level shifters were inserted on clock nets like on data nets.

  • They were not, so the 0.9 V clock drives 1.0 V registers directly.
  • The sinks see a weak high level; silicon may clock slowly, with a distorted duty cycle, or not at all at some corners.

What The Interviewer Is Testing

  • Knows the clock-net level shifter default and the app options that change it.
  • Considers duty cycle and insertion delay, not just connectivity.
  • Handles always-on clock branches through shutdown areas.

Follow-up Question & Model Response

"Why does a clock level shifter hurt duty cycle more than a data level shifter hurts timing?"

Candidate Model Response: A data path only cares about when the signal settles relative to one clock edge. A clock cares about both edges, and a level shifter often has different rise and fall delays. That difference moves one edge relative to the other, so the high phase grows or shrinks. For half-cycle paths or DDR interfaces, a few percent of duty-cycle error can eat the whole margin.

Practical Example

Design Scenario: (illustrative) CLK_TOP comes from a PLL in PD_CPU at 0.9 V (VDD0p9) and clocks 3,000 flops in PD_COP at 1.0 V on VDD1p0_SW. With mv.upf.auto_ls_clock_nets (ICC2) set to CLK_TOP, create_mv_cells -level_shifter (ICC2) inserts one low-to-high shifter at the PD_COP edge. CTS then balances the PD_COP branch, which carries 70 ps of extra shifter delay, against the PD_CPU branch, and skew ends at 25 ps. Six dual-rail AO clock buffers tap the shifter output to keep the PD_COP retention control clocked while PD_COP is off, so the shifter output must also sit on VDD1p0.

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. →