from ieee754.fpcommon.fpbase import FPState, FPID
from ieee754.fpcommon.getop import FPADDBaseData
from ieee754.fpcommon.denorm import (FPSCData, FPAddDeNormMod)
+from ieee754.fpmul.align import FPAlignModSingle
class FPMulSpecialCasesMod(Elaboratable):
#m.submodules.sc_out_z = self.o.z
# decode: XXX really should move to separate stage
- width = self.pspec['width']
+ width = self.pspec.width
a1 = FPNumBaseRecord(width, False)
b1 = FPNumBaseRecord(width, False)
m.submodules.sc_decode_a = a1 = FPNumDecode(None, a1)
m.d.comb += self.o.z.inf(sabx)
# b is zero return NaN
with m.If(b1.is_zero):
- m.d.comb += self.o.z.nan(1)
+ m.d.comb += self.o.z.nan(0)
# if b is inf return inf (or NaN)
with m.Elif(b1.is_inf):
m.d.comb += self.o.z.inf(sabx)
# a is zero return NaN
with m.If(a1.is_zero):
- m.d.comb += self.o.z.nan(1)
+ m.d.comb += self.o.z.nan(0)
# if a is zero or b zero return signed-a/b
with m.Elif(obz):
"""
smod = FPMulSpecialCasesMod(self.pspec)
dmod = FPAddDeNormMod(self.pspec, False)
+ amod = FPAlignModSingle(self.pspec, False)
- chain = StageChain([smod, dmod])
+ chain = StageChain([smod, dmod, amod])
chain.setup(m, i)
# only needed for break-out (early-out)
# self.out_do_z = smod.o.out_do_z
- self.o = dmod.o
+ self.o = amod.o # output is from last .o in the chain
def process(self, i):
return self.o