move round to function
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 16 Feb 2019 09:07:13 +0000 (09:07 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 16 Feb 2019 09:07:13 +0000 (09:07 +0000)
src/add/nmigen_add_experiment.py

index af947149f5e10eeede69a98bdbe2ca5841f628db..676d8381b8850f9658ea94c785e056d18dd4e8ed 100644 (file)
@@ -153,6 +153,13 @@ class FPADD:
         with m.Else():
             m.next = next_state
 
+    def round(self, m, z, of, next_state):
+        m.next = next_state
+        with m.If(of.guard & (of.round_bit | of.sticky | z.m[0])):
+            m.d.sync += z.m.eq(z.m + 1) # mantissa rounds up
+            with m.If(z.m == z.m1s): # all 1s
+                m.d.sync += z.e.eq(z.e + 1) # exponent rounds up
+
     def get_fragment(self, platform=None):
         m = Module()
 
@@ -329,11 +336,7 @@ class FPADD:
             # rounding stage
 
             with m.State("round"):
-                m.next = "corrections"
-                with m.If(of.guard & (of.round_bit | of.sticky | z.m[0])):
-                    m.d.sync += z.m.eq(z.m + 1) # mantissa rounds up
-                    with m.If(z.m == z.m1s): # all 1s
-                        m.d.sync += z.e.eq(z.e + 1) # exponent rounds up
+                self.round(m, z, of, "corrections")
 
             # ******
             # correction stage