Why Learn Always-On Networks? Power management control logic, isolation cells, and retention circuits must remain operational even when power domains are gated off. Always-on supply networks provide this critical infrastructure, ensuring power management itself doesn't fail. Understanding how to specify and manage always-on networks in UPF is essential for reliable power gating implementation. In this tutorial, you'll master always-on network strategies.

13 min read | Advanced Level

What You'll Learn

  • Understand the concept and necessity of always-on logic
  • Define always-on supply networks in UPF
  • Use set_domain_supply_net for always-on control distribution
  • Implement power management controllers with always-on supplies

Understanding Always-On Networks

An always-on network is a supply network that remains powered continuously, providing power to critical infrastructure that must function regardless of power domain states.

What Requires Always-On Power?

  • Power Management Controller (PMC): Logic controlling power switches, isolation, retention
  • Isolation Cells: Must remain powered to clamp outputs when source domain is off
  • Level Shifters: Often powered by destination (always-on) domain
  • Retention Cells: Require always-on retention supply (VDD_RET)
  • Wake-Up Logic: Interrupt controllers, timer circuits for waking powered-down domains
  • Debug Infrastructure: JTAG, scan chains, monitoring circuits
  • Always-On Sensors: Temperature sensors, voltage monitors, security circuits

Always-on networks trade power for functionality—they consume power continuously (leakage + any switching activity) but enable aggressive power gating of other domains. The key is minimizing always-on logic to essential functions only.

Always-On Domain in Mobile SoCs

In a smartphone processor, the always-on domain typically includes: power management controller (PMC), interrupt controller for wake events (touch screen, buttons, wireless), real-time clock (RTC), low-power sensor hub, and security processors. This consumes ~5-10mW continuously but enables the rest of the SoC (CPU, GPU, modem—potentially 1-2W when active) to be completely powered off during deep sleep, reducing standby power by 99%.

The Always-On Requirement Problem

Consider power gating without proper always-on infrastructure:

INCORRECT Design (No Always-On):
┌────────────────────────────┐
│  Power Management Logic    │  ← Powered by switchable VDD_CTRL
│  Controls: ISO, RET, PSW   │
└────────┬───────────────────┘
         ↓
    [Power Switches]
         ↓
    Gated Domains

Problem: If VDD_CTRL is gated, power management stops working!
- Can't control isolation
- Can't manage power switches
- Can't wake domains up
Result: System locks up, requires hard reset

Correct Design with Always-On

CORRECT Design (Always-On Network):
┌────────────────────────────┐
│  Power Management Logic    │  ← Powered by VDD_AON (always-on)
│  Controls: ISO, RET, PSW   │
└────────┬───────────────────┘
         ↓
    [Power Switches]  ← Also controlled via VDD_AON signals
         ↓
    Gated Domains

VDD_AON remains on → PMC always functional → Can wake domains

Failure to provide always-on supply to power management logic creates a "chicken and egg" problem: you need power management to restore power, but power management itself has no power. Always identify and isolate always-on requirements early in design.

Quick Check

Q: Why can't isolation cells be powered by the gated domain supply?

Show Answer

Isolation cells must remain powered to actively drive the clamp value (0 or 1) when the source domain is off. If they were powered by the gated domain supply, they would lose power along with the domain, leaving outputs floating (the exact problem isolation is meant to prevent). Isolation cells must use always-on supply from the destination domain.

Defining Always-On Supply Networks

Always-on supplies are defined like any other supply net, but they have a single power state (always ON).


# Create always-on primary domain
create_power_domain PD_AON -include_scope

# Always-on supply nets
create_supply_net VDD_AON -domain PD_AON   # Always-on power
create_supply_net VSS -domain PD_AON       # Ground

# Always-on supply set
create_supply_set SS_AON \
  -function {power VDD_AON} \
  -function {ground VSS}

associate_supply_set SS_AON -handle PD_AON

# Power states: Single state (always ON)
add_power_state VDD_AON -state {ON 1.2}
add_power_state VSS -state {ON 0.0}

Key characteristics of always-on supplies:

  • Single power state (no OFF state)
  • No power switch controlling the supply
  • Directly connected to chip power pins
  • Used by power management infrastructure

Using Always-On Networks for Control

Control signals for power management must use always-on supplies.

Power Switch Control from Always-On


# Always-on domain
create_power_domain PD_AON -include_scope
create_supply_net VDD_AON -domain PD_AON
# ... (supply sets, states)

# Gated domain
create_power_domain PD_CPU -elements {cpu_inst}
create_supply_net VDD_CPU -domain PD_CPU
# ... (supply sets, states)

