put exponent > 126 logic in FPNumBase, use it in norm module
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 27 Feb 2019 12:20:51 +0000 (12:20 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 27 Feb 2019 12:20:51 +0000 (12:20 +0000)
src/add/fpbase.py
src/add/nmigen_add_experiment.py

index 242f41d814a2b11d0bfb177c13dd95ee02bf88d2..c15112a917e116441364d22558bc7305a51a7c4d 100644 (file)
@@ -96,6 +96,7 @@ class FPNumBase:
         self.is_overflowed = Signal(reset_less=True)
         self.is_denormalised = Signal(reset_less=True)
         self.exp_128 = Signal(reset_less=True)
+        self.exp_gt_n126 = Signal(reset_less=True)
         self.exp_gt127 = Signal(reset_less=True)
         self.exp_n127 = Signal(reset_less=True)
         self.exp_n126 = Signal(reset_less=True)
@@ -110,6 +111,7 @@ class FPNumBase:
         m.d.comb += self.is_overflowed.eq(self._is_overflowed())
         m.d.comb += self.is_denormalised.eq(self._is_denormalised())
         m.d.comb += self.exp_128.eq(self.e == self.P128)
+        m.d.comb += self.exp_gt_n126.eq(self.e > self.N126)
         m.d.comb += self.exp_gt127.eq(self.e > self.P127)
         m.d.comb += self.exp_n127.eq(self.e == self.N127)
         m.d.comb += self.exp_n126.eq(self.e == self.N126)
index 360e29393aad8842d5d82be0655676153274a41c..ac2015153bddb2d3d2a1c3e872a702eab62470fb 100644 (file)
@@ -300,8 +300,8 @@ class FPNorm1Mod:
         m.submodules.norm1_out_z = self.out_z
         m.d.comb += self.out_z.copy(self.in_z)
         m.d.comb += self.out_of.copy(self.in_of)
-        m.d.comb += self.out_norm.eq((self.in_z.m[-1] == 0) & \
-                                     (self.in_z.e > self.in_z.N126))
+        m.d.comb += self.out_norm.eq((self.in_z.m_msbzero) & \
+                                     (self.in_z.exp_gt_n126))
         with m.If(self.out_norm):
             m.d.comb += [
                 self.out_z.e.eq(self.in_z.e - 1),  # DECREASE exponent