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. Assertion Versus Release

Part 4 · Beyond Setup and Hold · All levels

Assertion Versus Release

Assertion acts at once and needs no clock; release is timed. The waveform shows both on one counter.

On this page

    Why it matters

    A common question is why STA checks only one edge of the reset. The answer lies in what each edge does to the flop. Assertion forces the output to its reset value without involving the clock, so there is no clock relationship to check. Release hands control back to the clock, and the first edge that follows must be a clean one.

    The waveform below is simulation output of a 3-bit counter with an asynchronous active-low reset. One lane slot is one tick of a sampling clock; the clock lane is drawn from the real clock.

    How to read it: the clock rises at slots 3, 11, 19, 27, 35, 43 and so on. The reset is released at slot 5, after the first edge, so the counter holds 0 through that edge and starts counting at the next, with 1 at slot 11, 2 at slot 19 and 3 at slot 27. At slot 29 reset falls while the clock is high, between two rising edges, and the counter returns to 0 in the same slot: assertion needs no edge. The reset is released again at slot 45; the counter stays at 0 through the edges at slots 35 and 43, and takes its first count at the edge in slot 51. The simulation uses ideal flops, so it cannot show a recovery violation; it shows the intended behaviour that the timing checks protect.

    What is checked on each edge

    Reset edge

    Effect on the flop

    Timing check

    Assertion

    Output forced to the reset value immediately

    None against the clock; minimum pulse width of the reset may apply (see the pulse width topic)

    Release

    Flop rejoins normal clocked operation

    Recovery and removal against the clock edge

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # A reset released at time r: the flop's first counting edge is the first edge >= r + recovery.
    T, rec = 8.0, 0.25
    edges = [k * T + 4.0 for k in range(8)]           # rising edges at 4, 12, 20, ...
    def first_count_edge(release):
        return next(e for e in edges if e >= release + rec)
    assert first_count_edge(5.0) == 12.0               # released 1 ns after the edge at 4
    assert first_count_edge(11.85) == 20.0             # inside the recovery window before 12: the edge is missed
    assert first_count_edge(11.75) == 12.0             # released exactly 0.25 ns before: the edge is taken
    print("PASS: first counting edges", first_count_edge(5.0), first_count_edge(11.85), first_count_edge(11.75))

    The last two lines show the sensitivity: moving the release by 0.1 ns changes which edge the flop uses. In silicon, inside the window the result may be either, or metastable, which is why the checks forbid the window.

    Common pitfall

    Assuming that asynchronous assertion means asynchronous everything. The design is safe only if the release is synchronised to the clock; the reset synchroniser exists to make the release meet recovery and removal.

    Interview

    Answer the classic question briefly: assert asynchronously so the design resets without a clock, release synchronously so recovery and removal are met.

    Check yourself Why does the counter in the waveform stay at 0 at slot 35 even though the reset was released at slot 5?

    Slot 35 is after the second assertion at slot 29. The release at slot 45 comes later, so the edges at slots 35 and 43 happen while reset is still asserted and the counter is held at 0.

    Related topics

    • Reset Tree Timing

    • Next: Recovery and Removal Signoff

    • Reset Synchroniser Structure

    Previous

    68 / 183

    Next: Recovery and Removal Signoff

    Up next

    Up nextRecovery and Removal Signoff

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Recovery and Removal Model
    clkrst_ncnt01230123
    Simulation output: counter with asynchronous reset, released after a clock edge and asserted in the middle of a cycle