sort out weirdness in FPDIVBasePipe initialisation
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 22 Jul 2019 03:51:34 +0000 (04:51 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 22 Jul 2019 03:51:34 +0000 (04:51 +0100)
src/ieee754/fpdiv/divstages.py
src/ieee754/fpdiv/pipeline.py

index 6a65f0050b6f587f6d29b80feefbe83e8ce9f9ca..1b41b9e79dc0cdb84a61822acd3319e66705576e 100644 (file)
@@ -12,6 +12,7 @@ from nmutil.singlepipe import (StageChain, SimpleHandshake)
 from ieee754.fpcommon.fpbase import FPState
 from ieee754.fpcommon.denorm import FPSCData
 from ieee754.fpcommon.postcalc import FPAddStage1Data
+from ieee754.div_rem_sqrt_rsqrt.div_pipe import DivPipeInterstageData
 
 # TODO: write these
 from .div0 import FPDivStage0Mod
index 4e4836333b5e39a084144a4fbc0fd3d056c873b6..4ee1694b557300d055f879bec4ee329a712038a8 100644 (file)
@@ -76,11 +76,8 @@ from ieee754.pipeline import PipelineSpec
 
 class FPDIVBasePipe(ControlBase):
     def __init__(self, pspec):
-        ControlBase.__init__(self)
         self.pspec = pspec
-
-    def elaborate(self, platform):
-        m = ControlBase.elaborate(self, platform)
+        ControlBase.__init__(self)
 
         pipechain = []
         n_stages = 6      # TODO (depends on width)
@@ -110,18 +107,25 @@ class FPDIVBasePipe(ControlBase):
             stage_idx += n_comb_stages # increment so that each CalcStage
                                        # gets a (correct) unique index
 
+        self.pipechain = pipechain
+
         # start and end: unpack/specialcases then normalisation/packing
-        pipestart = FPDIVSpecialCasesDeNorm(self.pspec)
-        pipeend = FPNormToPack(self.pspec)
+        self.pipestart = FPDIVSpecialCasesDeNorm(self.pspec)
+        self.pipeend = FPNormToPack(self.pspec)
+
+        self._eqs = self.connect([pipestart] + pipechain + [pipeend])
+
+    def elaborate(self, platform):
+        m = ControlBase.elaborate(self, platform)
 
         # add submodules
-        m.submodules.scnorm = pipestart
-        for i, p in enumerate(pipechain):
+        m.submodules.scnorm = self.pipestart
+        for i, p in enumerate(self.pipechain):
             setattr(m.submodules, "pipediv%d" % i, p)
-        m.submodules.normpack = pipeend
+        m.submodules.normpack = self.pipeend
 
         # ControlBase.connect creates the "eqs" needed to connect each pipe
-        m.d.comb += self.connect([pipestart] + pipechain + [pipeend])
+        m.d.comb += self._eqs
 
         return m