2e96ed3b668e1151e5bf68e7271af6ba15f13132
[ieee754fpu.git] / src / ieee754 / fpmul / mulstages.py
1 # IEEE Floating Point Multiplier
2
3 from nmigen import Module
4 from nmigen.cli import main, verilog
5
6 from nmutil.singlepipe import StageChain
7
8 from ieee754.pipeline import DynamicPipe
9 from ieee754.fpcommon.denorm import FPSCData
10 from ieee754.fpcommon.postcalc import FPAddStage1Data
11 from ieee754.fpmul.mul0 import FPMulStage0Mod
12 from ieee754.fpmul.mul1 import FPMulStage1Mod
13
14
15 class FPMulStages(DynamicPipe):
16
17 def __init__(self, pspec):
18 self.pspec = pspec
19 super().__init__(pspec)
20 self.m1o = self.ospec()
21
22 def ispec(self):
23 return FPSCData(self.pspec, False)
24
25 def ospec(self):
26 return FPAddStage1Data(self.pspec)
27
28 def setup(self, m, i):
29 """ links module to inputs and outputs
30 """
31
32 # chain MulStage0 and MulStage1
33 m0mod = FPMulStage0Mod(self.pspec)
34 m1mod = FPMulStage1Mod(self.pspec)
35
36 chain = StageChain([m0mod, m1mod])
37 chain.setup(m, i)
38
39 self.o = m1mod.o
40
41 def process(self, i):
42 return self.o
43