Why Learn Supply Sets? While individual supply nets represent power and ground connections, supply sets group these nets into functional units that serve specific purposes (power, ground, nwell, pwell). Understanding supply sets is essential for associating power domains with their complete power delivery requirements and enabling advanced power management strategies. In this tutorial, you'll master creating and using supply sets in UPF.

12 min read | Intermediate Level

What You'll Learn

  • Understand what supply sets are and why they're needed
  • Create supply sets with function assignments using create_supply_set
  • Associate supply sets with power domains
  • Work with multiple supply sets for different power states

What is a Supply Set?

A supply set is a collection of supply nets grouped by their functional roles. Instead of treating power and ground as separate entities, a supply set bundles them together to represent a complete power delivery configuration.

Each supply set defines:

  • Power Supply: The primary power net (e.g., VDD)
  • Ground Supply: The ground reference (e.g., VSS)
  • Optional Supplies: Nwell, pwell, or other specialized supplies

Supply sets answer the question: "What complete set of power connections does this domain need to operate?" Rather than saying "this domain uses VDD and VSS separately," you say "this domain uses supply set SS_TOP, which provides both power and ground."

Why Supply Sets?

Supply sets provide several benefits:

  • Logical Grouping: Power and ground are naturally paired—supply sets reflect this relationship
  • State Management: Different power states can use different supply sets (active vs retention)
  • Cleaner Association: One command associates complete power delivery with a domain
  • Advanced Features: Enable nwell/pwell biasing and multi-threshold designs

Supply Sets in Practice

A power-gated domain might have two supply sets: SS_ACTIVE (VDD + VSS for normal operation) and SS_RETENTION (VDD_RET + VSS for state retention during power-down). When the domain enters sleep mode, UPF switches from SS_ACTIVE to SS_RETENTION, maintaining flip-flop state while the main supply is off. Supply sets make this state-dependent supply management explicit and tool-readable.

Syntax: create_supply_set

The create_supply_set command creates a named group of supply nets with functional roles.

Basic Form


create_supply_set set_name -function {role net_name} [additional_functions]

Parameters

  • set_name - Unique identifier for the supply set (required)
  • -function {role net_name} - Assign a supply net to a functional role (required, repeatable)

Standard Function Roles

RolePurposeExample
powerPrimary power supplyVDD, VDD_CPU
groundGround referenceVSS, GND
nwellN-well bias supplyVDD or VDDN
pwellP-well bias supplyVSS or VDDP

Usage Variations

1. Basic Supply Set (Power + Ground):


create_supply_set SS_TOP \
  -function {power VDD_TOP} \
  -function {ground VSS}

2. Supply Set with Well Biasing:


create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS} \
  -function {nwell VDD_CPU} \
  -function {pwell VSS}

3. Retention Supply Set:


create_supply_set SS_RET \
  -function {power VDD_RET} \
  -function {ground VSS}

Creating Basic Supply Sets

Every power domain requires at least one supply set defining its power and ground.

Single-Domain Example


# Create power domain
create_power_domain PD_TOP -include_scope

# Create supply nets
create_supply_net VDD -domain PD_TOP
create_supply_net VSS -domain PD_TOP

# Create supply set grouping power and ground
create_supply_set SS_TOP \
  -function {power VDD} \
  -function {ground VSS}

# Associate supply set with domain (next section)
associate_supply_set SS_TOP -handle PD_TOP

This creates a complete power delivery specification: PD_TOP uses SS_TOP, which provides VDD (power) and VSS (ground).

Quick Check

Q: What's the difference between a supply net and a supply set?

Show Answer

A supply net is a single power or ground connection (e.g., VDD or VSS). A supply set is a group of supply nets assigned functional roles (power, ground, nwell, pwell). For example, SS_TOP might contain VDD (power function) and VSS (ground function) bundled together as a complete power delivery configuration.

Multi-Domain Supply Sets

Each power domain typically has its own supply set reflecting its unique voltage and power delivery.


# ===================================================================
# Multi-Domain Supply Sets Example
# ===================================================================

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

create_supply_set SS_TOP \
  -function {power VDD_TOP} \
  -function {ground VSS}