# Power switch controlled by always-on signal
create_power_switch PSW_CPU -domain PD_CPU \
  -input_supply_port {vin VDD_AON} \      # Input from always-on
  -output_supply_port {vout VDD_CPU} \    # Output to gated domain
  -control_port {ctrl cpu_pwr_enable} \   # Signal from always-on logic
  -on_state {on vin {ctrl}}

The control signal cpu_pwr_enable originates from logic in PD_AON, ensuring the power switch can be controlled even when PD_CPU is off.

Isolation Control from Always-On


# Isolation cells powered by and controlled from always-on
set_isolation ISO_CPU -domain PD_CPU \
  -isolation_supply_set SS_AON \          # Always-on supply
  -clamp_value 0 \
  -isolation_signal cpu_iso_enable \      # Signal from AON logic
  -isolation_sense high \
  -location parent                        # In AON domain

Both the isolation cell power and control signal come from the always-on domain.

Syntax: set_domain_supply_net

The set_domain_supply_net command explicitly associates a domain with a supply net, useful for always-on control distribution.

Basic Form


set_domain_supply_net domain_name \
  -primary_power_net net_name \
  [-primary_ground_net net_name]

Use Cases

1. Override Default Domain Supply:


# Domain normally uses VDD_CPU, but control logic uses VDD_AON
set_domain_supply_net PD_CPU \
  -primary_power_net VDD_AON

2. Specify Always-On for Control Paths:


# Ensure power control uses always-on supply
set_domain_supply_net PD_GPU \
  -primary_power_net VDD_AON \
  -primary_ground_net VSS

set_domain_supply_net is typically used for special cases where default supply association isn't appropriate, such as control logic that must remain powered independently of the domain's main supply. For most designs, associate_supply_set is sufficient.

Always-On Retention Supplies

Retention supplies are a special type of always-on network for state preservation.


# Always-on domain with retention supply
create_power_domain PD_AON -include_scope
create_supply_net VDD_AON -domain PD_AON
create_supply_net VDD_RET -domain PD_AON     # Retention supply (always-on)
create_supply_net VSS -domain PD_AON

# Retention supply set (used by retention cells across all domains)
create_supply_set SS_RET \
  -function {power VDD_RET} \
  -function {ground VSS}

# Power states
add_power_state VDD_AON -state {ON 1.2}
add_power_state VDD_RET -state {RETENTION 0.6}  # Always-on at low voltage
add_power_state VSS -state {ON 0.0}

The retention supply (VDD_RET) is always-on but at low voltage (~0.6V) to minimize leakage while preserving state.

Using Always-On Retention Supply


# Gated domain with retention
create_power_domain PD_CPU -elements {cpu_inst}
# ... (CPU supplies)

# Retention strategy using always-on retention supply
set_retention RET_CPU -domain PD_CPU \
  -retention_supply_set SS_RET \     # Always-on retention supply
  -retention_condition {cpu_ret_enable}

The retention supply set SS_RET (containing always-on VDD_RET) is used by all retention cells across all power-gated domains.

Retention Supply Distribution

In a multi-core processor, a single always-on retention supply (VDD_RET at 0.6V) powers retention cells across all four CPU cores, the GPU, and the DSP. Even though each block has its own switchable main supply (VDD_CORE0-3, VDD_GPU, VDD_DSP), they all share the common retention infrastructure. This simplifies power delivery and reduces the number of always-on supplies required.

Complete Always-On Network Example


# ===================================================================
# Complete Always-On Network Design
# ===================================================================

# ALWAYS-ON DOMAIN (Primary)
create_power_domain PD_AON -include_scope

# Always-on supply nets
create_supply_net VDD_AON -domain PD_AON        # Main always-on (1.2V)
create_supply_net VDD_RET -domain PD_AON        # Retention (0.6V, always-on)
create_supply_net VSS -domain PD_AON

# Always-on supply sets
create_supply_set SS_AON \
  -function {power VDD_AON} \
  -function {ground VSS}

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

associate_supply_set SS_AON -handle PD_AON

# Always-on power states (single state each)
add_power_state VDD_AON -state {ON 1.2}
add_power_state VDD_RET -state {RETENTION 0.6}
add_power_state VSS -state {ON 0.0}

# CPU DOMAIN (Power-Gated with Retention)
create_power_domain PD_CPU -elements {cpu_subsystem}

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

add_power_state VDD_CPU \
  -state {ACTIVE 1.0} \
  -state {OFF off}

# Power switch (controlled by always-on signal)
create_power_switch PSW_CPU -domain PD_CPU \
  -input_supply_port {vin VDD_AON} \       # Always-on input
  -output_supply_port {vout VDD_CPU} \
  -control_port {ctrl cpu_pwr_enable} \    # From AON domain
  -on_state {on vin {ctrl}}

