1 """ floating-point fused-multiply-add
3 computes `z = (a * c) + b` but only rounds once at the end
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
12 class FPFMABasePipe(ControlBase
):
13 def __init__(self
, pspec
):
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
])
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