class DivStagesStart(PipeModBaseChain):
def get_chain(self):
alu_input = DivMulInputStage(self.pspec)
+ return [alu_input]
+
+
+class DivStagesSetup(PipeModBaseChain):
+ def get_chain(self):
div_setup = DivSetupStage(self.pspec)
if isinstance(self.pspec.div_pipe_kind.config,
DivPipeKindConfigCombPipe):
core_setup = [DivCoreSetupStage(self.pspec)]
else:
core_setup = ()
- return [alu_input, div_setup, *core_setup]
+ return [div_setup, *core_setup]
class DivStagesMiddle(PipeModBaseChain):
ControlBase.__init__(self)
self.pspec = pspec
self.pipe_start = DivStagesStart(pspec)
+ self.pipe_setup = DivStagesSetup(pspec)
self.pipe_middles = []
if isinstance(self.pspec.div_pipe_kind.config,
DivPipeKindConfigCombPipe):
self.pipe_end = DivStagesEnd(pspec)
self.pipe_final = DivStagesFinalise(pspec)
self._eqs = self.connect([self.pipe_start,
+ self.pipe_setup,
*self.pipe_middles,
self.pipe_end,
self.pipe_final])
def elaborate(self, platform):
m = ControlBase.elaborate(self, platform)
m.submodules.pipe_start = self.pipe_start
+ m.submodules.pipe_setup = self.pipe_setup
for i in range(len(self.pipe_middles)):
name = f"pipe_middle_{i}"
setattr(m.submodules, name, self.pipe_middles[i])