use function to get chain of v/ack/stb
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 23 Feb 2019 12:40:41 +0000 (12:40 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 23 Feb 2019 12:40:41 +0000 (12:40 +0000)
src/add/dual_add_experiment.py
src/add/fpbase.py

index de07e7782a276d450fb98270612927c949abc94f..a70c93356bdf946b426a6acb8a6ddba1e001c69f 100644 (file)
@@ -44,28 +44,16 @@ class ALU:
         m = Module()
         m.submodules.add1 = self.add1
         m.submodules.add2 = self.add2
-        m.d.comb += [
-            # join add1 a to a: add1.in_a = a
-            self.add1.in_a.v.eq(self.a.v),
-            self.add1.in_a.stb.eq(self.a.stb),
-            self.a.ack.eq(self.add1.in_a.ack),
-            # join add1 b to b: add1.in_b = b
-            self.add1.in_b.v.eq(self.b.v),
-            self.add1.in_b.stb.eq(self.b.stb),
-            self.b.ack.eq(self.add1.in_b.ack),
-            # join add2 a to c: add2.in_a = c
-            self.add2.in_a.v.eq(self.c.v),
-            self.add2.in_a.stb.eq(self.c.stb),
-            self.c.ack.eq(self.add2.in_a.ack),
-            # join add2 b to add1 z: add2.in_b = add1.out_z
-            self.add2.in_b.v.eq(self.add1.out_z.v),
-            self.add2.in_b.stb.eq(self.add1.out_z.stb),
-            self.add1.out_z.ack.eq(self.add2.in_b.ack),
-            # join output from add2 to z: z = add2.out_z
-            self.z.v.eq(self.add2.out_z.v),
-            self.z.stb.eq(self.add2.out_z.stb),
-            self.add2.out_z.ack.eq(self.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_from(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)
         #with m.If(self.op):
         #    m.d.comb += self.o.eq(self.sub.o)
         #with m.Else():
index 961824f08b8bfdc3deece043a76472d5966ec793..6a1357056f44d40387b3b9c34cf5b15d173f1272 100644 (file)
@@ -342,6 +342,12 @@ class FPOp:
         self.stb = Signal()
         self.ack = Signal()
 
+    def chain_from(self, in_op):
+        return [self.v.eq(in_op.v),          # receive value
+                self.stb.eq(in_op.stb),      # receive STB
+                in_op.ack.eq(self.ack), # send ACK
+               ]
+
     def ports(self):
         return [self.v, self.stb, self.ack]