What Happens in CDC & UPF Power Intent?

๐Ÿงฉ The Low-Power & Asynchronous Architect's Job

Real-world microchips rarely operate on a single clock. A typical SoC runs a high-speed CPU clock (e.g. 50โ€“500 MHz), a low-power real-time clock (RTC @ 32.768 kHz), and asynchronous peripheral clocks (UART, SPI, USB). When a signal generated in one clock domain is sampled by a flip-flop in another domain without a fixed phase relationship, the receiving flip-flop's setup or hold window will eventually be violated, causing metastability โ€” where the output oscillates unpredictably before settling to a random 0 or 1.

The CDC architect identifies every cross-domain boundary and enforces proven synchronization topologies: 2-flip-flop synchronizers for single-bit control flags, Gray-coded dual-clock FIFOs for multi-bit data words, and request/acknowledge handshake protocols. Reset Domain Crossing (RDC) checks ensure asynchronous reset deassertion is glitch-free.

Concurrently, the power architect writes the UPF (IEEE 1801) specification. Rather than hardcoding power switches into RTL, UPF declaratively specifies voltage islands, power switches for sleep modes, isolation cells to clamp outputs of powered-off blocks to safe logic levels, level shifters for voltage domain boundaries (e.g. 1.8V IO to 1.2V Core), and retention registers to preserve critical state during sleep.

๐Ÿ—๏ธ
Analogy: CDC is like passing a baton between runners on two different racetracks moving at completely unrelated speeds. Without a synchronized handoff zone, the baton drops. UPF is like zoning a skyscraper with independent power circuit breakers โ€” allowing unoccupied floors to shut off completely while emergency lighting (Always-ON domain) stays lit.

๐Ÿ“‹ What RTL & Spec Provide

  • Multi-clock RTL description (clocks & resets)
  • SDC master clock definitions & generated clocks
  • Power architecture targets & voltage domains
  • Sleep / Wakeup power state transitions
  • Retention register candidate list
  • Analog/Sensor IO voltage interface requirements

๐Ÿ“ What the CDC/UPF Team Produces

  • Validated UPF 3.0 / IEEE 1801 power intent file
  • CDC verification signoff report (0 unsynchronized nets)
  • RDC verification signoff report (glitch-free resets)
  • Verified 2-FF, MUX-recirculating & FIFO sync modules
  • Isolation & level-shifter cell insertion rules
  • Power State Table (PST) covering all operational modes

Files Flow: Stage 02a Inputs & Outputs

๐Ÿ“ฅ INPUTS
picorv32_top.v
Multi-clock, synthesizable Verilog source code from Stage 02
From: Stage 02 RTL Design
constraints.sdc
Clock definitions, false paths, and asynchronous clock group declarations
From: Stage 01 System Spec
power_intent_draft.upf
Initial power domains, supply nets, and sleep-mode switch declarations
From: Stage 01 Architect
โš™๏ธ STAGE 02a PROCESS
โ‘  Clock Domain Identification
โ‘ก Structural CDC Path Tracing
โ‘ข Synchronizer Topology Verification
โ‘ฃ UPF Power Domain & PST Definition
โ‘ค Isolation & Level-Shifter Rules
โ‘ฅ Power-Aware Static/Dynamic Sign-off
โ†“
๐Ÿ“ค OUTPUT FILES
picorv32_power.upf
Validated IEEE 1801 UPF defining power domains, isolation strategies, and level shifters
โ†’ Used by: Synthesis, Physical Design, STA
sync_cells.v
Synthesizable CDC synchronizers with ASYNC_REG attributes to protect against tool optimization
โ†’ Used by: Synthesis & Physical Placement
power_state_table.csv
Formal power state table mapping supply voltage combinations for Active, Standby & Deep-Sleep
โ†’ Used by: Synthesis, Simulation, STA
๐Ÿ“Š REPORTS / SIGNOFF
cdc_signoff.rpt
Zero unsynchronized crossings, 100% Gray-code pointer verification, 0 data-loss risks
Signoff: CDC Specialist
upf_lint_signoff.rpt
Formal proof that all power domain boundaries have valid isolation & level-shifter coverage
Signoff: Low-Power Architect

PicoRV32 on SKY130: CDC Synchronizers & UPF 3.0 Intent

๐Ÿ”ฌ OPEN-SOURCE PROJECT
ProjectPicoRV32 โ€” Multi-Clock / Multi-Power Domain Config
Clockssys_clk (50 MHz), rtc_clk (32.768 kHz), uart_clk (1.84 MHz)
PDKSkyWater SKY130 (sky130_fd_sc_hd) โ€” 1.8V / 1.2V
Power ModesACTIVE (1.2V), STANDBY (Gated), DEEP_SLEEP (AON only)
STEP 1

