reduce ANDing chain (using NOR) in group picker
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 9 May 2019 10:37:59 +0000 (11:37 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 9 May 2019 10:37:59 +0000 (11:37 +0100)
src/scoreboard/group_picker.py

index 333d5b1b8a6e2f6d00cfd71129fd5f06b76bb3a3..022543f0c36cd142c2a858e06c74f6f0e9333cc0 100644 (file)
@@ -16,14 +16,15 @@ class PriorityPicker(Elaboratable):
         m = Module()
 
         res = []
+        ni = Signal(self.wid, reset_less = True)
+        m.d.comb += ni.eq(~self.i)
         for i in range(0, self.wid):
             t = Signal(reset_less = True)
             res.append(t)
             if i == 0:
-                m.d.comb += t.eq(self.i[0])
+                m.d.comb += t.eq(self.i[i])
             else:
-                m.d.comb += t.eq((~res[-2]) & self.i[i])
-            res.append(t)
+                m.d.comb += t.eq(~Cat(ni[i], *self.i[:i]).bool())
         
         # we like Cat(*xxx).  turn lists into concatenated bits
         m.d.comb += self.o.eq(Cat(*res))