clear STB immediately after setting, stops add1 repeating computation
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 27 Feb 2019 00:12:27 +0000 (00:12 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 27 Feb 2019 00:12:27 +0000 (00:12 +0000)
src/add/fpbase.py
src/add/test_dual.py

index 26528f62e185f1bb42df64e2559140981783ee6b..10997be40cd1b1cc9198ed978faa329b9f87e91f 100644 (file)
@@ -347,8 +347,8 @@ class FPOp:
         if extra is not None:
             stb = stb & extra
         return [self.v.eq(in_op.v),          # receive value
-                self.stb.eq(~stb),      # receive STB
-                in_op.ack.eq(~self.ack), # send ACK
+                self.stb.eq(stb),      # receive STB
+                in_op.ack.eq(self.ack), # send ACK
                ]
 
     def chain_from(self, in_op, extra=None):
index 6f9d8c8e2e2a479dcfb1595b5e1346d3118e9858..15f5c762df9a2e78ede74c8725c3806a022cc2ef 100644 (file)
@@ -11,6 +11,8 @@ def get_case(dut, a, b, c):
     a_ack = (yield dut.a.ack)
     assert a_ack == 0
 
+    yield dut.a.stb.eq(0)
+
     yield dut.b.v.eq(b)
     yield dut.b.stb.eq(1)
     yield
@@ -18,6 +20,8 @@ def get_case(dut, a, b, c):
     b_ack = (yield dut.b.ack)
     assert b_ack == 0
 
+    yield dut.b.stb.eq(0)
+
     yield dut.c.v.eq(c)
     yield dut.c.stb.eq(1)
     yield
@@ -25,12 +29,9 @@ def get_case(dut, a, b, c):
     c_ack = (yield dut.c.ack)
     assert c_ack == 0
 
-    while True:
-        out_z_stb = (yield dut.int_stb)
-        if not out_z_stb:
-            yield
-            continue
-        break
+    yield dut.c.stb.eq(0)
+
+    yield dut.z.ack.eq(1)
 
     while True:
         out_z_stb = (yield dut.z.stb)
@@ -41,12 +42,6 @@ def get_case(dut, a, b, c):
         out_z = yield dut.z.v
 
         yield dut.z.ack.eq(0)
-        yield dut.a.stb.eq(0)
-        yield dut.b.stb.eq(0)
-        yield dut.c.stb.eq(0)
-        yield
-        yield dut.z.ack.eq(1)
-        yield
         break
 
     return out_z