Answer each question out loud before opening it. If you miss more than three in the checkpoint, revisit the lessons linked at the end.
Specification, corner case and boundary, concurrency and race, integration, configuration and mode, performance and fairness, reset/clock/power, error handling; each hides in a different place and needs a different technique.
Treat it as something to verify: writing checks forces precision, independent readings disagree, and every question is filed and answered in writing; validation catches specifications that are precise but wrong.
At full, empty, wrap-around and simultaneous push and pop at each limit.
A counter that treats push and pop in the same cycle as a push, drifting under streaming traffic.
Each block is tested against stand-ins encoding the verifier's assumptions about its neighbours.
Randomise run-time setup, cover configuration values and pairs, choose parameter builds with a covering array, and test every shipped configuration.
Specify throughput, latency and fairness; drive saturating traffic; measure and assert the numbers.
Reset and X problems, clock-domain crossings, and power-state behaviour without power-aware simulation.
Task. A new block is a 4-port, 2-priority arbiter with a credit-based output, a register block and a sleep mode. List the bug classes it can contain, where each would hide in this block, and the technique you would use for each.
Corner cases: credits at zero and at maximum, pointer wrap, longest request burst; biased random plus formal on the credit counter. Concurrency: grant in the same cycle as release, credit return with a send, request arriving as it sleeps; random timing and back-pressure, cross coverage, formal. Configuration: priority enabled and disabled, ports disabled; randomised register setup and configuration coverage. Performance: starvation of a low-priority or high-numbered requester, credit leaks; fairness and throughput monitors, bounded-wait assertions. Registers: reset values, counters, clear behaviour; directed register tests. Reset: initial credits and pointers; reset-value checks and reset mid-traffic. Low power: sleep with a grant in flight, wake from every input, credits during sleep; idle-and-wake scenarios with power-aware simulation. Specification: what fairness means exactly, behaviour of a disabled requester mid-request; questions filed before tests are written.
Performance and fairness.
Wrong, ambiguous, incomplete, contradictory.
It never filled the FIFO, so the off-by-one full comparison never mattered.
4, although the FIFO was empty.
Behaviour as aggressive as the specification allows, not the polite behaviour of one real neighbour.
16 (an orthogonal array), against 256 for every combination.
90%; requesters 2 and 3 got nothing.
It does not model metastability; crossings need structural CDC analysis.
Novelty, complexity, change, boundaries and history.
Three; DCRouter sleeps only after 8 idle cycles.