very weird: invert readable vector, cscore works
[soc.git] / src / scoreboard / group_picker.py
index 78f834145b56343033e2abdeac29ff2769fc1584..022543f0c36cd142c2a858e06c74f6f0e9333cc0 100644 (file)
@@ -16,13 +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):
-            tmp = Signal(reset_less = True)
+            t = Signal(reset_less = True)
+            res.append(t)
             if i == 0:
-                m.d.comb += tmp.eq(self.i[0])
+                m.d.comb += t.eq(self.i[i])
             else:
-                m.d.comb += tmp.eq((~tmp) & self.i[i])
-            res.append(tmp)
+                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))
@@ -45,7 +47,7 @@ class GroupPicker(Elaboratable):
         # inputs
         self.readable_i = Signal(wid, reset_less=True) # readable in (top)
         self.writable_i = Signal(wid, reset_less=True) # writable in (top)
-        self.rel_req_i = Signal(wid, reset_less=True) # release request in (top)
+        self.req_rel_i = Signal(wid, reset_less=True) # release request in (top)
 
         # outputs
         self.go_rd_o = Signal(wid, reset_less=True)  # go read (bottom)
@@ -58,7 +60,7 @@ class GroupPicker(Elaboratable):
         m.submodules.wpick = wpick = PriorityPicker(self.gp_wid)
 
         # combine release (output ready signal) with writeable
-        m.d.comb += wpick.i.eq(self.writable_i & self.rel_req_i)
+        m.d.comb += wpick.i.eq(self.writable_i & self.req_rel_i)
         m.d.comb += self.go_wr_o.eq(wpick.o)
 
         m.d.comb += rpick.i.eq(self.readable_i)
@@ -69,7 +71,7 @@ class GroupPicker(Elaboratable):
     def __iter__(self):
         yield self.readable_i
         yield self.writable_i
-        yield self.rel_req_i
+        yield self.req_rel_i
         yield self.go_rd_o
         yield self.go_wr_o