-# IEEE754 Floating Point Conversion
-# Copyright (C) 2019 Luke Kenneth Casson Leighton <lkcl@lkcl.net>
+"""IEEE754 Floating Point Conversion
+Copyright (C) 2019 Luke Kenneth Casson Leighton <lkcl@lkcl.net>
+
+"""
import sys
import functools
-from nmigen import Module, Signal, Cat, Const, Mux, Elaboratable
-from nmigen.cli import main, verilog
-
from nmutil.singlepipe import ControlBase
from nmutil.concurrentunit import ReservationStations, num_bits
-from ieee754.fpcommon.getop import FPADDBaseData
-from ieee754.fpcommon.pack import FPPackData
from ieee754.fpcommon.normtopack import FPNormToPack
-
-
-from nmigen import Module, Signal, Elaboratable
-from math import log
-
-from ieee754.fpcommon.getop import FPPipeContext
-
from ieee754.pipeline import PipelineSpec, DynamicPipe
from ieee754.fcvt.float2int import FPCVTFloatToIntMod
from ieee754.fcvt.downsize import FPCVTDownConvertMod
+# not used, yet
+# from nmigen import Signal
class SignedOp:
def __init__(self):
self.signed = Signal(reset_less=True)
sc = modkls(in_pspec, out_pspec)
in_pspec.stage = sc
super().__init__(in_pspec)
- self.out = self.ospec(None)
+# this one is slightly weird-looking because of course the INT output
+# is, duh, an INT, so of course does not get "FP normalised".
class FPCVTFtoIntBasePipe(ControlBase):
def __init__(self, modkls, e_extra, in_pspec, out_pspec):
ControlBase.__init__(self)
class FPCVTMuxInOutBase(ReservationStations):
""" Reservation-Station version of FPCVT pipeline.
- * fan-in on inputs (an array of FPADDBaseData: a,b,mid)
- * 2-stage multiplier pipeline
+ * fan-in on inputs (an array of FPBaseData: a,b,mid)
+ * converter pipeline (alu)
* fan-out on outputs (an array of FPPackData: z,mid)
Fan-in and Fan-out are combinatorial.
self.alu = pkls(modkls, e_extra, self.in_pspec, self.out_pspec)
ReservationStations.__init__(self, num_rows)
- def i_specfn(self):
- return FPADDBaseData(self.in_pspec)
- def o_specfn(self):
- return FPPackData(self.out_pspec)
+class FPCVTF2IntMuxInOut(FPCVTMuxInOutBase):
+ """ Reservation-Station version of FPCVT pipeline.
+ * fan-in on inputs (an array of FPBaseData: a,b,mid)
+ * 2-stage multiplier pipeline
+ * fan-out on outputs (an array of FPPackData: z,mid)
-def getkls(*args, **kwargs):
- print ("getkls", args, kwargs)
- return FPCVTMuxInOutBase(*args, **kwargs)
+ Fan-in and Fan-out are combinatorial.
+ """
+
+ def __init__(self, in_width, out_width, num_rows, op_wid=0):
+ FPCVTMuxInOutBase.__init__(self, FPCVTFloatToIntMod, False,
+ in_width, out_width,
+ num_rows, op_wid,
+ pkls=FPCVTFtoIntBasePipe)
# factory which creates near-identical class structures that differ by
("FPCVTIntMuxInOut", FPCVTIntToFloatMod, True, ),
]
+def getkls(*args, **kwargs):
+ print ("getkls", args, kwargs)
+ return FPCVTMuxInOutBase(*args, **kwargs)
+
for (name, kls, e_extra) in muxfactoryinput:
fn = functools.partial(getkls, kls, e_extra)
setattr(sys.modules[__name__], name, fn)
-class FPCVTF2IntMuxInOut(FPCVTMuxInOutBase):
- """ Reservation-Station version of FPCVT pipeline.
-
- * fan-in on inputs (an array of FPADDBaseData: a,b,mid)
- * 2-stage multiplier pipeline
- * fan-out on outputs (an array of FPPackData: z,mid)
-
- Fan-in and Fan-out are combinatorial.
- """
-
- def __init__(self, in_width, out_width, num_rows, op_wid=0):
- FPCVTMuxInOutBase.__init__(self, FPCVTFloatToIntMod, False,
- in_width, out_width,
- num_rows, op_wid,
- pkls=FPCVTFtoIntBasePipe)
-