1 from litex
.gen
.fhdl
.structure
import *
2 from litex
.gen
.fhdl
.module
import Module
5 (SP_WITHDRAW
, SP_CE
) = range(2)
8 class RoundRobin(Module
):
9 def __init__(self
, n
, switch_policy
=SP_WITHDRAW
):
10 self
.request
= Signal(n
)
11 self
.grant
= Signal(max=max(2, n
))
12 self
.switch_policy
= switch_policy
13 if self
.switch_policy
== SP_CE
:
22 for j
in reversed(range(i
+1, i
+n
)):
31 if self
.switch_policy
== SP_WITHDRAW
:
32 case
= [If(~self
.request
[i
], *switch
)]
36 statement
= Case(self
.grant
, cases
)
37 if self
.switch_policy
== SP_CE
:
38 statement
= If(self
.ce
, statement
)
39 self
.sync
+= statement
41 self
.comb
+= self
.grant
.eq(0)