Why Learn Supply Networks? While power domains define logical groupings of design elements, supply networks specify the actual power and ground connections that deliver energy to those domains. Understanding supply networks is crucial for multi-voltage design, power gating, and ensuring your UPF specification accurately reflects the physical power delivery structure. In this tutorial, you'll master creating and connecting supply nets and ports in UPF.

13 min read | Intermediate Level

What You'll Learn

  • Understand the difference between supply nets and supply ports
  • Create supply networks using create_supply_net and create_supply_port
  • Define primary supply nets for standard power and ground
  • Connect supply networks across hierarchical boundaries

Understanding Supply Networks

A supply network in UPF represents the power delivery infrastructure of your design. It consists of:

  • Supply Nets: Internal power/ground nets within a power domain (e.g., VDD, VSS, VDD_CPU)
  • Supply Ports: Connection points where supply nets cross hierarchical boundaries
  • Supply Connections: Relationships between ports and nets across hierarchy

Think of supply networks as the "wiring diagram" for power delivery, separate from the functional signal connectivity.

Supply networks in UPF are declarative—they describe what power connections exist, not how to create them physically. Physical implementation tools use this information to build actual power grids during place and route.

Supply Nets vs Supply Ports

AspectSupply NetSupply Port
DefinitionInternal power/ground distributionHierarchical connection point
ScopeWithin a power domainCrosses hierarchical boundaries
AnalogyWires inside a modulePins on a module
ExampleVDD_TOP, VSS, VDD_CPUVDD (port on cpu_inst)

Physical Power Delivery

In a multi-voltage SoC, different power domains receive power at different voltages through separate power rails. The always-on logic might run at 1.2V (VDD_TOP), CPU cores at 1.0V (VDD_CPU), and I/O at 1.8V (VDDIO). UPF supply networks model these distinct power rails, guiding physical design tools to create separate power grids for each domain.

Syntax: create_supply_net

The create_supply_net command defines a supply net within a power domain.

Basic Form


create_supply_net net_name -domain domain_name [options]

Parameters

  • net_name - Name of the supply net (required)
  • -domain domain_name - Power domain containing this net (required)
  • -resolve {parallel|final} - Resolution strategy for hierarchical connections
  • -reuse - Allow reuse of existing net name

Usage Variations

1. Basic Supply Net:


create_supply_net VDD -domain PD_TOP
create_supply_net VSS -domain PD_TOP

2. Domain-Specific Supply:


create_supply_net VDD_CPU -domain PD_CPU
create_supply_net VSS_CPU -domain PD_CPU

3. Supply with Resolution Strategy:


create_supply_net VDD -domain PD_TOP -resolve final

Creating Primary Supply Nets

Primary supply nets are the main power (VDD) and ground (VSS) supplies for the chip. They are typically defined in the primary power domain.


# Create primary power domain
create_power_domain PD_TOP -include_scope

# Define primary supply nets
create_supply_net VDD -domain PD_TOP   # Primary power (e.g., 1.2V)
create_supply_net VSS -domain PD_TOP   # Primary ground (0V)

Naming Conventions

Common naming patterns for supply nets:

  • VDD / VSS: Primary power and ground
  • VDD_domain / VSS_domain: Domain-specific supplies (VDD_CPU, VSS_CPU)
  • VDDIO: I/O supply voltage
  • VDD_RET: Retention supply (stays on during power-down)
  • VDD_SW: Switched supply (output of power switch)
  • VDDN / VDDP: N-well and P-well supplies (advanced designs)

Use descriptive supply net names that indicate voltage level or purpose: VDD_1V0, VDD_CPU_SW, VDD_AON (always-on). This improves UPF readability and reduces errors.

Multi-Domain Supply Networks

Multi-voltage designs require separate supply nets for each voltage domain.

Example: Three-Voltage Design


# ===================================================================
# Multi-Voltage Supply Network Example
# ===================================================================

# Primary domain: 1.2V
create_power_domain PD_TOP -include_scope
create_supply_net VDD_TOP -domain PD_TOP      # 1.2V
create_supply_net VSS -domain PD_TOP          # 0V (ground)

# CPU domain: 1.0V
create_power_domain PD_CPU -elements {cpu_inst}
create_supply_net VDD_CPU -domain PD_CPU      # 1.0V
create_supply_net VSS -domain PD_CPU          # 0V (shared ground)

