add 2 stage buffered pipeline unit test, reduce to 16-bit to make vcd clearer
[ieee754fpu.git] / src / add / example_buf_pipe.py
index 337ce50e9c39921421d625fee9f2361c1b2fae85..5faee7876c83e602fecb47e6c9ba366a7ec7aa90 100644 (file)
@@ -40,7 +40,6 @@
 """
 
 from nmigen import Signal, Cat, Const, Mux, Module
-from nmigen.compat.sim import run_simulation
 from nmigen.cli import verilog, rtlil
 
 class BufPipe:
@@ -59,16 +58,16 @@ class BufPipe:
         #self.i_p_rst = Signal()    # >>in - comes in from PREVIOUS stage
         self.i_p_stb = Signal()    # >>in - comes in from PREVIOUS stage
         self.i_n_busy = Signal()   # in<< - comes in from the NEXT stage
-        self.i_data = Signal(32) # >>in - comes in from the PREVIOUS stage
+        self.i_data = Signal(16) # >>in - comes in from the PREVIOUS stage
         #self.i_rst = Signal()
 
         # buffered
-        self.r_data = Signal(32)
+        self.r_data = Signal(16)
 
         # output
         self.o_n_stb = Signal()    # out>> - goes out to the NEXT stage
         self.o_p_busy = Signal()   # <<out - goes out to the PREVIOUS stage
-        self.o_data = Signal(32) # out>> - goes out to the NEXT stage
+        self.o_data = Signal(16) # out>> - goes out to the NEXT stage
 
     def pre_process(self, d_in):
         return d_in | 0xf0000
@@ -91,8 +90,9 @@ class BufPipe:
         ]
 
         # store result of processing in combinatorial temporary
-        result = Signal(32)
-        m.d.comb += result.eq(self.process(self.i_data))
+        result = Signal(16)
+        with m.If(self.i_p_stb): # input is valid: process it
+            m.d.comb += result.eq(self.process(self.i_data))
         with m.If(o_p_busyn): # not stalled
             m.d.sync += self.r_data.eq(result)