small tidyup of priority-encoding pipe mux
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 25 Mar 2019 17:45:53 +0000 (17:45 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 25 Mar 2019 17:45:53 +0000 (17:45 +0000)
src/add/example_buf_pipe.py
src/add/test_prioritymux_pipe.py

index cecb50d6c090dda0f5c01e469709b24a66053a2d..00955697ab32f7491998bd38a46150584c1a64ea 100644 (file)
@@ -566,7 +566,7 @@ class UnbufferedPipeline(PipelineBase):
         for i in range(p_len):
             r = self.stage.ispec() # input type
             r_data.append(r)
-            data_valid.append(Signal(name="data_valid"))
+            data_valid.append(Signal(name="data_valid", reset_less=True))
             p_i_valid.append(Signal(name="p_i_valid", reset_less=True))
             n_i_readyn.append(Signal(name="n_i_readyn", reset_less=True))
             if hasattr(self.stage, "setup"):
@@ -603,11 +603,18 @@ class UnbufferedPipeline(PipelineBase):
             m.d.sync += eq(o_mid, mid)
 
             for i in range(p_len):
-                with m.If(self.p[i].i_valid & self.p[i].o_ready):
+                vr = Signal(reset_less=True)
+                m.d.comb += vr.eq(self.p[i].i_valid & self.p[i].o_ready)
+                with m.If(vr):
                     m.d.sync += eq(r_data[i], self.p[i].i_data)
 
             m.d.comb += eq(self.n[ni].o_data,
                            self.stage.process(r_data[o_mid]))
+            #with m.Switch(o_mid):
+            #    for i in range(p_len):
+            #        with m.Case(i):
+            #            m.d.comb += eq(self.n[ni].o_data,
+            #               self.stage.process(r_data[i]))
         else:
             for i in range(p_len):
                 m.d.comb += p_i_valid[i].eq(self.p[i].i_valid_logic())
index 10b5ec6aa918fa8d63d54d9e8d1e6bf1c1286cf4..7cc5b817570bf53fc8547a269ee27523b0f7be7a 100644 (file)
@@ -51,9 +51,9 @@ class PriorityUnbufferedPipeline(UnbufferedPipeline):
 
 class PassData:
     def __init__(self):
-        self.mid = Signal(2)
-        self.idx = Signal(6)
-        self.data = Signal(16)
+        self.mid = Signal(2, reset_less=True)
+        self.idx = Signal(6, reset_less=True)
+        self.data = Signal(16, reset_less=True)
 
     def eq(self, i):
         return [self.mid.eq(i.mid), self.idx.eq(i.idx), self.data.eq(i.data)]
@@ -170,7 +170,7 @@ class InputTest:
         self.dut = dut
         self.di = {}
         self.do = {}
-        self.tlen = 4
+        self.tlen = 10
         for mid in range(dut.num_rows):
             self.di[mid] = {}
             self.do[mid] = {}