X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fadd%2Ftest_add64.py;h=dcca12c62dbd7d59a583fcd411686b1cd7483427;hb=6bff1a997f3846872cf489c24b5c01426c4dc97c;hp=ecb5dcc2ffaf577e45a832c87f1acabe255c76c2;hpb=d806377a3656d69c3497c2ab9ff69e6c0e7bc5f4;p=ieee754fpu.git diff --git a/src/add/test_add64.py b/src/add/test_add64.py index ecb5dcc2..dcca12c6 100644 --- a/src/add/test_add64.py +++ b/src/add/test_add64.py @@ -1,5 +1,6 @@ from nmigen import Module, Signal from nmigen.compat.sim import run_simulation +from operator import add from nmigen_add_experiment import FPADD @@ -10,7 +11,8 @@ from random import seed from unit_test_double import (get_mantissa, get_exponent, get_sign, is_nan, is_inf, is_pos_inf, is_neg_inf, - match, get_case, check_case, run_test) + match, get_case, check_case, run_test, + run_edge_cases, run_corner_cases) def testbench(dut): @@ -29,115 +31,15 @@ def testbench(dut): #regression tests stimulus_a = [0x3ff00000000000c5, 0xff80000000000000] stimulus_b = [0xbd28a404211fb72b, 0x7f80000000000000] - yield from run_test(dut, stimulus_a, stimulus_b) + yield from run_test(dut, stimulus_a, stimulus_b, add) count += len(stimulus_a) print (count, "vectors passed") - #corner cases - from itertools import permutations - stimulus_a = [i[0] for i in permutations([ - 0x8000000000000000, - 0x0000000000000000, - 0x7ff8000000000000, - 0xfff8000000000000, - 0x7ff0000000000000, - 0xfff0000000000000 - ], 2)] - stimulus_b = [i[1] for i in permutations([ - 0x8000000000000000, - 0x0000000000000000, - 0x7ff8000000000000, - 0xfff8000000000000, - 0x7ff0000000000000, - 0xfff0000000000000 - ], 2)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - #edge cases - stimulus_a = [0x8000000000000000 for i in range(1000)] - stimulus_b = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_a = [0x0000000000000000 for i in range(1000)] - stimulus_b = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_b = [0x8000000000000000 for i in range(1000)] - stimulus_a = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_b = [0x0000000000000000 for i in range(1000)] - stimulus_a = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_a = [0x7FF8000000000000 for i in range(1000)] - stimulus_b = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_a = [0xFFF8000000000000 for i in range(1000)] - stimulus_b = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_b = [0x7FF8000000000000 for i in range(1000)] - stimulus_a = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_b = [0xFFF8000000000000 for i in range(1000)] - stimulus_a = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_a = [0x7FF0000000000000 for i in range(1000)] - stimulus_b = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_a = [0xFFF0000000000000 for i in range(1000)] - stimulus_b = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_b = [0x7FF0000000000000 for i in range(1000)] - stimulus_a = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - stimulus_b = [0xFFF0000000000000 for i in range(1000)] - stimulus_a = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += len(stimulus_a) - print (count, "vectors passed") - - #seed(0) - for i in range(100000): - stimulus_a = [randint(0, 1<<64) for i in range(1000)] - stimulus_b = [randint(0, 1<<64) for i in range(1000)] - yield from run_test(dut, stimulus_a, stimulus_b) - count += 1000 - print (count, "random vectors passed") + yield from run_corner_cases(dut, count, add) + yield from run_edge_cases(dut, count, add) if __name__ == '__main__': - dut = FPADD(width=64, single_cycle=True) + dut = FPADD(width=64, single_cycle=False) run_simulation(dut, testbench(dut), vcd_name="test_add64.vcd")