associate_supply_set SS_TOP -handle PD_TOP

# CPU domain (1.0V, switchable)
create_power_domain PD_CPU -elements {cpu_inst}
create_supply_net VDD_CPU -domain PD_CPU
create_supply_net VSS -domain PD_CPU

create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS}

associate_supply_set SS_CPU -handle PD_CPU

# GPU domain (0.9V, switchable)
create_power_domain PD_GPU -elements {gpu_inst}
create_supply_net VDD_GPU -domain PD_GPU
create_supply_net VSS -domain PD_GPU

create_supply_set SS_GPU \
  -function {power VDD_GPU} \
  -function {ground VSS}

associate_supply_set SS_GPU -handle PD_GPU

# ===================================================================
# Result: Each domain has its own supply set
#   - PD_TOP uses SS_TOP (1.2V)
#   - PD_CPU uses SS_CPU (1.0V)
#   - PD_GPU uses SS_GPU (0.9V)
# ===================================================================

Naming convention: Use "SS_" prefix for supply sets matching the domain name. If PD_CPU is your domain, name its supply set SS_CPU. This makes the association obvious when reading UPF.

Associating Supply Sets with Domains

After creating a supply set, associate it with a power domain using associate_supply_set.

Syntax


associate_supply_set set_name -handle domain_name

Parameters

  • set_name - Name of the supply set to associate
  • -handle domain_name - Power domain receiving this supply set

Example


# Create supply set
create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS}

# Associate with domain
associate_supply_set SS_CPU -handle PD_CPU

This tells UPF: "PD_CPU gets its power from the supplies defined in SS_CPU."

The associate_supply_set command is what actually connects the abstract supply set definition to the concrete power domain. Without this association, the supply set exists but isn't used.

Multiple Supply Sets per Domain

A single domain can have multiple supply sets for different operating states.

Active vs Retention Example


# ===================================================================
# Power-Gated Domain with Retention
# ===================================================================

create_power_domain PD_GPU -elements {gpu_inst}

# Supply nets
create_supply_net VDD_GPU -domain PD_GPU      # Main power (switchable)
create_supply_net VDD_RET -domain PD_GPU      # Retention power (always-on)
create_supply_net VSS -domain PD_GPU

# Active supply set: Used during normal operation
create_supply_set SS_GPU_ACTIVE \
  -function {power VDD_GPU} \
  -function {ground VSS}

# Retention supply set: Used during power-down to preserve state
create_supply_set SS_GPU_RET \
  -function {power VDD_RET} \
  -function {ground VSS}

# Primary association: Active mode
associate_supply_set SS_GPU_ACTIVE -handle PD_GPU

# ===================================================================
# Note: Retention strategy (later module) will specify using
# SS_GPU_RET for retention cells during power-down
# ===================================================================

Retention Supply Sets

In mobile processors, retention flip-flops use a separate always-on supply (VDD_RET) to maintain state while the main domain supply (VDD_GPU) is off. The retention supply set (SS_GPU_RET) provides minimal power—just enough to preserve state without clock activity. This enables quick wake-up (state is already present) with significant leakage savings (main supply is completely off).

Well Biasing with Supply Sets

Advanced process nodes may require explicit nwell and pwell supply specifications for body biasing techniques.

Standard Well Biasing


# Typical case: Nwell tied to VDD, Pwell tied to VSS
create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS} \
  -function {nwell VDD_CPU} \
  -function {pwell VSS}

Advanced Body Biasing

For designs using adaptive body biasing (ABB) or reverse body biasing (RBB):


# Create separate well bias supplies
create_supply_net VDDN -domain PD_CPU   # N-well supply (can be > VDD_CPU)
create_supply_net VDDP -domain PD_CPU   # P-well supply (can be < VSS)

create_supply_set SS_CPU_ABB \
  -function {power VDD_CPU} \
  -function {ground VSS} \
  -function {nwell VDDN} \      # Forward body bias: VDDN > VDD_CPU
  -function {pwell VDDP}        # Reverse body bias: VDDP < VSS (negative)

