create get_op function
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 16 Feb 2019 08:54:33 +0000 (08:54 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 16 Feb 2019 08:54:33 +0000 (08:54 +0000)
src/add/nmigen_add_experiment.py

index cad063c1c6d251b56a03526ea62f1a92443acc0c..6f9f3a7e50f38e764bae3e62f5da03348d28e042 100644 (file)
@@ -112,6 +112,16 @@ class FPADD:
         self.in_b     = FPOp(width)
         self.out_z     = FPOp(width)
 
+    def get_op(self, m, op, v, next_state):
+        with m.If((op.ack) & (op.stb)):
+            m.next = next_state
+            m.d.sync += [
+                v.eq(op.v),
+                op.ack.eq(0)
+            ]
+        with m.Else():
+            m.d.sync += op.ack.eq(1)
+
     def get_fragment(self, platform=None):
         m = Module()
 
@@ -132,14 +142,7 @@ class FPADD:
             # gets operand a
 
             with m.State("get_a"):
-                with m.If((self.in_a.ack) & (self.in_a.stb)):
-                    m.next = "get_b"
-                    m.d.sync += [
-                        a.v.eq(self.in_a.v),
-                        self.in_a.ack.eq(0)
-                    ]
-                with m.Else():
-                    m.d.sync += self.in_a.ack.eq(1)
+                self.get_op(m, self.in_a, a.v, "get_b")
 
             # ******
             # gets operand b