73eafaa31dfb5e72779bbb2b7bc1d0dafc0a15b1
1 from litesata
.common
import *
2 from litesata
.frontend
.common
import *
4 from migen
.genlib
.roundrobin
import *
6 class LiteSATAArbiter(Module
):
7 def __init__(self
, users
, master
):
8 self
.rr
= RoundRobin(len(users
))
9 self
.grant
= self
.rr
.grant
11 for i
, slave
in enumerate(users
):
12 sink
, source
= slave
.sink
, slave
.source
17 start
.eq(sink
.stb
& sink
.sop
),
18 done
.eq(source
.stb
& source
.last
& source
.eop
& source
.ack
)
26 self
.comb
+= self
.rr
.request
[i
].eq((start | ongoing
) & ~done
)
27 cases
[i
] = [users
[i
].connect(master
)]
28 self
.comb
+= Case(self
.grant
, cases
)