Well biasing is an advanced technique used in specific process technologies. Most designs simply tie nwell to power and pwell to ground. Only include explicit well supplies if your technology library requires it or if you're implementing body biasing for performance/leakage optimization.

Quick Check

Q: When would a power domain need multiple supply sets?

Show Answer

A domain needs multiple supply sets when it operates in different power states with different supply requirements. Common cases: (1) Active vs retention (SS_ACTIVE uses VDD_MAIN, SS_RET uses VDD_RET), (2) Performance states (SS_HIGH_PERF at 1.2V, SS_LOW_POWER at 0.9V), (3) Test modes (SS_NORMAL vs SS_TEST with different supply configurations).

Supply Sets for Isolation and Level Shifting

Special cells at domain boundaries require supply set specifications.

Isolation Cell Supply

Isolation cells need power even when the isolated domain is off—they use the parent (always-on) supply set:


# Isolation strategy (covered in later module)
set_isolation ISO_GPU -domain PD_GPU \
  -isolation_supply_set SS_TOP \   # Use always-on supply, not GPU supply
  -clamp_value 0

The -isolation_supply_set SS_TOP ensures isolation cells remain powered from the always-on domain, preventing X-propagation even when PD_GPU is off.

Level Shifter Supply

Level shifters cross voltage domains and need supplies from both:


# Level shifter crossing from low-voltage to high-voltage
# Typically uses supplies from destination domain
set_level_shifter LS_CPU_TO_TOP -domain PD_CPU \
  -location parent
  # Implicitly uses SS_TOP supplies (parent domain)

Level shifter cells physically require access to both voltage levels, which is handled by the library cells themselves. UPF specifies which supply set powers the level shifter logic.

Complete Example: Multi-Domain with Supply Sets


# ===================================================================
# Complete UPF: Domains + Supply Nets + Supply Sets
# ===================================================================

# ===================================================================
# TOP DOMAIN (Always-on, 1.2V)
# ===================================================================
create_power_domain PD_TOP -include_scope

create_supply_net VDD_TOP -domain PD_TOP
create_supply_net VSS -domain PD_TOP

create_supply_set SS_TOP \
  -function {power VDD_TOP} \
  -function {ground VSS}

associate_supply_set SS_TOP -handle PD_TOP

# ===================================================================
# CPU DOMAIN (Power-gated, 1.0V, with retention)
# ===================================================================
create_power_domain PD_CPU -elements {cpu_inst}

create_supply_net VDD_CPU -domain PD_CPU
create_supply_net VDD_RET -domain PD_CPU
create_supply_net VSS -domain PD_CPU

# Active mode supply set
create_supply_set SS_CPU_ACTIVE \
  -function {power VDD_CPU} \
  -function {ground VSS}

# Retention mode supply set
create_supply_set SS_CPU_RET \
  -function {power VDD_RET} \
  -function {ground VSS}

associate_supply_set SS_CPU_ACTIVE -handle PD_CPU

# ===================================================================
# GPU DOMAIN (Power-gated, 0.9V)
# ===================================================================
create_power_domain PD_GPU -elements {gpu_inst}

create_supply_net VDD_GPU -domain PD_GPU
create_supply_net VSS -domain PD_GPU

create_supply_set SS_GPU \
  -function {power VDD_GPU} \
  -function {ground VSS}

associate_supply_set SS_GPU -handle PD_GPU

# ===================================================================
# Summary:
# - 3 domains: PD_TOP (always-on), PD_CPU (gatable), PD_GPU (gatable)
# - 4 supply sets: SS_TOP, SS_CPU_ACTIVE, SS_CPU_RET, SS_GPU
# - PD_CPU has 2 sets (active + retention), others have 1
# ===================================================================

Common Beginner Mistakes

Mistake #1: Creating supply set without associating it with a domain


# INCOMPLETE: Supply set created but not associated
create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS}
# Missing: associate_supply_set SS_CPU -handle PD_CPU

# COMPLETE:
create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS}
associate_supply_set SS_CPU -handle PD_CPU

Why? The supply set definition is just a declaration. Without associate_supply_set, the domain doesn't know to use it.

Mistake #2: Forgetting ground function in supply set


