create pack function
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 16 Feb 2019 09:12:22 +0000 (09:12 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 16 Feb 2019 09:12:22 +0000 (09:12 +0000)
src/add/nmigen_add_experiment.py

index 8a7ef0ea4f67a18f2e284516c886c7b3849d2aca..435fc252fa0ea4ba6a3f714a54f3c4fe5fa8fe89 100644 (file)
@@ -169,6 +169,14 @@ class FPADD:
         with m.If((z.e == z.N126) & (z.m[0:] == 0)):
             m.d.sync += z.s.eq(0)
 
+    def pack(self, m, z, next_state):
+        m.next = next_state
+        # if overflow occurs, return inf
+        with m.If(z.is_overflowed()):
+            m.d.sync += z.inf(0)
+        with m.Else():
+            m.d.sync += z.create(z.s, z.e, z.m)
+
     def get_fragment(self, platform=None):
         m = Module()
 
@@ -357,12 +365,7 @@ class FPADD:
             # pack stage
 
             with m.State("pack"):
-                m.next = "put_z"
-                # if overflow occurs, return inf
-                with m.If(z.is_overflowed()):
-                    m.d.sync += z.inf(0)
-                with m.Else():
-                    m.d.sync += z.create(z.s, z.e, z.m)
+                self.pack(m, z, "put_z")
 
             # ******
             # put_z stage