Connect up pipeline stages
[ieee754fpu.git] / src / ieee754 / cordic / sin_cos_pipeline.py
1 from nmutil.singlepipe import ControlBase
2 from nmutil.concurrentunit import ReservationStations, num_bits
3
4 from ieee754.cordic.sin_cos_pipe_stages import (
5 CordicStage, CordicInitialStage)
6 from ieee754.cordic.pipe_data import (CordicPipeSpec, CordicData,
7 CordicInitalData)
8
9 class CordicBasePipe(ControlBase):
10 def __init__(self, pspec):
11 ControlBase.__init__(self)
12 self.init = CordicInitialStage(pspec)
13 self.cordicstages = []
14 for i in range(pspec.iterations):
15 stage = CordicStage(pspec, i)
16 self.cordicstages.append(stage)
17 self._eqs = self.connect([self.init] + self.cordicstages)
18
19 def elaborate(self, platform):
20 m = ControlBase.elaborate(self, platform)
21 m.submodules.init = self.init
22 for i, stage in enumerate(self.cordicstages):
23 setattr(m.submodules, "stage%d" % i, stage)
24 m.d.comb += self._eqs
25 return m