IntermediateQuestion 1 of 60

How do you create a power domain in UPF, and what does the create_power_domain command actually do?

From PDVerse Low-Power Physical Design Mentor Guide, part of the pdVerse Mentor Guide

Short Answer

create_power_domain (UPF) names a group of instances that share one primary supply and one set of isolation, level-shifter and retention strategies. It is bookkeeping for the tools, not a netlist cell: nothing gets inserted until strategies act on it. In MYCHIP you create the always-on top domain, then one child domain per block, and confirm the result with report_power_domains (ICC2).

Technical Reference DiagramHow do you create a power domain in UPF, and what does the create_power_domain command actually do?

Technical Explanation

  • Top domain: -elements {.} puts the current scope, and everything no other domain claims, into PD_MYCHIP. ICC2 also accepts the non-1801 -include_scope (ICC2).
  • Child domains: -elements {U_CPU} claims an instance and its descendants for PD_CPU. Names resolve relative to the current scope.
  • Primary supply: the IEEE 1801-2015 form is -supply {primary SS_CPU}, which binds the domain to a supply set created earlier in the file.
  • Legacy form (still accepted by ICC2/PT): set_domain_supply_net (UPF) with -primary_power_net and -primary_ground_net.
  • -atomic must be given when the domain is first defined; ICC2 will not turn an existing domain atomic later.
  • Before commit_upf (ICC2), every instance in the design must belong to some domain, or the intent is incomplete.
# [UPF]  mychip.upf
create_power_domain PD_MYCHIP -elements {.} -supply {primary SS_AON}
create_power_domain PD_CPU -elements {U_CPU} -supply {primary SS_CPU}
create_power_domain PD_DSP -elements {U_DSP} -supply {primary SS_DSP}
create_power_domain PD_COP -elements {U_COP} -supply {primary SS_COP}
# [ICC2]  icc2_shell
load_upf mychip.upf
commit_upf
report_power_domains

What To Check

  • U_CPU, U_DSP and U_COP each sit in exactly one child domain.
  • Top-level glue such as the power controller U_PC lands in PD_MYCHIP, so it stays on.
  • Each domain shows a primary supply set bound to real nets.
  • Element names were resolved in the scope you intended.

Command Checks & Actions

UPF (design.upf)create_power_domain PD_CPU -elements {U_CPU} -supply {primary SS_CPU}

Create a child domain and bind its primary supply set

ICC2 (icc2_shell)load_upf mychip.upf

Read the power intent into the block

ICC2 (icc2_shell)commit_upf

Resolve the intent; every instance must already belong to a domain

ICC2 (icc2_shell)report_power_domains

List each domain with its elements and supplies

PrimeTime (pt_shell)report_power_domain

Cross-check the same domains in PrimeTime after load_upf

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): report_power_domains lists four domains: PD_MYCHIP with the top scope, and PD_CPU, PD_DSP and PD_COP with one instance each and a bound primary.
  • Suspicious (illustrative): A child domain holds the right instance, but its primary is still an unbound handle.
  • Hard stop: load_upf errors on an element that does not exist in the current scope, or an instance belongs to no domain.

Common Mistake

The Trap: Creating PD_CPU as a normal domain, then trying to make it atomic later with create_power_domain PD_CPU -atomic -update (UPF) when a hierarchical flow needs it.

  • ICC2 rejects it, because -atomic is only accepted on the first definition, so the block UPF has to be fixed at the source.

What The Interviewer Is Testing

  • Do you know a domain is a logical grouping, not a cell or a floorplan region?
  • Can you write the 1801-2015 supply binding and still read the legacy form?
  • Do you verify with a report instead of trusting the UPF file?

Follow-up Question & Model Response

"What does report_power_domains tell you that reading the UPF does not?"

Candidate Model Response: It shows what the tool actually resolved, not what you meant to write. You see the real element list after scope resolution and the primary supply each domain ended up with. A typo in an instance path or a wrong scope shows up as an empty or unexpected element list. Reading the UPF only shows intent, and intent is where the bug lives.

Practical Example

Design Scenario: (illustrative) MYCHIP has four domains. PD_MYCHIP takes the top scope on VDD1p0 at 1.0 V, so U_PC stays on. PD_CPU holds U_CPU on VDD0p9 at 0.9 V and never switches. PD_DSP holds U_DSP on VDDdsp, and PD_COP holds U_COP on the switched rail VDD1p0_SW. After commit_upf, report_power_domains should list exactly those four, each child with one instance.

Low-Power & UPF Handbook

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

Offline PDF Bundle

Want all 1109 questions offline?

Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

See what's inside the bundle
Low-Power VLSI & UPF Handbook โ€” nine chaptersLow-Power & UPFDomains, isolation, retention, and multivoltage UPF.