# WRONG: Missing ground function
create_supply_set SS_CPU \
  -function {power VDD_CPU}

# CORRECT: Include both power and ground
create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS}

Why? Cells need both power and ground to operate. Supply sets must specify both functions (at minimum).

Mistake #3: Referencing non-existent supply nets in supply set


# WRONG: VDD_CPU not created yet
create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS}

# CORRECT: Create nets before referencing them
create_supply_net VDD_CPU -domain PD_CPU
create_supply_net VSS -domain PD_CPU

create_supply_set SS_CPU \
  -function {power VDD_CPU} \
  -function {ground VSS}

Why? Supply sets reference supply nets. Create the nets first, then bundle them into sets.

Practice Exercise

Challenge: Create Complete Supply Hierarchy

Given the following requirements, write UPF to create domains, supply nets, and supply sets:

  • PD_TOP: Always-on, 1.2V (VDD_AON, VSS)
  • PD_MODEM: Power-gated, 1.0V (VDD_MDM, VSS), with retention (VDD_RET, VSS)
  • PD_SENSOR: Always-on, 0.9V (VDD_SENSOR, VSS)

Create appropriate supply sets and associations for all domains.

Hint

You'll need 3 domains, 6 supply nets (VDD_AON, VDD_MDM, VDD_RET, VDD_SENSOR, VSS), and 4 supply sets (SS_TOP, SS_MDM_ACTIVE, SS_MDM_RET, SS_SENSOR). Remember to associate each supply set with its domain.

Solution

# ===================================================================
# Complete Supply Hierarchy Exercise Solution
# ===================================================================

# TOP DOMAIN: Always-on, 1.2V
create_power_domain PD_TOP -include_scope
create_supply_net VDD_AON -domain PD_TOP
create_supply_net VSS -domain PD_TOP

create_supply_set SS_TOP \
  -function {power VDD_AON} \
  -function {ground VSS}

associate_supply_set SS_TOP -handle PD_TOP

# MODEM DOMAIN: Power-gated, 1.0V, with retention
create_power_domain PD_MODEM -elements {modem_inst}
create_supply_net VDD_MDM -domain PD_MODEM
create_supply_net VDD_RET -domain PD_MODEM
create_supply_net VSS -domain PD_MODEM

# Active mode supply set
create_supply_set SS_MDM_ACTIVE \
  -function {power VDD_MDM} \
  -function {ground VSS}

# Retention mode supply set
create_supply_set SS_MDM_RET \
  -function {power VDD_RET} \
  -function {ground VSS}

associate_supply_set SS_MDM_ACTIVE -handle PD_MODEM

# SENSOR DOMAIN: Always-on, 0.9V
create_power_domain PD_SENSOR -elements {sensor_hub}
create_supply_net VDD_SENSOR -domain PD_SENSOR
create_supply_net VSS -domain PD_SENSOR

create_supply_set SS_SENSOR \
  -function {power VDD_SENSOR} \
  -function {ground VSS}

associate_supply_set SS_SENSOR -handle PD_SENSOR

# ===================================================================
# Result Summary:
# - PD_TOP: SS_TOP (VDD_AON 1.2V, always-on)
# - PD_MODEM: SS_MDM_ACTIVE (VDD_MDM 1.0V) and SS_MDM_RET (VDD_RET)
# - PD_SENSOR: SS_SENSOR (VDD_SENSOR 0.9V, always-on)
# ===================================================================

Summary

In this tutorial, you learned:

  • Supply sets bundle supply nets with functional roles (power, ground, nwell, pwell) into logical groups representing complete power delivery
  • create_supply_set defines sets with -function {role net}, grouping nets by purpose
  • associate_supply_set connects supply sets to power domains, specifying which supplies each domain uses
  • Domains can have multiple supply sets for different states (SS_ACTIVE vs SS_RET for power gating with retention)
  • Supply sets are used throughout UPF for isolation, level shifting, and retention strategies to specify which supplies power special cells
  • Advanced designs may include nwell/pwell functions for body biasing techniques, though most designs simply tie wells to power/ground
Did you find what you were looking for?

Quiz

No quiz questions available for this article.