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
    • Reset Architecture
    • Metastability and Synchronisation
    • Asynchronous FIFO
    • CDC Protocols
    • Reset Domain Crossing
      • RDC Is CDC Plus Reset Asymmetry
      • Reset Isolation Pattern
      • Quiescent State Before Reset Release
      • RDC Signoff Checklist
      • Recovery, Removal and Verification Focus
    • CDC Verification
  • Memory & Buses57
  • Advanced RTL28
  • Senior & Interview76
  • Glossary and Notation
Loading lesson

‹Reset Domain Crossing
  1. Topics
  2. RTL Design
  3. Reset & CDC
  4. Reset Domain Crossing
  5. Recovery, Removal and Verification Focus

Part 6 · Reset & CDC · Intermediate

Recovery, Removal and Verification Focus

Recovery and removal windows, a reset synchroniser experiment, and verification priorities.

On this page

    Why this matters

    An asynchronous reset release behaves like a data input. In 2,000 random releases, 95 raw ones (about 4.75 %) landed in a forbidden window and the synchronised ones had none, and one bad release causes chip-wide failures.

    After this lesson you can: explain recovery and removal in one sentence each, say what the reset synchroniser does for them, and describe a test for reset ordering.

    Two windows

    An asynchronous reset behaves, at its release, like a data input: it must not change too close to the clock edge.

    Check

    Meaning

    Analogy

    Recovery

    Reset must be released at least t_rec before the next active clock edge

    Setup

    Removal

    Reset must stay asserted at least t_rem after the previous active clock edge

    Hold

    One 10 ns clock period with the removal window (0.15 ns after an edge) and the recovery window (0.30 ns before the next edge) shaded: a reset release must land in the gap between them

    Read the picture as a single clock period, drawn to scale. The shaded strips are the only places where a release is unsafe.

    • Removal is the hold-like window: the reset must still be asserted 0.15 ns after the edge, so a release inside the first strip is too soon.

    • Recovery is the setup-like window: the reset must be released 0.30 ns before the next edge, so a release inside the last strip is too late.

    • The two strips are narrow, about 4.5 % of the cycle together, which matches the roughly 4.75 % violation rate measured below for an unsynchronised release.

    • The synchroniser moves the release to 0.3 ns after the edge. That clears the 0.15 ns removal window and leaves the rest of the cycle for recovery.

    STA checks both windows for every flop with an asynchronous reset. It uses the flop clock and the reset release arrival time.

    A raw asynchronous release may meet a particular window by chance, but cannot guarantee recovery/removal across arbitrary phases. A reset synchronizer aligns nominal release with the destination clock; its clock-to-Q, distribution, skew and endpoint recovery/removal requirements still need STA across the required corners.

    Where to put verification effort

    Risk

    Check

    Release timing

    STA recovery/removal at all corners; the synchroniser structure

    One-sided reset effects

    Randomised reset tests on every crossing

    Ordering

    Reset sequencer assertions and tests

    Reset in test mode

    Scan reset controllability: reset must be overridable in test mode

    Power-up state

    Gate-level simulation with X propagation and reset checks

    Common pitfall

    Gate-level and RTL simulations without X propagation can hide missing resets: a flop that is never reset starts at 0 in a simulator that initialises variables, and at a random value in silicon. Run X-pessimistic or randomised-initial-value simulations on the control state.

    Interview

    Be ready to explain recovery and removal in one sentence each, say what the reset synchroniser does for them, and describe a test you would write for reset ordering.

    Check yourself The measured violation rate of the raw reset is about 4.75 %. Why is this close to (t_rec + t_rem) / T?

    Because a release at a uniformly random time in the cycle falls in one of the two forbidden windows with probability equal to their total width divided by the period.

    Testbench

    Raw and synchronised reset releases compared over 2,000 random trials.

    rff.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
    30
    31
    32
    33
    `timescale 1ns/1ps
    
    // A flip-flop with an asynchronous reset and recovery/removal checks:
    //   recovery: reset must be released at least TREC BEFORE the next clock edge
    //   removal : reset must stay asserted at least TREM AFTER the previous clock edge
    // A release that violates either window leaves the flop in an unknown state (here: random).
    module rff #(parameter real TREC = 0.30, TREM = 0.15) (
      input  logic clk, arst_n, d,
      output logic q,
      output int   violations
    );
      realtime t_clk = -100.0, t_rel = -100.0;
      initial begin q = 1'b0; violations = 0; end
    
      always @(negedge arst_n) q <= 1'b0;                              // assertion: asynchronous, immediate
      always @(posedge arst_n) begin
        t_rel = $realtime;
        if ($realtime - t_clk < TREM) begin violations++; q <= $urandom_range(0, 1); end   // released too soon after an edge
      end
      always @(posedge clk) begin
        t_clk = $realtime;
        if (arst_n === 1'b0) q <= 1'b0;
        else if ($realtime - t_rel < TREC) begin violations++; q <= $urandom_range(0, 1); end   // released too close before this edge
        else q <= d;
      end
    endmodule
    
    module reset_sync (input logic clk, arst_n, output logic srst_n);
      logic r1;
      always_ff @(posedge clk or negedge arst_n)
        if (!arst_n) begin r1 <= 1'b0; srst_n <= 1'b0; end
        else         begin r1 <= 1'b1; srst_n <= #0.3 r1;  end      // 0.3 ns clock-to-Q: the release lands after the edge
    endmodule
    

    Release path

    Violations in 2,000 random releases

    Straight from the asynchronous source

    95 (about 4.75 %, close to (0.30 + 0.15) / 10 = 4.5 %: the share of the 10 ns cycle covered by the two windows)

    Through the reset synchroniser

    0

    Zero synchronised violations follows from the chosen 0.3 ns output delay against this model's 0.15 ns removal window and 10 ns period. Real release analysis includes characterized cells, local clock/reset arrival, pulse width, recovery/removal and implemented reset-tree skew.

    One mis-timed release can then cause chip-wide, hard-to-reproduce failures.

    Remember

    • Removal is the hold-like window: reset must stay asserted for a short time after the edge. Recovery is the setup-like window: reset must release before the next edge.

    • The two windows are narrow, here about 4.5 % of a 10 ns cycle together. The synchroniser moves the release clear of removal.

    • STA checks both windows for every flop with an asynchronous reset, across the required corners.

    Rule of thumb: a raw asynchronous release may meet the windows by chance; it cannot guarantee it.

    How this was checked

    The results table is from the listing above, run with Icarus Verilog 13.0 (2026-10-16). Zero synchronised violations follows the chosen 0.3 ns output delay relative to this model's 0.15 ns removal and 10 ns period; it is not an all-corners physical guarantee. A violation is represented by a random logic value, not analog resolution.

    Keep going

    • Practice: Debugging metastability from asynchronous reset deassertion

    • Interview: run a mock interview on this topic

    Related topics

    • Next: CDC verification

    Previous

    181 / 350

    Next: CDC Verification

    Up next

    Up nextCDC Verification

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • RDC Is CDC Plus Reset Asymmetry
    • Reset Isolation Pattern
    • Quiescent State Before Reset Release