use property decorator to process input data from stage
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 28 Apr 2019 21:38:34 +0000 (22:38 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 28 Apr 2019 21:38:34 +0000 (22:38 +0100)
src/add/iocontrol.py
src/add/singlepipe.py

index 0554b71d6c7a7af84170a6a0af4ff2bf79b11f68..3afd98475c43e2152ef6f566d604d118dcb3f8b1 100644 (file)
@@ -540,6 +540,10 @@ class ControlBase(Elaboratable):
 
         return eqs
 
+    @property
+    def data(self):
+        return self.stage.process(self.p.data_i)
+
     def _postprocess(self, i): # XXX DISABLED
         return i # RETURNS INPUT
         if hasattr(self.stage, "postprocess"):
index 5a8f6c272c791b0412440e9f6b79f95ac2be90ec..220dbefcf28a0fd3666b3ca3c73c093c1c2800d8 100644 (file)
@@ -209,7 +209,7 @@ class BufferedHandshake(ControlBase):
         ]
 
         # store result of processing in combinatorial temporary
-        self.m.d.comb += nmoperator.eq(result, self.stage.process(self.p.data_i))
+        self.m.d.comb += nmoperator.eq(result, self.data)
 
         # if not in stall condition, update the temporary register
         with self.m.If(self.p.ready_o): # not stalled
@@ -292,7 +292,7 @@ class SimpleHandshake(ControlBase):
         ]
 
         # store result of processing in combinatorial temporary
-        m.d.comb += nmoperator.eq(result, self.stage.process(self.p.data_i))
+        m.d.comb += nmoperator.eq(result, self.data)
 
         # previous valid and ready
         with m.If(p_valid_i_p_ready_o):
@@ -403,7 +403,7 @@ class UnbufferedPipeline(ControlBase):
         m.d.sync += data_valid.eq(p_valid_i | buf_full)
 
         with m.If(pv):
-            m.d.sync += nmoperator.eq(r_data, self.stage.process(self.p.data_i))
+            m.d.sync += nmoperator.eq(r_data, self.data)
         data_o = self._postprocess(r_data) # XXX TBD, does nothing right now
         m.d.comb += nmoperator.eq(self.n.data_o, data_o)
 
@@ -484,7 +484,7 @@ class UnbufferedPipeline2(ControlBase):
         m.d.comb += self.p._ready_o.eq(~buf_full)
         m.d.sync += buf_full.eq(~self.n.ready_i_test & self.n.valid_o)
 
-        data_o = Mux(buf_full, buf, self.stage.process(self.p.data_i))
+        data_o = Mux(buf_full, buf, self.data)
         data_o = self._postprocess(data_o) # XXX TBD, does nothing right now
         m.d.comb += nmoperator.eq(self.n.data_o, data_o)
         m.d.sync += nmoperator.eq(buf, self.n.data_o)
@@ -554,7 +554,7 @@ class PassThroughHandshake(ControlBase):
         m.d.comb += self.p.ready_o.eq(~self.n.valid_o |  self.n.ready_i_test)
         m.d.sync += self.n.valid_o.eq(p_valid_i       | ~self.p.ready_o)
 
-        odata = Mux(pvr, self.stage.process(self.p.data_i), r_data)
+        odata = Mux(pvr, self.data, r_data)
         m.d.sync += nmoperator.eq(r_data, odata)
         r_data = self._postprocess(r_data) # XXX TBD, does nothing right now
         m.d.comb += nmoperator.eq(self.n.data_o, r_data)
@@ -622,7 +622,7 @@ class FIFOControl(ControlBase):
 
         # store result of processing in combinatorial temporary
         result = _spec(self.stage.ospec, "r_temp")
-        m.d.comb += nmoperator.eq(result, self.stage.process(self.p.data_i))
+        m.d.comb += nmoperator.eq(result, self.data)
 
         # connect previous rdy/valid/data - do cat on data_i
         # NOTE: cannot do the PrevControl-looking trick because