a9c4f337be5c5c247efa016032d03efd0d8e959c
[soc.git] / src / soc / fu / alu / pipeline.py
1 from nmutil.singlepipe import ControlBase
2 from nmutil.pipemodbase import PipeModBaseChain
3 from soc.fu.alu.input_stage import ALUInputStage
4 from soc.fu.alu.main_stage import ALUMainStage
5 from soc.fu.alu.output_stage import ALUOutputStage
6
7
8 class ALUStagesOld(PipeModBaseChain):
9 def get_chain(self):
10 inp = ALUInputStage(self.pspec)
11 main = ALUMainStage(self.pspec)
12 return [inp, main, out]
13
14
15 class ALUStageEnd(PipeModBaseChain):
16 def get_chain(self):
17 out = ALUOutputStage(self.pspec)
18 return [out]
19
20
21 class ALUBasePipeOld(ControlBase):
22 def __init__(self, pspec):
23 ControlBase.__init__(self)
24 self.pspec = pspec
25 self.pipe1 = ALUStages(pspec)
26 self.pipe2 = ALUStageEnd(pspec)
27 self._eqs = self.connect([self.pipe1, self.pipe2])
28
29 def elaborate(self, platform):
30 m = ControlBase.elaborate(self, platform)
31 m.submodules.pipe1 = self.pipe1
32 m.submodules.pipe2 = self.pipe2
33 m.d.comb += self._eqs
34 return m
35
36
37 class ALUStages(PipeModBaseChain):
38 def get_chain(self):
39 inp = ALUInputStage(self.pspec)
40 main = ALUMainStage(self.pspec)
41 out = ALUOutputStage(self.pspec)
42 return [inp, main, out]
43
44
45 class ALUBasePipe(ControlBase):
46 def __init__(self, pspec):
47 ControlBase.__init__(self)
48 self.pspec = pspec
49 self.pipe1 = ALUStages(pspec)
50 self._eqs = self.connect([self.pipe1])
51
52 def elaborate(self, platform):
53 m = ControlBase.elaborate(self, platform)
54 m.submodules.pipe1 = self.pipe1
55 m.d.comb += self._eqs
56 return m