--- /dev/null
+""" test of FPCVTMuxInOut
+"""
+
+from ieee754.fcvt.pipeline import (FPCVTMuxInOut,)
+from ieee754.fpcommon.test.case_gen import run_pipe_fp
+from ieee754.fpcommon.test import unit_test_single
+from ieee754.fcvt.test.fcvt_data_32_16 import regressions
+
+from sfpy import Float32, Float16
+
+def fcvt_16(x):
+ return Float16(x)
+
+def test_pipe_fp32_16():
+ dut = FPCVTMuxInOut(32, 16, 4)
+ run_pipe_fp(dut, 32, "add", unit_test_single, Float32,
+ regressions, fcvt_16, 10, True)
+
+if __name__ == '__main__':
+ test_pipe_fp32_16()
+
def get_rand1(mod, fixed_num, maxcount, width, single_op=False):
stimulus_b = [get_rval(width) for i in range(maxcount)]
if single_op:
- return stimulus_b
+ yield from stimulus_b
+ return
stimulus_a = replicate(fixed_num, maxcount)
yield from zip(stimulus_a, stimulus_b)
yield from zip(stimulus_b, stimulus_a)
stimulus_b = [mod.set_exponent(get_rval(width), mod.max_e) \
for i in range(maxcount)]
if single_op:
- return stimulus_b
+ yield from stimulus_b
+ return
stimulus_a = replicate(fixed_num, maxcount)
yield from zip(stimulus_a, stimulus_b)
yield from zip(stimulus_b, stimulus_a)
stimulus_b = [mod.set_exponent(get_rval(width), -mod.max_e+1) \
for i in range(maxcount)]
if single_op:
- return stimulus_b
+ yield from stimulus_b
+ return
stimulus_a = replicate(fixed_num, maxcount)
yield from zip(stimulus_a, stimulus_b)
yield from zip(stimulus_b, stimulus_a)
stimulus_b = [mod.set_exponent(get_rval(width), -mod.max_e+2) \
for i in range(maxcount)]
if single_op:
- return stimulus_b
+ yield from stimulus_b
+ return
stimulus_a = replicate(fixed_num, maxcount)
yield from zip(stimulus_a, stimulus_b)
yield from zip(stimulus_b, stimulus_a)
stimulus_b = [mod.set_exponent(get_rval(width), mod.max_e-1) \
for i in range(maxcount)]
if single_op:
- return stimulus_b
+ yield from stimulus_b
+ return
stimulus_a = replicate(fixed_num, maxcount)
yield from zip(stimulus_a, stimulus_b)
yield from zip(stimulus_b, stimulus_a)
# random
stimulus_b = [get_rval(width) for i in range(maxcount)]
if single_op:
- return stimulus_b
+ yield from stimulus_b
+ return
stimulus_a = replicate(fixed_num, maxcount)
yield from zip(stimulus_a, stimulus_b)
yield from zip(stimulus_b, stimulus_a)
self.count, self.single_op)
def run_cornercases(self):
- vals = repeat(self.dut.num_rows, get_corner_cases(self.mod))
+ ccs = get_corner_cases(self.mod, self.single_op)
+ vals = repeat(self.dut.num_rows, ccs)
tname = "test_fp%s_pipe_fp%d_cornercases" % (self.name, self.width)
runfp(self.dut, self.width, tname, self.fmod, self.fpfn, vals=vals,
single_op=self.single_op)
def run_regressions(self, regressions_fn):
vals = repeat(self.dut.num_rows, regressions_fn())
- print ("regressions", vals)
+ #print ("regressions", self.single_op, vals)
tname = "test_fp%s_pipe_fp%d_regressions" % (self.name, self.width)
runfp(self.dut, self.width, tname, self.fmod, self.fpfn, vals=vals,
single_op=self.single_op)
self.do[muxid] = []
for i in range(self.tlen):
if self.single_op:
- (op1, ) = vals.pop(0)
+ #print ("vals", vals)
+ op1 = vals.pop(0)
+ if isinstance(op1, tuple):
+ assert len(op1) == 1
+ op1 = op1[0]
res = self.fpop(self.fpkls(op1))
self.di[muxid][i] = (op1, )
else:
"""
vals = list(vals)
n_to_repeat = len(vals) % num_rows
+ #print ("repeat", vals)
return vals + [vals[-1]] * n_to_repeat
def pipe_cornercases_repeat(dut, name, mod, fmod, width, fn, cc, fpfn, count,
single_op=False):
for i, fixed_num in enumerate(cc(mod)):
- vals = fn(mod, fixed_num, count, width)
+ vals = fn(mod, fixed_num, count, width, single_op)
vals = repeat(dut.num_rows, vals)
+ #print ("repeat", i, fn, single_op, list(vals))
fmt = "test_pipe_fp%d_%s_cornercases_%d"
runfp(dut, width, fmt % (width, name, i),
fmod, fpfn, vals=vals, single_op=single_op)