2 from random
import randint
3 from random
import seed
5 from nmigen
import Module
, Signal
6 from nmigen
.compat
.sim
import run_simulation
8 from nmigen_div_experiment
import FPDIV
10 from unit_test_single
import (get_mantissa
, get_exponent
, get_sign
, is_nan
,
11 is_inf
, is_pos_inf
, is_neg_inf
,
12 match
, get_case
, check_case
, run_test
)
16 yield from check_case(dut
, 0xbf9b1e94, 0xc038ed3a, 0xc0833e42)
17 yield from check_case(dut
, 0x40000000, 0x3F800000, 0x40000000)
18 yield from check_case(dut
, 0x3F800000, 0x40000000, 0x3F000000)
19 yield from check_case(dut
, 0x3F800000, 0x40400000, 0x3EAAAAAB)
20 yield from check_case(dut
, 0x40400000, 0x41F80000, 0x3DC6318C)
21 yield from check_case(dut
, 0x41F9EB4D, 0x429A4C70, 0x3ECF52B2)
22 yield from check_case(dut
, 0x7F7FFFFE, 0x70033181, 0x4EF9C4C8)
23 yield from check_case(dut
, 0x7F7FFFFE, 0x70000001, 0x4EFFFFFC)
24 yield from check_case(dut
, 0x7F7FFCFF, 0x70200201, 0x4ECCC7D5)
25 yield from check_case(dut
, 0x70200201, 0x7F7FFCFF, 0x302003E2)
30 stimulus_a
= [0xbf9b1e94, 0x34082401, 0x5e8ef81, 0x5c75da81, 0x2b017]
31 stimulus_b
= [0xc038ed3a, 0xb328cd45, 0x114f3db, 0x2f642a39, 0xff3807ab]
32 yield from run_test(dut
, stimulus_a
, stimulus_b
)
33 count
+= len(stimulus_a
)
34 print (count
, "vectors passed")
37 from itertools
import permutations
38 stimulus_a
= [i
[0] for i
in permutations([0x80000000, 0x00000000, 0x7f800000, 0xff800000, 0x7fc00000, 0xffc00000], 2)]
39 stimulus_b
= [i
[1] for i
in permutations([0x80000000, 0x00000000, 0x7f800000, 0xff800000, 0x7fc00000, 0xffc00000], 2)]
40 yield from run_test(dut
, stimulus_a
, stimulus_b
)
41 count
+= len(stimulus_a
)
42 print (count
, "vectors passed")
45 stimulus_a
= [0x80000000 for i
in xrange(1000)]
46 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
47 yield from run_test(dut
, stimulus_a
, stimulus_b
)
48 count
+= len(stimulus_a
)
49 print (count
, "vectors passed")
51 stimulus_a
= [0x00000000 for i
in xrange(1000)]
52 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
53 yield from run_test(dut
, stimulus_a
, stimulus_b
)
54 count
+= len(stimulus_a
)
55 print (count
, "vectors passed")
57 stimulus_b
= [0x80000000 for i
in xrange(1000)]
58 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
59 yield from run_test(dut
, stimulus_a
, stimulus_b
)
60 count
+= len(stimulus_a
)
61 print (count
, "vectors passed")
63 stimulus_b
= [0x00000000 for i
in xrange(1000)]
64 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
65 yield from run_test(dut
, stimulus_a
, stimulus_b
)
66 count
+= len(stimulus_a
)
67 print (count
, "vectors passed")
69 stimulus_a
= [0x7F800000 for i
in xrange(1000)]
70 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
71 yield from run_test(dut
, stimulus_a
, stimulus_b
)
72 count
+= len(stimulus_a
)
73 print (count
, "vectors passed")
75 stimulus_a
= [0xFF800000 for i
in xrange(1000)]
76 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
77 yield from run_test(dut
, stimulus_a
, stimulus_b
)
78 count
+= len(stimulus_a
)
79 print (count
, "vectors passed")
81 stimulus_b
= [0x7F800000 for i
in xrange(1000)]
82 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
83 yield from run_test(dut
, stimulus_a
, stimulus_b
)
84 count
+= len(stimulus_a
)
85 print (count
, "vectors passed")
87 stimulus_b
= [0xFF800000 for i
in xrange(1000)]
88 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
89 yield from run_test(dut
, stimulus_a
, stimulus_b
)
90 count
+= len(stimulus_a
)
91 print (count
, "vectors passed")
93 stimulus_a
= [0x7FC00000 for i
in xrange(1000)]
94 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
95 yield from run_test(dut
, stimulus_a
, stimulus_b
)
96 count
+= len(stimulus_a
)
97 print (count
, "vectors passed")
99 stimulus_a
= [0xFFC00000 for i
in xrange(1000)]
100 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
101 yield from run_test(dut
, stimulus_a
, stimulus_b
)
102 count
+= len(stimulus_a
)
103 print (count
, "vectors passed")
105 stimulus_b
= [0x7FC00000 for i
in xrange(1000)]
106 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
107 yield from run_test(dut
, stimulus_a
, stimulus_b
)
108 count
+= len(stimulus_a
)
109 print (count
, "vectors passed")
111 stimulus_b
= [0xFFC00000 for i
in xrange(1000)]
112 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
113 yield from run_test(dut
, stimulus_a
, stimulus_b
)
114 count
+= len(stimulus_a
)
115 print (count
, "vectors passed")
118 for i
in xrange(100000):
119 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
120 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
121 yield from run_test(dut
, stimulus_a
, stimulus_b
)
123 print (count
, "random vectors passed")
126 if __name__
== '__main__':
127 dut
= FPDIV(width
=32)
128 run_simulation(dut
, testbench(dut
), vcd_name
="test_div.vcd")