# Isolation (powered by always-on, controlled by always-on)
set_isolation ISO_CPU -domain PD_CPU \
  -isolation_supply_set SS_AON \           # Always-on supply
  -clamp_value 0 \
  -isolation_signal cpu_iso_enable \       # From AON domain
  -isolation_sense high \
  -location parent                         # In AON domain

# Retention (using always-on retention supply)
set_retention RET_CPU -domain PD_CPU \
  -retention_supply_set SS_RET \           # Always-on retention supply
  -retention_condition {cpu_ret_enable}    # From AON domain

# GPU DOMAIN (Power-Gated, No Retention)
create_power_domain PD_GPU -elements {gpu_subsystem}

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

add_power_state VDD_GPU \
  -state {ACTIVE 0.9} \
  -state {OFF off}

# Power switch (always-on control)
create_power_switch PSW_GPU -domain PD_GPU \
  -input_supply_port {vin VDD_AON} \
  -output_supply_port {vout VDD_GPU} \
  -control_port {ctrl gpu_pwr_enable} \
  -on_state {on vin {ctrl}}

# Isolation (always-on infrastructure)
set_isolation ISO_GPU -domain PD_GPU \
  -isolation_supply_set SS_AON \
  -clamp_value 0 \
  -isolation_signal gpu_iso_enable \
  -isolation_sense high \
  -location parent

# ===================================================================
# Always-On Network Summary:
# - VDD_AON: Powers AON domain, isolation cells, power switches
# - VDD_RET: Powers retention cells across all domains
# - All control signals (pwr_enable, iso_enable, ret_enable) from AON
# - Power management controller resides in PD_AON
# ===================================================================

# Power Management Controller (in Always-On Domain)
# ===================================================================
# The PMC logic (not shown in UPF) controls:
# - cpu_pwr_enable, cpu_iso_enable, cpu_ret_enable
# - gpu_pwr_enable, gpu_iso_enable
# All PMC logic powered by VDD_AON, ensuring it can manage power states
# regardless of which domains are currently powered on/off
# ===================================================================

Always-On Network Design Principles

1. Minimize Always-On Logic

Always-on logic consumes power continuously. Keep it minimal:

  • Include: Power management controller, isolation cells, wake-up logic
  • Exclude: Application logic, data processing, non-critical peripherals

A good target: Always-on domain should be <5% of total chip area and consume <10mW in deep sleep. Anything more suggests non-essential logic in the always-on domain.

2. Use Single Always-On Supply When Possible

Multiple always-on supplies increase complexity:

SIMPLE (Recommended):
- VDD_AON (1.2V) - main always-on for control logic, isolation
- VDD_RET (0.6V) - retention supply

COMPLEX (Avoid unless necessary):
- VDD_AON_HIGH (1.2V) - high-voltage always-on
- VDD_AON_LOW (0.9V) - low-voltage always-on
- VDD_RET_1 (0.6V) - retention for some domains
- VDD_RET_2 (0.7V) - retention for others
Result: Complicated power delivery, more area, minimal benefit

3. Ensure Always-On for All Critical Infrastructure

Checklist for always-on supply usage:

  • [ ] Power management controller logic
  • [ ] All power switch control signals
  • [ ] All isolation cell supplies and controls
  • [ ] All retention cell retention supplies
  • [ ] Wake-up interrupt controller
  • [ ] Debug/scan infrastructure (if must work in sleep)
  • [ ] Any safety-critical monitoring (thermal, voltage)

Always-On vs Low-Power Modes

Always-on doesn't mean "full power"—use low-power techniques:

TechniqueApplication to Always-OnBenefit
Clock GatingGate clocks to idle AON logicReduce dynamic power in AON
Low VoltageRun AON at minimum functional voltageReduce both dynamic and leakage
High-Vth CellsUse high-Vth standard cells in AONMinimize leakage power
Minimal LogicKeep AON as small as possibleLess area = less leakage

Always-on domain voltage is often lower than peak performance domains (e.g., 1.0V for AON, 1.2V for CPU). Always-on logic doesn't need high speed, so run it at minimum voltage that meets timing, reducing power.

Common Beginner Mistakes

Mistake #1: Powering power switch control logic from the gated domain


# WRONG: Control logic in gated domain (can't control itself!)
# If cpu_pwr_enable logic is in PD_CPU, it loses power when CPU is off
# Now you can't turn CPU back on → system stuck

# CORRECT: Control logic in always-on domain
# cpu_pwr_enable logic in PD_AON → always functional → can wake CPU

Why? Power management control must be independent of the domains it controls. Always place power management logic in an always-on domain.

Mistake #2: Forgetting to provide always-on supply to retention cells


# WRONG: Retention supply is switchable
add_power_state VDD_RET -state {ON 0.6} -state {OFF off}