# I/O domain: 1.8V
create_power_domain PD_IO -elements {io_subsystem}
create_supply_net VDDIO -domain PD_IO         # 1.8V
create_supply_net VSS -domain PD_IO           # 0V (shared ground)

# ===================================================================
# Result: Three separate VDD nets at different voltages
#   - VDD_TOP:  1.2V for top-level logic
#   - VDD_CPU:  1.0V for CPU (lower voltage = lower power)
#   - VDDIO:    1.8V for I/O (higher voltage for I/O standards)
#   - VSS:      Common ground across all domains
# ===================================================================

Ground (VSS) is typically shared across all domains. While you can create separate VSS nets per domain, physical implementation usually connects them to a common ground plane.

Quick Check

Q: Why create separate VDD nets for different power domains?

Show Answer

Separate VDD nets enable multi-voltage operation where different domains run at different voltages (e.g., 1.2V for top, 1.0V for CPU). They also enable power gating—a domain's VDD net can be disconnected via power switches while other domains remain powered. Physical design tools use these distinct nets to create separate power grids for each domain.

Syntax: create_supply_port

The create_supply_port command defines connection points for supply networks across hierarchical boundaries.

Basic Form


create_supply_port port_name -domain domain_name [options]

Parameters

  • port_name - Name of the supply port (required)
  • -domain domain_name - Power domain containing this port (required)
  • -direction {in|out|inout} - Port direction for hierarchical connection

Usage Variations

1. Input Supply Port (receives power from parent):


create_supply_port VDD_in -domain PD_CPU -direction in

2. Output Supply Port (provides power to children):


create_supply_port VDD_out -domain PD_TOP -direction out

When to Use Supply Ports

Supply ports are needed when:

  • Hierarchical Designs: Sub-modules receive power through ports from parent
  • IP Integration: Reusable blocks define supply ports in their UPF
  • Power Switches: Switch input/output ports connect to supply nets
  • External Supplies: Top-level ports connect to off-chip power

Example: Hierarchical Supply Ports


# ===================================================================
# Top-Level UPF
# ===================================================================
create_power_domain PD_TOP -include_scope
create_supply_net VDD -domain PD_TOP
create_supply_net VSS -domain PD_TOP

# Top-level supply ports (connect to package pins)
create_supply_port VDD_PIN -domain PD_TOP -direction in
create_supply_port VSS_PIN -domain PD_TOP -direction in

# Connect external ports to internal nets
connect_supply_net VDD -ports {VDD_PIN}
connect_supply_net VSS -ports {VSS_PIN}

# ===================================================================
# Sub-Module UPF (e.g., cpu_inst)
# ===================================================================
set_scope cpu_inst

create_power_domain PD_CPU_INTERNAL -include_scope
create_supply_net VDD_CPU -domain PD_CPU_INTERNAL

# CPU module has supply port receiving power from parent
create_supply_port VDD_CPU_PORT -domain PD_CPU_INTERNAL -direction in

connect_supply_net VDD_CPU -ports {VDD_CPU_PORT}

set_scope .

# ===================================================================
# Connection: Parent VDD → cpu_inst.VDD_CPU_PORT → VDD_CPU net
# ===================================================================

IP Block Supply Interfaces

Reusable IP blocks (CPU cores, DSP engines, memory controllers) define supply ports in their UPF to declare power requirements. When integrating the IP into an SoC, the system-level UPF connects the IP's supply ports to appropriate SoC supply nets. This modular approach enables IP reuse across different SoCs with varying power architectures.

Connecting Supply Networks

The connect_supply_net command links supply nets to ports.

Syntax


connect_supply_net net_name -ports {port_list}

Example: Connecting Hierarchical Supplies


# Top-level net VDD connects to cpu_inst's VDD port
connect_supply_net VDD -ports {cpu_inst/VDD}

# Within cpu_inst, the VDD port connects to internal VDD_CPU net
set_scope cpu_inst
connect_supply_net VDD_CPU -ports {VDD}
set_scope .

Complete Hierarchical Example


# ===================================================================
# Hierarchical Supply Network Example
# ===================================================================

# Top level
create_power_domain PD_TOP -include_scope
create_supply_net VDD_1V2 -domain PD_TOP
create_supply_net GND -domain PD_TOP

