--- /dev/null
+from migen.fhdl import structure as f
+
+class Inst:
+ def __init__(self, n):
+ self.n = n
+ self.bn = f.BitsFor(self.n-1)
+ f.Declare(self, "request", f.BV(self.n))
+ f.Declare(self, "grant", f.BV(self.bn))
+
+ def GetFragment(self):
+ cases = []
+ for i in range(self.n):
+ switch = []
+ for j in reversed(range(i+1,i+self.n)):
+ t = j % self.n
+ switch = [f.If(self.request[t],
+ [f.Assign(self.grant, f.Constant(t, f.BV(self.bn)))],
+ switch)]
+ case = f.If(~self.request[i], switch)
+ cases.append((f.Constant(i, f.BV(self.bn)), case))
+ statement = f.Case(self.grant, cases)
+ return f.Fragment(sync=[statement])
\ No newline at end of file