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

  • How to Use This Course
  • Reading Path
  • STA Glossary
  • STA Metrics Reference
  • STA Mastery Cheatsheet
  • Timing Paths and Checks16
  • Constraints & SDC Fundamentals20
  • Delay Graph & Path Analysis16
  • Beyond Setup and Hold16
    • Latches and Time Borrowing
    • Clock Gating Checks
    • Recovery, Removal and Async
      • Recovery and Removal Model
      • Reset Tree Timing
      • Assertion Versus Release
      • Recovery and Removal Signoff
    • Pulse Width and Min Period
  • Multi-Corner Multi-Mode Signoff16
  • OCV, AOCV, POCV and Variation16
  • Crosstalk and Noise16
  • ECO and Closure16
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹Recovery, Removal and Async
  1. Topics
  2. Static Timing Analysis
  3. Beyond Setup and Hold
  4. Recovery, Removal and Async
  5. Recovery and Removal Model

Part 4 · Beyond Setup and Hold · All levels

Recovery and Removal Model

Recovery is the minimum time the release must arrive before a clock edge; removal is the minimum time it must stay after the edge that precedes it.

On this page

    Why it matters

    A flop with an asynchronous reset has a reset pin whose deasserting edge acts like a data input for one purpose: it decides whether the next clock edge is a normal one. If the release lands in a window around a clock edge, the outcome is not defined. Recovery and removal define that window.

    The model

    Check

    Reference

    Rule

    Resembles

    Recovery

    The next clock edge after the release

    Release must arrive at least the recovery time before that edge

    Setup

    Removal

    The clock edge at or just before the release

    Release must arrive at least the removal time after that edge

    Hold

    Diagram
    recovery slack = (capture edge - recovery time + capture latency) - (launch edge + launch latency + max arrival of the release)
    removal slack  = (launch edge + launch latency + min arrival of the release) - (same edge + capture latency + removal time)
    arrival of the release = clock-to-Q (or input delay) + reset network delay
    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # Release launched by a rising-edge flop at t=0 (period 10, ideal clocks, latency 0). Illustrative numbers, ns.
    T, rec, rem = 10.0, 0.20, 0.15
    cq_max, cq_min = 0.45, 0.35
    net_max, net_min = 3.10, 1.80
    arr_max, arr_min = cq_max + net_max, cq_min + net_min          # 3.55 and 2.15
    rec_slack = (T - rec) - arr_max
    rem_slack = arr_min - rem
    assert abs(rec_slack - 6.25) < 1e-9 and abs(rem_slack - 2.00) < 1e-9
    # a release whose launch clock is later than the capture clock (skew) can fail removal
    launch_lat, cap_lat = 0.50, 0.90
    arr_min2 = launch_lat + 0.35 + 0.05                              # very short reset path: 0.90
    rem_slack2 = arr_min2 - (cap_lat + rem)
    assert abs(rem_slack2 - (-0.15)) < 1e-9
    fixed = (arr_min2 + 0.20) - (cap_lat + rem)                      # add 0.20 ns of delay on the short path
    assert abs(fixed - 0.05) < 1e-9
    print("PASS: recovery", round(rec_slack, 2), "removal", round(rem_slack, 2), "short-path removal", round(rem_slack2, 2), "after fix", round(fixed, 2))

    With a 10 ns period the recovery slack is large (6.25 ns) because the release has almost a whole cycle to arrive. The removal slack is what matters when the reset path is short: with a launch clock 0.4 ns earlier than the capture clock and only 0.40 ns of path, the release reaches the flop before the removal requirement is met (-0.15 ns). Adding 0.20 ns of delay on that path restores 0.05 ns of margin, exactly as for a hold fix.

    What the review looks for

    • Recovery and removal checks exist for every flop with an asynchronous reset or set, and none are disabled.

    • Both checks are clean in every corner; in the conventional case removal is worst in the fast corner and recovery in the slow corner, while at low voltage both temperature extremes are checked.

    • The release source is known: a synchroniser flop in the same clock domain, or an input port with a defined input delay.

    Common pitfall

    Reading only the recovery slack because it is the one with large numbers. Removal violations come from short reset paths and clock skew and are easily missed.

    Interview

    Be able to do the arithmetic: recovery slack is the period less recovery less the maximum arrival; removal slack is the minimum arrival less removal.

    Check yourself Why is removal worst in the fast corner?

    In the conventional case removal is a hold-type check: its slack is the difference of the release arrival and the capture clock latency (skew), so it fails when the release arrives too soon relative to the clock, and paths are shortest in the fast corner. At low voltage both temperature extremes are checked.

    Related topics

    • Next: Reset Tree Timing

    • RTL: Setup, Hold and Slack

    Previous

    66 / 183

    Next: Reset Tree Timing

    Up next

    Up nextReset Tree Timing

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Assertion Versus Release
    • Recovery and Removal Signoff