start implementing fp fused-mul-add pipeline
[ieee754fpu.git] / src / ieee754 / fpfma / pipeline.py
1 """ floating-point fused-multiply-add
2
3 computes `z = (a * c) + b` but only rounds once at the end
4 """
5
6 from nmutil.singlepipe import ControlBase
7 from ieee754.fpfma.special_cases import FPFMASpecialCasesDeNorm
8 from ieee754.fpfma.main_stage import FPFMAMainStage
9 from ieee754.fpfma.norm import FPFMANormToPack
10
11
12 class FPFMABasePipe(ControlBase):
13 def __init__(self, pspec):
14 super().__init__()
15 self.sc_denorm = FPFMASpecialCasesDeNorm(pspec)
16 self.main = FPFMAMainStage(pspec)
17 self.normpack = FPFMANormToPack(pspec)
18 self._eqs = self.connect([self.sc_denorm, self.main, self.normpack])
19
20 def elaborate(self, platform):
21 m = super().elaborate(platform)
22 m.submodules.sc_denorm = self.sc_denorm
23 m.submodules.main = self.main
24 m.submodules.normpack = self.normpack
25 m.d.comb += self._eqs
26 return m