diff --git a/doc/components/arbiter.md b/doc/components/arbiter.md index 1bb7e32b0..78eebdf33 100644 --- a/doc/components/arbiter.md +++ b/doc/components/arbiter.md @@ -2,6 +2,10 @@ ROHD HCL implements a generic `abstract` [`Arbiter`](https://intel.github.io/rohd-hcl/rohd_hcl/Arbiter-class.html) class that other arbiters can extend. It accepts a `List` of `requests`, where each request is a `1-bit` signal indicating that there is a request for a resource. The output `grants` is a `List` where each element corresponds to the request with the same index. The arbiter implementation decides how to select which request receives a grant. +## Stateful Arbiter + +A `StatefulArbiter` is an `Arbiter` which can hold state, and thus requires a `clk` and `reset`. + ## Priority Arbiter The [`PriorityArbiter`](https://intel.github.io/rohd-hcl/rohd_hcl/PriorityArbiter-class.html) is a combinational (stateless) arbiter that always grants to the lowest-indexed request. @@ -10,4 +14,7 @@ The [`PriorityArbiter`](https://intel.github.io/rohd-hcl/rohd_hcl/PriorityArbite ## Round Robin Arbiter -The Round Robin Arbiter is a sequential (stateful) arbiter which grants requests same ways as Priority Arbiter, but keeps track of last request granted allowing each requestor to be granted "fairly". +The `RoundRobinArbiter` is a `StatefulArbiter` which grants requests in a "fair" way so that all requestors get equal access to grants. There are two implementations available for `RoundRobinArbiter`: + +- `MaskRoundRobinArbiter` is the default implementation if you create a `RoundRobinArbiter`. It uses internal request and grant masks to store state for fair arbitration. +- `RotateRoundRobinArbiter` is an alternative implementation which uses a `PriorityArbiter` and two rotators controlled by a last-granted state.