update comments
[ieee754fpu.git] / src / add / dual_add_experiment.py
index 136294d3c69a1eb6458d58d666701864cc2eabc3..7ec479f5affe95dfb5b4e6bd650b9dec248246ed 100644 (file)
@@ -36,6 +36,7 @@ class ALU:
         self.b   = FPOp(width)
         self.c   = FPOp(width)
         self.z   = FPOp(width)
+        self.int_stb = Signal()
 
         self.add1 = FPADD(width)
         self.add2 = FPADD(width)
@@ -44,30 +45,18 @@ class ALU:
         m = Module()
         m.submodules.add1 = self.add1
         m.submodules.add2 = self.add2
-        m.d.comb += [
-            # join add1 a to a
-            self.add1.in_a.v.eq(self.a.v),
-            self.add1.in_a.stb.eq(self.a.stb),
-            # join add1 b to b
-            self.add1.in_b.v.eq(self.b.v),
-            self.add1.in_b.stb.eq(self.b.stb),
-            # join add2 a to c
-            self.add2.in_a.v.eq(self.c.v),
-            self.add2.in_a.stb.eq(self.c.stb),
-            # join add2 b to add1 z
-            self.add2.in_b.v.eq(self.add1.out_z.v),
-            self.add2.in_b.stb.eq(self.add1.out_z.stb),
-        ]
-        m.d.sync += [
-            # join add1 a to a
-            self.add1.in_a.ack.eq(self.a.ack),
-            # join add1 b to b
-            self.add1.in_b.ack.eq(self.b.ack),
-            # join add2 a to c
-            self.add2.in_a.ack.eq(self.c.ack),
-            # join add2 b to add1 z
-            self.add2.in_b.ack.eq(self.add1.out_z.ack),
-        ]
+        # join add1 a to a: add1.in_a = a
+        m.d.comb += self.add1.in_a.chain_from(self.a)
+        # join add1 b to b: add1.in_b = b
+        m.d.comb += self.add1.in_b.chain_from(self.b)
+        # join add2 a to c: add2.in_a = c
+        m.d.comb += self.add2.in_a.chain_from(self.c)
+        # join add2 b to add1 z: add2.in_b = add1.out_z
+        m.d.comb += self.add2.in_b.chain_inv(self.add1.out_z)
+        # join output from add2 to z: z = add2.out_z
+        m.d.comb += self.z.chain_from(self.add2.out_z)
+        # get at add1's stb signal
+        m.d.comb += self.int_stb.eq(self.add1.out_z.stb)
         #with m.If(self.op):
         #    m.d.comb += self.o.eq(self.sub.o)
         #with m.Else():