RGDA stands for Request (a_i.r), Grant (b_i.r), Done (b_i.a), and Acknowledge (a_i.a). The individual terminals are also referred to as r_i (request), g_i (grant), d_i (done), and a_i (acknowledge).
When an RGDA Arbiter receives two requests, it will grant exactly one of them (and delay the other). The specification leaves the choice open. Often there is a fairness requirement on this choice: if a choice situation arises `infinitely often' then both outputs are chosen `infinitely often'.
Specification in Verdect:
define RGDA( r0?, g0!, d0?, a0!, r1?, g1!, d1?, a1! ) = pref *[ r0?; g0!; d0?; a0! ] || pref *[ r1?; g1!; d1?; a1! ] || pref *[ g0!; d0? | g1!; d1? ] endAlso available through this link
Specification in DI Algebra:
NAME = (RGDA Arbiter) I = { r0, d0, r1, d1 } O = { g0, g1, a0, a1 } RGDA = [ r0? -> g0! ; [ d0? -> a0! ; RGDA, d1? -> CHAOS, r0? -> CHAOS ], r1? -> g1! ; [ d1? -> a1! ; RGDA, d0? -> CHAOS, r1? -> CHAOS ], d0? -> CHAOS, d1? -> CHAOS ] .Also available through this link
The subscripts 0 and 1 can be interchanged systematically:
RGDA(a_0, a_1; b_0, b_1) =
RGDA(a_1, a_0; b_1, b_0)
An RGDA Arbiter is not output deterministic, since there is an output choice in state 5. The output nondeterminism is dynamic.
No information available
No information available
Generalizations involving data on return (done/acknowledge) path. Relationship to Interlock Macromodule.
Sometimes useful: Input demanding (w.r.t. `done') when resource is granted (states 6 and 9) to help guarantee release of the resource.
Fairness issue.