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
  • CDC/RDC Glossary
  • CDC/RDC Metrics Reference
  • CDC/RDC Interview Prep
  • CDC/RDC Signoff Cheatsheet
  • Clock Domains and Failure Modes8
  • Metastability and Synchronizers16
  • CDC Protocols and Handshakes16
  • Reconvergence and Gray Coding16
  • Reset Domain Crossing16
  • Architecture and Design Rules16
  • CDC Signoff Methodology24
  • RDC Signoff16
  • Debug and Case Studies11
    • Reading a CDC Report
    • Classic Bug Anatomy
      • Lost Pulse Bug
      • Torn Bus Bug
      • FIFO Pointer Bug
      • Reset Release Bug
    • Case Studies
  • CDC and RDC Interview Prep30
  • Capstone: Sign Off a Multi-clock Peripheral4
Loading lesson

‹Classic Bug Anatomy
  1. Topics
  2. CDC & RDC
  3. Debug and Case Studies
  4. Classic Bug Anatomy
  5. Reset Release Bug

Part 9 · Debug and Case Studies · Advanced

Reset Release Bug

First-transaction corruption after reset: release landing near a clock edge, or domains released in the wrong order.

On this page

    The symptom is corruption with a clock: the first transaction after reset misbehaves, occasionally or on some boards only, and everything afterwards runs cleanly. Engineers chase the transaction logic for weeks because the bug never reappears once the system is up. The cause left the station one cycle after reset released.

    The two mechanisms

    First, release timing: an asynchronously asserted reset that deasserts near a destination clock edge violates the recovery and removal needs of the release flops, so some flops leave reset a cycle later than others and the domain wakes into a half-reset state. The deassertion-hazards lesson shows this shape, and the reset-synchroniser lesson gives the structure that prevents it: release synchronised through a chain in each destination clock. Second, release ordering: domains released in an order the design does not tolerate, for example a consumer released before the producer driving its inputs, so the first transaction samples uninitialised or pre-reset values. The release-order lesson states the discipline.

    Recognising it in debug

    Suspect release when the failure is confined to the window just after reset and never recurs without a fresh reset. Confirm timing versus ordering by staggering the releases in the testbench: if delaying one domain's release moves or removes the failure, the order matters; if the failure follows one domain regardless of order, suspect that domain's release synchronisation. A waveform of the release edge against the destination clock settles timing questions directly: release transitions inside the recovery window are guilty on sight.

    The finding that would have caught it

    Structural RDC analysis reports unsynchronised deassertion and ordering violations as its own classes, and the debug playbook of the reset section maps symptoms to these causes. As with tearing, ask whether the finding was absent or waived: a missing reset definition hides every release in that domain, and a waived ordering finding without a release-sequence proof is the waiver process failing.

    Fix and regression guard

    Fix timing with a reset synchroniser per destination clock and no logic that can glitch the release path; fix ordering with a sequenced release the design documents and owns. The guard is reset-aware simulation with staggered and skewed releases in regression, plus reset coverage that proves every domain was released last, first, and simultaneously against every other. A testbench that releases all resets together on one edge tests exactly one of those combinations.

    Common pitfall

    Synchronising the reset in only one domain while a second domain takes the raw release repeats the bug one domain over. Every destination clock needs its own release chain, and the review counts chains against clocks, not against resets.

    Check yourself Corruption appears only in the first transaction after reset and never again until the next reset. Why does that point at release rather than at the transaction logic?

    Transaction logic would fail on later transactions too. A fault confined to the post-reset window implicates the state the design woke in: release timing or ordering.

    Check yourself Delaying domain B's release by ten cycles removes the failure. Timing or ordering?

    Ordering: the failure depends on the relative release sequence, not on one edge landing near one clock. The design needs a documented release order, not just synchronised releases.

    Related topics

    • Deassertion Hazards

    • Release Order Across Domains

    • Symptoms to Causes

    Previous

    142 / 179

    Next: Case Studies

    Up next

    Up nextCase Studies

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Lost Pulse Bug
    • Torn Bus Bug