add rounding stage
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 14 Feb 2019 09:48:40 +0000 (09:48 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 14 Feb 2019 09:48:40 +0000 (09:48 +0000)
src/add/nmigen_add_experiment.py

index bfc1c878c77ee03c5ccb2ad563c24e4615ce76fc..8c99a1ff157e3564496e7a466e59aabbbf72bad6 100644 (file)
@@ -226,6 +226,7 @@ class FPADD:
 
             # ******
             # Second stage of add: preparation for normalisation.
+            # detects when tot sum is too big (tot[27] is kinda a carry bit)
 
             with m.State("add_1"):
                 m.next = "normalise_1"
@@ -284,6 +285,16 @@ class FPADD:
                 with m.Else():
                     m.next = "round"
 
+            # ******
+            # rounding stage
+
+            with m.State("round"):
+                m.next = "pack"
+                with m.If(guard & (round_bit | sticky | z_m[0])):
+                    m.d.sync += z_m.eq(z_m + 1) # mantissa rounds up
+                    with m.If(z_m == 0xffffff): # all 1s
+                        m.d.sync += z_e.eq(z_e + 1) # exponent rounds up
+
         return m
 
 """