Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • RTL Foundations36
  • Combinational Design25
  • Sequential Design27
  • FSM & Control27
  • Timing & Clocking39
  • Reset & CDC34
  • Memory & Buses57
  • Advanced RTL28
  • Senior & Interview76
    • Low-Power RTL Hub
      • Clock gating done right
      • Safe gating style
      • Power domains, isolation and retention
      • UPF intent every RTL lead should know
    • DFT and Scan Hub
    • Physical Awareness Hub
    • Waveform Debug Hub
    • STA and ECO Hub
    • RTL-to-Implementation Closure
    • DFT-Ready RTL
    • Capstone: Resilient Streaming Peripheral
    • Principal Design Review
    • Senior RTL Interview Questions & Model Answers
  • Glossary and Notation
Loading lesson

‹Low-Power RTL Hub
  1. Topics
  2. RTL Design
  3. Senior & Interview
  4. Low-Power RTL Hub
  5. UPF intent every RTL lead should know

Part 9 · Senior · Senior

UPF intent every RTL lead should know

UPF power intent for domains, isolation, and retention, with the RTL duties behind each line.

On this page

    Why this matters

    If the RTL does not expose domain boundaries, isolation enables and save and restore controls, the UPF cannot wire them. Capture the context after isolating and it saves the clamp constants instead of the data.

    After this lesson you can: list the hooks RTL owes the power intent, keep the save, isolate and restore order, and say what the UPF decides instead.

    RTL stays clean, intent lives in UPF

    UPF externalizes power intent: domains, switches, isolation, retention, and state tables. RTL should remain clean while UPF captures implementation policy.

    The RTL job is to expose the hooks: domain boundaries, isolation enables, and save and restore controls. The UPF job is to say how tools wire them.

    The control order RTL must keep

    Tools insert the cells, but RTL drives the sequence. For external context capture, save state before isolating its capture path, then allow power-down. On wake, keep isolation asserted until power, restore and reset/clock readiness complete; release it before resuming traffic.

    The controller below emits one save pulse, holds isolation through the off state, waits for power-good on wake, emits one restore pulse, and keeps isolation asserted until restore and domain readiness are acknowledged. Status inputs must already be synchronized into the always-on clock domain. pwr_ack_o indicates permission to remain powered off, not measured rail status; the power-switch controller returns pwr_good_i. This example assumes traffic was quiesced before req_off_i, and context capture completes within the save cycle.

    Each slot is one clock cycle, numbered from 0, and shows the values the next rising edge will see. restore_done_i and domain_ready_i are not drawn; both rise in slot 9.

    • Slots 1 and 2: req_off_i rises and the controller emits a one-cycle save_o. Isolation is still off, so the capture path sees real data.

    • Slots 3 and 4: iso_en_o rises first. Only then does pwr_good_i fall in slot 4, so no unclamped output is ever exposed to the dying rail.

    • Slots 5 to 7: the wake request ends req_off_i, but iso_en_o stays high while the controller waits for pwr_good_i, which returns in slot 7.

    • Slots 8 to 10: one restore_o pulse in slot 8, then isolation is released last, in slot 10, after the restore and readiness inputs have arrived.

    Warning

    This is a sequencing model, not a complete power-management unit. Reset starts in ON and assumes the domain is powered and initialized. Power-good must remain stable through restore and operation; brownout recovery is outside this example. Clear restore/readiness acknowledgements for each new power cycle, and hold them until the controller observes them. Production hardware also needs characterized cells, save/restore timing checks, isolation-control timing and power-aware verification.

    What the intent declares

    The sketch below is conceptual; tool syntax varies. Each line maps to an RTL duty in the table that follows.

    Diagram
    # Conceptual UPF sketch (tool syntax varies)
    create_power_domain PD_AON -elements {top/aon_ctrl}
    create_power_domain PD_ACCEL -elements {top/accel}
    
    create_supply_net VDD_AON
    create_supply_net VDD_SW
    
    set_isolation ISO_ACCEL_OUT -domain PD_ACCEL -applies_to outputs -isolation_signal top/aon_ctrl/iso_en -clamp_value 0
    
    set_retention RET_ACCEL_CTX -domain PD_ACCEL -retention_power_net VDD_AON -save_signal top/aon_ctrl/save_ctx -restore_signal top/aon_ctrl/restore_ctx

    UPF line

    Meaning

    RTL duty

    create_power_domain

    Which instances die together

    Hierarchy that matches the power regions

    set_isolation

    Which crossings clamp and to what

    A stable iso_en with the right clamp value

    set_retention

    Which state survives collapse

    Save and restore controls plus the retained register list

    Supply and switch rules

    Which rail feeds each domain

    Separate always-on and switchable resets and clocks

    Common mistakes

    Common pitfall

    External context capture across an isolated boundary can save clamp constants if isolation is asserted first. Internal retention cells instead save internal state and need not observe those clamps. Derive save/isolation ordering from the actual capture path and cell protocol. Both mechanisms must finish saving before the relevant supply collapses.

    Interview

    Likely question: “What does RTL owe UPF on a new block.”

    • Boundary list of every signal crossing a power domain.

    • Clamp choice per crossing, derived from its protocol and reset/retention contract.

    • Save and restore controls whose pulse or level protocol, timing and sense match the chosen retention cell and the UPF strategy (this controller uses one-cycle pulses).

    Check yourself UPF selects an existing RTL register for retention, but there is no separate retained-register annotation in RTL. Is retention necessarily missing?

    No. UPF can select the register directly; duplicate RTL bookkeeping is not a language requirement. Confirm the element resolves in the elaborated hierarchy, belongs to the intended strategy, maps to a supported retention cell with live supplies, and obeys save/restore timing. Missing or incorrect UPF selection is the real failure to diagnose.

    Check yourself Does isolation always prevent retention save?

    No. External capture through an isolated output would see the clamp, whereas an internal retention cell saves local state. The required ordering depends on that topology; the controller here assumes external context capture before isolation.

    Testbench

    An always-on controller with the save, isolate, and restore order, plus the testbench that checks each pulse.

    aon_ctrl.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    `timescale 1ns/1ps
    module aon_ctrl (
      input logic clk_aon, rst_aon_n, req_off_i,
      input logic pwr_good_i, restore_done_i, domain_ready_i,
      output logic save_o, iso_en_o, restore_o, pwr_ack_o
    );
      localparam logic [2:0] ST_ON = 3'd0, ST_SAVE = 3'd1, ST_OFF = 3'd2,
                             ST_POWERUP = 3'd3, ST_RESTORE = 3'd4, ST_WAIT_READY = 3'd5;
      logic [2:0] st, nxt;
      always_ff @(posedge clk_aon or negedge rst_aon_n) begin
        if (!rst_aon_n) st <= ST_ON;
        else st <= nxt;
      end
      always_comb begin
        nxt = st; save_o = 1'b0; iso_en_o = 1'b0; restore_o = 1'b0; pwr_ack_o = 1'b0;
        case (st)
          ST_ON: if (req_off_i) nxt = ST_SAVE;
          ST_SAVE: begin save_o = 1'b1; nxt = ST_OFF; end
          ST_OFF: begin iso_en_o = 1'b1; pwr_ack_o = 1'b1; if (!req_off_i) nxt = ST_POWERUP; end
          ST_POWERUP: begin iso_en_o = 1'b1; if (pwr_good_i) nxt = ST_RESTORE; end
          ST_RESTORE: begin iso_en_o = 1'b1; restore_o = 1'b1; nxt = ST_WAIT_READY; end
          ST_WAIT_READY: begin
            iso_en_o = 1'b1;
            if (pwr_good_i && restore_done_i && domain_ready_i) nxt = ST_ON;
          end
          default: begin iso_en_o = 1'b1; nxt = ST_POWERUP; end
        endcase
      end
    endmodule
    

    Remember

    • UPF holds policy (domains, switches, isolation, retention, state tables); RTL stays clean and exposes the hooks.

    • For external capture, save before isolating; on wake, keep isolation on until restore and readiness are done.

    • Internal retention cells save local state and need not see the clamps.

    Rule of thumb: the tools insert the cells, but RTL drives the sequence.

    Keep going

    • Practice: Integrating UPF constraints in RTL design

    • Practice: Power-gating controller: retention save and restore, isolation, safe sequencing

    • Code lab: UPF strategy stub

    • Interview: run a mock interview on this topic

    Related topics

    • Power domains, isolation and retention

    Previous

    277 / 350

    Next: DFT and Scan Hub

    Up next

    Up nextDFT and Scan Hub

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Clock gating done right
    • Safe gating style
    clkreq_offsaveiso_enpwr_goodrestore
    One power-off and wake cycle: save pulse, isolation on, rail drops, rail returns, restore pulse, isolation released last