# CORRECT: Retention supply is always-on (single state)
add_power_state VDD_RET -state {RETENTION 0.6}

Why? Retention supply must remain on during power-down to preserve state. If it has an OFF state, retention doesn't work.

Mistake #3: Making always-on domain too large

Problem: Including non-essential logic in always-on domain wastes power continuously.

Solution: Critically evaluate what truly must be always-on. Peripheral controllers, application logic, and most data processing can be power-gated. Only power management infrastructure and wake-up logic must be always-on.

Practice Exercise

Challenge: Design Always-On Infrastructure

Create a power management system with:

  • Always-on domain (PD_AON) at 1.2V
  • Shared retention supply (VDD_RET) at 0.6V
  • Two gated domains: PD_MODEM (1.0V) and PD_SENSOR (0.9V)
  • PD_MODEM has retention, PD_SENSOR does not

Ensure all power management infrastructure uses always-on supplies.

Hint

You need VDD_AON and VDD_RET in PD_AON (both always-on, single state). Power switches take VDD_AON as input. Isolation uses SS_AON. Retention uses SS_RET. All control signals originate from PD_AON.

Solution

# ===================================================================
# Always-On Infrastructure Design
# ===================================================================

# ALWAYS-ON DOMAIN
create_power_domain PD_AON -include_scope

create_supply_net VDD_AON -domain PD_AON
create_supply_net VDD_RET -domain PD_AON
create_supply_net VSS -domain PD_AON

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

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

associate_supply_set SS_AON -handle PD_AON

add_power_state VDD_AON -state {ON 1.2}
add_power_state VDD_RET -state {RETENTION 0.6}
add_power_state VSS -state {ON 0.0}

# MODEM DOMAIN (Power-gated with retention)
create_power_domain PD_MODEM -elements {modem_inst}

create_supply_net VDD_MODEM -domain PD_MODEM
create_supply_net VSS -domain PD_MODEM

create_supply_set SS_MODEM \
  -function {power VDD_MODEM} \
  -function {ground VSS}

associate_supply_set SS_MODEM -handle PD_MODEM

add_power_state VDD_MODEM -state {ACTIVE 1.0} -state {OFF off}

# Power switch (always-on infrastructure)
create_power_switch PSW_MODEM -domain PD_MODEM \
  -input_supply_port {vin VDD_AON} \
  -output_supply_port {vout VDD_MODEM} \
  -control_port {ctrl modem_pwr_en} \
  -on_state {on vin {ctrl}}

# Isolation (always-on)
set_isolation ISO_MODEM -domain PD_MODEM \
  -isolation_supply_set SS_AON \
  -clamp_value 0 \
  -isolation_signal modem_iso_en \
  -isolation_sense high \
  -location parent

# Retention (always-on retention supply)
set_retention RET_MODEM -domain PD_MODEM \
  -retention_supply_set SS_RET \
  -retention_condition {modem_ret_en}

# SENSOR DOMAIN (Power-gated, no retention)
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

add_power_state VDD_SENSOR -state {ACTIVE 0.9} -state {OFF off}

# Power switch (always-on infrastructure)
create_power_switch PSW_SENSOR -domain PD_SENSOR \
  -input_supply_port {vin VDD_AON} \
  -output_supply_port {vout VDD_SENSOR} \
  -control_port {ctrl sensor_pwr_en} \
  -on_state {on vin {ctrl}}

# Isolation (always-on)
set_isolation ISO_SENSOR -domain PD_SENSOR \
  -isolation_supply_set SS_AON \
  -clamp_value 0 \
  -isolation_signal sensor_iso_en \
  -isolation_sense high \
  -location parent

# ===================================================================
# Always-On Infrastructure Summary:
# - VDD_AON: Powers AON domain, all isolation cells, power switches
# - VDD_RET: Powers modem retention cells
# - All control signals (pwr_en, iso_en, ret_en) from AON domain
# - Power management controller in PD_AON controls everything
# ===================================================================

Summary

In this tutorial, you learned:

  • Always-on networks provide continuous power to critical infrastructure: power management controller, isolation cells, retention supplies, wake-up logic
  • Always-on supplies have single power state (ON) with no power switch, ensuring continuous functionality
  • All power management control signals (power switch enable, isolation enable, retention enable) must originate from always-on domain
  • Retention supplies (VDD_RET) are always-on at low voltage (~0.6V), shared across all power-gated domains
  • Design principles: minimize always-on logic (<5% area, <10mW), use single always-on supply when possible, apply low-power techniques (clock gating, low voltage)
  • set_domain_supply_net explicitly associates domains with supplies for special cases like always-on control distribution
Did you find what you were looking for?

Quiz

No quiz questions available for this article.