Real interconnects keep many transactions in flight and return them out of order. A scoreboard that expects one global order fails on a correct design; one that accepts any order misses real ordering bugs. This topic builds checkers that encode exactly the ordering the protocol promises, and nothing looser.
WHAT THE PROTOCOL PROMISES WHAT THE CHECKER MUST DO
same ID / same stream -> in order one queue per key, compare the head
different IDs / streams -> any order never compare across keys
every request answered once count per key; drain to zero at the end
reads see accepted writes model updated at the ordering pointLesson | What it covers |
|---|---|
An associative array of queues keyed by ID: in order within an ID, any order across IDs. | |
Routing predictor and per-stream queues for a 2-in, 3-out router; catching a misroute. | |
Issue times, watchdogs and a drain report that names a leaked tag and a hung stream. | |
A sparse byte-level model with strobes, and where to snapshot it when writes are posted. |
A single global FIFO fails on legal cross-ID reordering, so it raises false errors. An any-order search (match the item anywhere) passes a within-ID swap, so it misses real bugs. The right shape is one FIFO per ID.