Hardened 2-FF Synchronizer (sync_2ff.v)

// sync_2ff.v - 2-Stage Flip-Flop Synchronizer for Single-Bit CDC
(* dont_touch = "true" *)
module sync_2ff (
    input  wire clk_dest,      // Destination clock domain (e.g., 50 MHz sys_clk)
    input  wire rst_n,         // Destination active-low reset
    input  wire async_in,      // Asynchronous input from source clock domain
    output wire sync_out       // Synchronized output in destination domain
);
    (* ASYNC_REG = "TRUE" *) reg stage1_reg;
    (* ASYNC_REG = "TRUE" *) reg stage2_reg;

    always @(posedge clk_dest or negedge rst_n) begin
        if (!rst_n) begin
            stage1_reg <= 1'b0;
            stage2_reg <= 1'b0;
        end else begin
            stage1_reg <= async_in;    // First flop: captures input (may go metastable)
            stage2_reg <= stage1_reg;  // Second flop: samples resolved stable level
        end
    end
    assign sync_out = stage2_reg;
endmodule
STEP 2

UPF 3.0 Power Specification (picorv32_power.upf)

## picorv32_power.upf - IEEE 1801 Power Intent Specification
upf_version 3.0

# 1. Create Power Domains
create_power_domain pd_top -include_scope
create_power_domain pd_aon  -elements {u_pmu u_rtc}
create_power_domain pd_core -elements {u_picorv32_cpu u_sram_2kb}

# 2. Supply Ports and Nets
create_supply_port VDD_AON -direction in
create_supply_port VDD_CORE -direction in
create_supply_port VSS -direction in

create_supply_net VDD_AON  -domain pd_aon
create_supply_net VDD_CORE -domain pd_core
create_supply_net VSS      -domain pd_top -reuse

# 3. Isolation Strategy: Clamp core outputs to 0 when core is powered off
set_isolation core_iso \
    -domain pd_core \
    -isolation_power_net VDD_AON \
    -isolation_ground_net VSS \
    -clamp_value 0 \
    -applies_to outputs

# 4. Level Shifter Strategy: Translate 1.8V IO to 1.2V Core
set_level_shifter io_to_core_ls \
    -domain pd_core \
    -applies_to inputs \
    -rule both \
    -location to
STEP 3

CDC & UPF Lint Verification Report (cdc_summary.rpt)

=== CDC & UPF Structural Signoff Report: PicoRV32 ===
Design Top : picorv32_top
Clocks     : sys_clk (50MHz), rtc_clk (32.768kHz), uart_clk (1.8432MHz)

--- CDC Domain Crossing Matrix ---
Total Signal Crossings Identified : 48
  [PASS] Single-bit control signals : 32 (Synchronized via sync_2ff)
  [PASS] Multi-bit data buses       : 12 (Synchronized via Async FIFO + Gray code)
  [PASS] Reset crossings            :  4 (Deassertion synchronizers verified)
  [FAIL] Unsynchronized violations  :  0  โœ“

--- UPF Power Intent Structural Verification ---
Power Domains Configured : 3 (pd_top, pd_aon, pd_core)
Isolation Strategies      : 1 (142 output ports protected, clamp=0)
Level Shifter Strategies  : 1 (32 IO-to-Core ports protected)
Retention Registers       : 8 (CPU state preserved during DEEP_SLEEP)
Missing Isolation Cells   : 0  โœ“
Power State Table Status  : CONSISTENT (ACTIVE, STANDBY, DEEP_SLEEP)
STATUS: STAGE 02a CDC & UPF SIGNOFF COMPLETE - PASS

Tools Used in CDC & UPF Stage

Cross-domain verification requires specialized structural analysis engines to identify asynchronous paths and power domain interfaces before synthesis.

Task๐Ÿญ Synopsys๐Ÿ”ท Cadence๐ŸŸง Siemens EDA๐Ÿ”“ Open-Source
Clock Domain Crossing (CDC) AnalysisSynopsys SpyGlass CDCCadence Conformal CDCSiemens Questa CDCVerilator CDC Rules ยท SVA Assertions
Reset Domain Crossing (RDC) VerificationSynopsys SpyGlass RDCCadence JasperGold RDCSiemens Questa RDCCustom SVA Reset Assertions
UPF / Low-Power Static Rule CheckingSynopsys VC LP (Low Power)Cadence Conformal Low PowerSiemens Questa Power AwarePyUPF ยท Custom UPF Parsers
Power-Aware Dynamic RTL SimulationSynopsys VCS NLP (Native LP)Cadence Xcelium LPSiemens QuestaSim PAIcarus Verilog + VPI Power Mock
RTL Power Profiling & Activity MappingSynopsys PrimePower RTLCadence Joules RTL PowerSiemens PowerPropyVCD ยท RTL Power Estimators