2026-07-20
Round-robin arbiters are fair, but they don't remember who actually got service — just whose turn is next in a fixed rotation. If a requester keeps dropping out and coming back, round-robin can still favor it over someone who's been waiting longer. A matrix arbiter tracks the full priority order among N requesters and hands the grant to the one that was served least recently. It's the hardware equivalent of an LRU replacement policy, but it fits in a single clock cycle for small N.
The trick is a triangular bit matrix. For N requesters, you keep an N×N array of flip-flops where W[i][j] = 1 means "requester i has higher priority than requester j." Only the upper triangle matters (the lower triangle is its inverse), so you need N(N-1)/2 bits. Two rules:
That single update flips i to the bottom of the priority order. Whoever was above i stays above i; whoever was below i moves above i. On the next cycle, the requester at the "top" of the remaining requesters wins. No counters, no pointer, no starvation.
Concrete example: a 4-port NoC router uses a matrix arbiter to pick which input port drives the crossbar this cycle. Ports 0, 2, and 3 all have packets waiting. The matrix currently says 2 > 3 > 0 > 1 in priority. Port 2 wins. Next cycle the matrix updates so port 2 is now lowest: order becomes 3 > 0 > 1 > 2. If ports 0 and 3 request again, port 3 wins. Port 0 is guaranteed to win within N-1 cycles of any competitor becoming eligible — bounded fairness, not just weak fairness.
Rule of thumb: matrix arbiters cost N(N-1)/2 flip-flops and an N-wide AND per requester, so area is O(N²). They're excellent up to N=8 or so (28 bits, 8-wide ANDs). Beyond N=16 the O(N²) wiring and the wide AND fan-in kill you — switch to hierarchical arbiters (matrix at the top of a tree of round-robins) instead.
The killer feature: unlike round-robin, a requester that goes idle for 100 cycles and comes back keeps its accumulated "I haven't been served" priority. That's exactly what you want for fair bandwidth allocation on a shared bus.
