From 0dfc215fe83aee3421b5edcc383f7946ceb34083 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Sat, 31 Mar 2012 18:01:40 +0200 Subject: [PATCH] corelogic/roundrobin: handle correctly special case with 1 request source --- migen/corelogic/roundrobin.py | 45 +++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/migen/corelogic/roundrobin.py b/migen/corelogic/roundrobin.py index 6b0ca5312..aa310204e 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)])