From: Sebastien Bourdeauducq Date: Sat, 31 Mar 2012 16:01:40 +0000 (+0200) Subject: corelogic/roundrobin: handle correctly special case with 1 request source X-Git-Tag: 24jan2021_ls180~2099^2~959 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0dfc215fe83aee3421b5edcc383f7946ceb34083;p=litex.git corelogic/roundrobin: handle correctly special case with 1 request source --- diff --git a/migen/corelogic/roundrobin.py b/migen/corelogic/roundrobin.py index 6b0ca531..aa310204 100644 --- a/migen/corelogic/roundrobin.py +++ b/migen/corelogic/roundrobin.py @@ -13,24 +13,27 @@ class RoundRobin: self.ce = Signal() def get_fragment(self): - cases = [] - for i in range(self.n): - switch = [] - for j in reversed(range(i+1,i+self.n)): - t = j % self.n - switch = [ - If(self.request[t], - self.grant.eq(Constant(t, BV(self.bn))) - ).Else( - *switch - ) - ] - 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]) + if self.n > 1: + cases = [] + for i in range(self.n): + switch = [] + for j in reversed(range(i+1,i+self.n)): + t = j % self.n + switch = [ + If(self.request[t], + self.grant.eq(Constant(t, BV(self.bn))) + ).Else( + *switch + ) + ] + 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]) + else: + return Fragment([self.grant.eq(0)])