Protocol bugs cluster where the two sides disagree about pace: the producer stalls, the consumer applies back-pressure, or the rate ratio sits at its most awkward corner. A test plan that only runs smooth, matched-rate traffic will miss all of them. Stress scenarios plus a coverage checklist turn pace disagreement from an accident into a planned exercise.
Scenario | What it does | What it exposes |
|---|---|---|
Producer stall mid-burst | Source stops offering for a random stretch, then resumes | Handshake hangs, FIFO drains, almost-empty handling |
Consumer back-pressure | Destination refuses transfers (ready low, rinc off) for long spells | Full handling, producer overflow, almost-full reaction time |
Rate mismatch extremes | Fast-to-slow and slow-to-fast at the worst supported ratio | Lost pulses, flag latency, throughput shortfall |
Reset mid-transfer | One or both resets asserted with req high or the FIFO part-full | Stuck handshake, half-reset pointers |
Back-to-back minimum-gap events | Pulses at exactly the stated minimum spacing | Spacing guard off-by-one errors |
Clock phase drift | Nearly equal frequencies so alignment sweeps all phases | Phase-dependent sampling bugs |
Cover | Sign-off criterion |
|---|---|
Every protocol state and transition | Each handshake state visited, each FIFO flag asserted at least once |
Full and empty reached | FIFO genuinely full and genuinely empty during the run, not just nearly |
Minimum-gap traffic | Events at the minimum spacing, plus one deliberately shorter (negative test) |
Stall and back-pressure durations | Stalls longer than the deepest pipeline plus synchroniser latency |
Reset during activity | Reset asserted in each protocol phase, recovery checked |
Mutation sensitivity | A deliberately broken variant (binary pointers, unstable data, short hold) fails the same plan |
Reset during an active transfer in each phase: stuck req or ack, and the recovery sequence back to the idle state on both sides.