# CPU subsystem at top level
create_power_domain PD_CPU -elements {cpu_subsystem}
create_supply_net VDD_1V0 -domain PD_CPU
create_supply_net GND -domain PD_CPU

# Define supply ports for the cpu_subsystem instance -- set_scope first so
# the ports are created inside cpu_subsystem's own hierarchy, matching how
# they'll be referenced (cpu_subsystem/VDD) when connecting from the top
set_scope cpu_subsystem
create_supply_port VDD -domain PD_CPU -direction in
create_supply_port VSS -domain PD_CPU -direction in
set_scope .

# Connect the top-level VDD_1V0/GND nets down to cpu_subsystem's ports
connect_supply_net VDD_1V0 -ports {cpu_subsystem/VDD}
connect_supply_net GND -ports {cpu_subsystem/VSS}

# ===================================================================
# Result:
# - Top-level provides VDD_1V2 and GND
# - CPU subsystem receives power through VDD/VSS ports
# - Internally, CPU uses VDD_1V0 net (different from top-level voltage)
# ===================================================================

Supply port connections must respect voltage compatibility. Connecting a 1.8V net directly to a port expecting 1.0V would be physically incorrect. UPF doesn't validate voltages—it's your responsibility to ensure supply connections match the intended power architecture.

Resolution Strategies

The -resolve option controls how supply nets behave in hierarchical designs.

Resolution Types

  • parallel: Net can be connected from multiple sources (default)
  • final: Net cannot be further resolved (terminal net)

# Final resolution: VDD is the ultimate source
create_supply_net VDD -domain PD_TOP -resolve final

# Parallel resolution: VDD_CPU can be driven by multiple sources
create_supply_net VDD_CPU -domain PD_CPU -resolve parallel

In practice, -resolve final is used for top-level primary supplies that shouldn't be overridden, while -resolve parallel (default) allows hierarchical composition.

For most designs, omitting -resolve (using default parallel) works fine. Use -resolve final only for top-level chip pins or when you want to explicitly prevent further connections.

Quick Check

Q: What's the difference between a supply net and a supply port in hierarchical designs?

Show Answer

A supply net is the internal power distribution within a domain (e.g., VDD_CPU inside the CPU domain). A supply port is a connection point at the boundary of a hierarchical block (e.g., the VDD pin on cpu_inst). The port connects the parent's supply net to the child's internal supply net across hierarchy levels.

Practical Example: Power-Gated Domain

Supply networks for power-gated domains include both always-on and switched supplies.


# ===================================================================
# Power-Gated GPU Domain Supply Network
# ===================================================================

# Top-level always-on supplies
create_power_domain PD_TOP -include_scope
create_supply_net VDD_AON -domain PD_TOP      # Always-on 1.2V
create_supply_net VSS -domain PD_TOP

# GPU domain with switchable supply
create_power_domain PD_GPU -elements {gpu_inst}
create_supply_net VDD_GPU_SW -domain PD_GPU   # Switched supply (can be OFF)
create_supply_net VSS -domain PD_GPU

# Power switch will be defined later, connecting:
#   Input:  VDD_AON (always available)
#   Output: VDD_GPU_SW (switched to GPU)
#   Control: Power enable signal

# ===================================================================
# Result:
# - VDD_AON is always present (needed for control logic)
# - VDD_GPU_SW can be turned off to gate GPU power
# - Power switch (defined in later module) connects VDD_AON → VDD_GPU_SW
# ===================================================================

Switched Power Supplies

In modern mobile SoCs, power switches control domain supplies. For example, a GPU domain might have VDD_GPU_SW (switched) and VDD_AON (always-on). When the GPU is idle, VDD_GPU_SW is disconnected, eliminating leakage. Control logic uses VDD_AON to maintain state and respond to wake events. This dual-supply approach is standard for power-gated blocks.

Common Naming Patterns

Consistent naming improves UPF maintainability:

PatternPurposeExample
VDD_domainDomain-specific powerVDD_CPU, VDD_GPU, VDD_DSP
VDD_voltageVoltage level indicatorVDD_1V0, VDD_1V2, VDD_1V8
VDD_functionFunctional purposeVDD_AON (always-on), VDD_RET (retention)
VDD_SWSwitched supplyVDD_GPU_SW, VDD_MEM_SW
VSS / GNDGroundVSS, GND, VSS_domain
VDDIOI/O supplyVDDIO, VDDIO_1V8

Common Beginner Mistakes

