Library Fairisle.Fairisle.SPECIF.ROUND_ROBIN.RoundRobin



Require Export NextPort.

Set Implicit Arguments.
Unset Strict Implicit.

Section Round_Robin_function.

  Variable i o : nat.   Let Inportno := T_Inportno i.
  Let Outportno := T_Outportno o.

  Variable k : nat.
Round robin function

 Fixpoint RoundRobin (n : nat) (requests_set : d_list Inportno k)
  (last : Inportno) {struct n} : Inportno :=
   match n with
   | Olast
   | S p
       match
         In_or_not eq_nat_dec (no_in (SUC_MODN last))
           (d_map (no_in (i:=i)) requests_set)
       with
       | left _SUC_MODN last
       | right _RoundRobin p requests_set (SUC_MODN last)
       end
   end.

Arbitration on a Round Robin basis

  Definition RoundRobinArbiter (requests_set : d_list Inportno k)
    (last : Inportno) :=
    match requests_set with
    | d_nillast
    | d_cons p _ _RoundRobin i requests_set last
    end.

End Round_Robin_function.