RTL Design #42 · 2026-11-04 · Packet arbitration · Medium · about 15 min

A bus lock that outlasts the packet

pkt_arb3 shares a bus between three requesters that send multi-beat packets. Each cycle it grants at most one of them, combinationally:

  • When the bus is free, the lowest-numbered requester that is asking wins.
  • A requester that wins keeps the grant, even if a lower-numbered one starts asking, until the cycle where last is high. last is only high on a cycle that has a grant, and means the granted requester is sending its final beat.
  • The cycle after last, the bus is free again, even if the same requester is still asking with its next packet.
  • A requester holds req high from the first beat of a packet to its last beat.

The current design lets a requester with back-to-back packets keep the bus while requester 0 waits. Fix arbiter.sv.

Write and run your answer in the browser. The hidden tests check it, and it’s free.