Mistake #1: Creating supply nets without specifying domain


# WRONG: Missing -domain option
create_supply_net VDD

# CORRECT: Always specify which domain contains the net
create_supply_net VDD -domain PD_TOP

Why? Supply nets must belong to a power domain. Omitting -domain causes errors or undefined behavior.

Mistake #2: Assuming supply net names match RTL signal names

Problem: UPF supply nets are separate from RTL nets. A supply net named "VDD" in UPF doesn't automatically connect to a Verilog signal named "VDD".

Solution: UPF supply nets are abstract power intent. Physical design tools map these to actual RTL power nets during implementation. Don't expect automatic name matching.

Mistake #3: Creating unnecessary separate VSS nets for each domain


# OVERLY COMPLEX: Separate VSS for each domain
create_supply_net VSS_TOP -domain PD_TOP
create_supply_net VSS_CPU -domain PD_CPU
create_supply_net VSS_GPU -domain PD_GPU

# SIMPLER: Shared VSS across domains (typical)
create_supply_net VSS -domain PD_TOP
create_supply_net VSS -domain PD_CPU  # Same name, OK for ground
create_supply_net VSS -domain PD_GPU

Why? Ground is almost always shared across all domains. Using the same VSS name in each domain simplifies UPF and reflects physical reality.

Practice Exercise

Challenge: Create Supply Networks

Given the power domains from the previous module's exercise, create appropriate supply networks:


# Existing power domains
create_power_domain PD_TOP -include_scope
create_power_domain PD_CPU -elements {cpu_cluster}
create_power_domain PD_DSP -elements {dsp_engine}
create_power_domain PD_IO -elements {io_subsystem}

Requirements:

  • PD_TOP: 1.2V (always-on)
  • PD_CPU: 1.0V (can be switched off)
  • PD_DSP: 0.9V (can be switched off)
  • PD_IO: 1.8V (always-on for wake capability)
  • Shared ground across all domains
Hint

Create 5 supply nets: VDD_TOP (1.2V), VDD_CPU (1.0V), VDD_DSP (0.9V), VDDIO (1.8V), and VSS (ground). Use descriptive names indicating voltage or function. Remember to specify -domain for each net.

Solution

# ===================================================================
# Supply Networks for Multi-Domain SoC
# ===================================================================

# Top-level supplies (always-on, 1.2V)
create_supply_net VDD_TOP -domain PD_TOP
create_supply_net VSS -domain PD_TOP

# CPU supplies (1.0V, switchable)
create_supply_net VDD_CPU -domain PD_CPU
create_supply_net VSS -domain PD_CPU

# DSP supplies (0.9V, switchable)
create_supply_net VDD_DSP -domain PD_DSP
create_supply_net VSS -domain PD_DSP

# I/O supplies (1.8V, always-on)
create_supply_net VDDIO -domain PD_IO
create_supply_net VSS -domain PD_IO

# ===================================================================
# Supply Network Summary:
# - VDD_TOP:  1.2V, always-on (for control logic)
# - VDD_CPU:  1.0V, switchable (for CPU power gating)
# - VDD_DSP:  0.9V, switchable (for DSP power gating)
# - VDDIO:    1.8V, always-on (for I/O wake capability)
# - VSS:      0V (ground), shared across all domains
# ===================================================================

# Notes:
# 1. VSS uses same name in all domains (physically shared ground)
# 2. VDD nets have distinct names reflecting voltage/domain
# 3. Later modules will add power switches to control VDD_CPU/VDD_DSP
# 4. Level shifters will be needed at domain boundaries (voltage crossings)

Summary

In this tutorial, you learned:

  • Supply networks model power delivery infrastructure with supply nets (internal distribution) and supply ports (hierarchical connections)
  • create_supply_net defines power/ground nets within a domain, requiring -domain specification
  • Primary supply nets (VDD, VSS) are defined in the primary power domain and represent chip-level power and ground
  • Multi-voltage designs require separate supply nets per voltage domain (VDD_TOP, VDD_CPU, VDDIO), while ground (VSS) is typically shared
  • create_supply_port defines connection points for hierarchical power delivery, with connect_supply_net linking ports to nets
  • Descriptive naming (VDD_domain, VDD_voltage, VDD_SW) improves UPF maintainability and clarity
Did you find what you were looking for?

Quiz

No quiz questions available for this article.