RGD stands for Request (r_i), Grant (g_i), and Done (d_i).
When An RGD 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 RGD( r0?, g0!, d0?, r1?, g1!, d1? ) = pref *[ r0?; g0!; ] || pref *[ r1?; g1!; ] || pref *[ g0!; d0? | g1!; d1? ] endAlso available through this link
Specification in DI Algebra:
NAME = (RGD Arbiter) I = { r0, d0, r1, d1 } O = { g0, g1 } RGD = [ r0? -> g0! ; [ d0? -> RGD, d1? -> CHAOS ], r1? -> g1! ; [ d1? -> RGD, d0? -> CHAOS ], d0? -> CHAOS, d1? -> CHAOS ] .Also available through this link
The subscripts 0 and 1 can be interchanged systematically.
An RGD 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
No information available