Are are any standard or recommended ways of verifying the functionality of the round-robin arbiter and more specifically checking the fairness? I'm looking for something that is scalable with the number of requestors.
Functionality of the arbiter is as follows:
- Say there are 3 requestors, req1, req2 and req3. The pointer points to req1 initially. Consider different cases for illustration.
- If all 3 requests are asserted, req1 goes through and the pointer is updated to req2.
- If req2 and req3 is asserted, then req2 will go through and pointer is updated to req3.
- If just req3 is asserted, then req3 will go through and pointer is updated to req1(cyclic).
The pointer is always updated to the next requestor that got previously granted
- if req1 granted, pointer is updated to req2
- if req2 got granted, pointer is updated to req3,
- if req3 is granted, pointer is updated to req1
The pointer points to the requestor that has higher priority for the next round of requests, in order to ensure fairness in the way grants are allotted.