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 · pdVerse Mentor Guide
Explanation
A power domain groups design elements that share the same power-supply behavior. create_power_domain declares that group and its scope in the hierarchy. A power domain is strictly a synthesis construct, not a netlist object -- it's bookkeeping the tool uses, not a physical block by itself. Every domain must eventually be given exactly one primary power net and one primary ground net.
Implementation Walkthrough
In the Mychip worked example, the top-level domain is created first with -include_scope so it covers everything by default, then each functional block gets its own domain scoped to its instance: create_power_domain PD_MYCHIP -include_scope; create_power_domain PD_CPU -elements {U_CPU}; and similarly for PD_DSP and PD_COP. In the more general syntax you scope the domain explicitly: create_power_domain -elements {U1 U2 U3} -scope Block1 PD1.
Command
create_power_domain PD_CPU -elements {U_CPU}Switch-by-switch
-elements: list of design instances included in the domain (supports
{.} to mean 'current scope and everything in it'); -scope: hierarchy
instance at which the domain is defined -- note it does NOT change
the current scope for later commands; -include_scope: pulls in the
entire current scope, typically used for the top-level always-on
domain; -exclude_elements: removes named elements from the domain,
but an excluded instance must already lie within -elements or it is
ignored with a warning; -atomic: locks the domain so no descendant
instance can join a different domain unless explicitly excluded -this must be set at creation time, it cannot be added later via update.Expected Tool Behavior
A domain object is created with a defined scope and extent of elements; later commands (create_supply_net, set_domain_supply_net, set_isolation, set_level_shifter, set_retention, create_power_switch) all reference this domain name. Before commit_upf, every instance in the design must belong to some power domain.
Example
Mychip: PD_MYCHIP (1.0V always-on top), PD_CPU (0.9V always-on, U_CPU), PD_COP (1.1V shutdown domain, U_COP, contains retention registers), PD_DSP (1.1V or 0.9V, externally switched, U_DSP).
Common Mistake
Leaving some instance uncovered by any domain's -elements before commit_upf, or trying to convert a non-atomic domain into an atomic one later via -update -- -atomic cannot be combined with -update.
Likely Error Or Warning
Atomic-domain hierarchy conflicts during a hierarchical flow produce an explicit error: 'Unable to merge domain PD_TOP and mid_inst/PD_TOP because mid_inst/PD_TOP is atomic but PD_TOP is not atomic. (UPF-168)'
Debugging Approach
Run report_power_domain on the domain to confirm its actual Elements, Voltage Area, and Available Supply Nets/Sets match what you intended.
Continue learning free
Get a practical low-power chapter
Receive the existing “Low Power and Multivoltage Fundamentals” PDF chapter and its download link by email.
Continue practising