Round-Robin Arbiters: How Hardware Gives Every Requester a Fair Turn Without Starving Anyone

2026-07-18

When N masters share a resource — a memory port, a bus, a crossbar output — an arbiter picks the winner every cycle. A fixed-priority arbiter is trivial (whoever has the lowest index wins), but it starves low-priority requesters when high-priority ones are always active. A round-robin arbiter fixes this by rotating who gets priority, so every requester is guaranteed service within N cycles.

The naive implementation: keep a pointer p to "who won last time." Next cycle, start scanning from (p+1) mod N and pick the first requester found. Update p to the winner. This works but the mod-N wrap-around is expensive — you need a wide priority encoder that "starts from the middle."

The classic trick: the mask-based round-robin arbiter. Keep an N-bit mask register where bit i is 1 if requester i is eligible this round (i.e., hasn't won yet in the current rotation). Each cycle:

This reduces to two ordinary priority encoders running in parallel plus a mux — much faster than a rotating encoder, and it maps to a clean two-level circuit.

Concrete example: a DRAM controller with 4 requesters (CPU cores 0–3). All four are hammering the memory port. A fixed-priority arbiter would let core 0 monopolize; the tail cores would see infinite latency. A round-robin arbiter guarantees each core one grant per 4 cycles — worst-case latency is bounded at N × T_serve. For a 4-cycle memory access, that's a 16-cycle upper bound on request-to-grant. This bound is what makes the design analyzable for real-time systems.

Rule of thumb: a mask-based round-robin arbiter for N requesters costs roughly the area of a fixed-priority arbiter of the same width. That's the fairness tax, and it's almost always worth paying anywhere you can't tolerate starvation.

Variants worth knowing: weighted round-robin (each requester gets a quota — bit i stays set in the mask for w_i grants before clearing); deficit round-robin (used in packet schedulers where request sizes vary); and matrix arbiters, which store an N×N "who-beat-whom-most-recently" matrix — same fairness guarantee, different timing/area tradeoff, favored in high-radix on-chip networks.

Key Takeaway: A round-robin arbiter turns "who won last" into a mask, then uses two ordinary priority encoders to pick fairly in one cycle — bounding worst-case latency to N grants without the delay of a rotating encoder.

All newsletters