Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

corelogic/roundrobin: CE switching

  • Loading branch information...
commit a4294762d0d81757a2d57ad80636e66feb4e151c 1 parent e969b9a
@sbourdeauducq sbourdeauducq authored
Showing with 13 additions and 3 deletions.
  1. +13 −3 migen/corelogic/roundrobin.py
View
16 migen/corelogic/roundrobin.py
@@ -1,11 +1,16 @@
from migen.fhdl.structure import *
+(SP_WITHDRAW, SP_CE) = range(2)
+
class RoundRobin:
- def __init__(self, n):
+ def __init__(self, n, switch_policy=SP_WITHDRAW):
self.n = n
self.bn = bits_for(self.n-1)
self.request = Signal(BV(self.n))
self.grant = Signal(BV(self.bn))
+ self.switch_policy = switch_policy
+ if self.switch_policy == SP_CE:
+ self.ce = Signal()
def get_fragment(self):
cases = []
@@ -20,7 +25,12 @@ def get_fragment(self):
*switch
)
]
- case = If(~self.request[i], *switch)
- cases.append([Constant(i, BV(self.bn)), case])
+ if self.switch_policy == SP_WITHDRAW:
+ case = [If(~self.request[i], *switch)]
+ else:
+ case = switch
+ cases.append([Constant(i, BV(self.bn))] + case)
statement = Case(self.grant, *cases)
+ if self.switch_policy == SP_CE:
+ statement = If(self.ce, statement)
return Fragment(sync=[statement])
Please sign in to comment.
Something went wrong with that request. Please try again.