Work any reset failure top to bottom. Each step either clears a class of cause or produces the evidence the next step needs. Most failures resolve by step 4; steps 5 and 6 are for the ones that survive correct structure.
Step | Action | Clears / produces |
|---|---|---|
1. Read the symptom | Match it against the symptoms table; name the class: reach, order, timing, over-clearing, or protocol | Halves the search before any waveform |
2. Trace the reset nets | From the failing flops back to each reset source: synchroniser present, no combinational logic, live domain | Structural bugs: missing synchroniser, gated net, dead source |
3. Check release order | Sequencer order and ready flags for the pair involved; test the adversarial order | Ordering bugs and unproven harmlessness claims |
4. Sweep the release instant | Release at many points across the cycle; check for instant-dependent failure | Recovery/removal violations and glitchy paths |
5. Check the reset scope | Cleared-versus-preserved list per reset kind against the spec; both halves of each protocol | Partial resets and warm-reset over-clearing |
6. Close the loop | Fix, waive with evidence, or sequence; re-run the reproducing test plus the adversarial variants | A fix that holds beyond the nominal case |
Keep the evidence from each step: the traced nets, the sequencer order, the sweep results, the scope table. A reset fix without the sweep result is a guess that the next boot may disprove; the checklist's job is to make “it passed once” an unacceptable stopping point.
Step 6's adversarial variants: sweep the release instant, reset one side only, and release in the wrong order. A single nominal pass does not close a reset bug.