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
, 0x40000000, 0x3F800000, 0x40000000)
17 yield from check_case(dut
, 0x3F800000, 0x40000000, 0x3F000000)
18 yield from check_case(dut
, 0x3F800000, 0x40400000, 0x3EAAAAAB)
19 yield from check_case(dut
, 0x40400000, 0x41F80000, 0x3DC6318C)
20 yield from check_case(dut
, 0x41F9EB4D, 0x429A4C70, 0x3ECF52B2)
21 yield from check_case(dut
, 0x7F7FFFFE, 0x70033181, 0x4EF9C4C8)
22 yield from check_case(dut
, 0x7F7FFFFE, 0x70000001, 0x4EFFFFFC)
23 yield from check_case(dut
, 0x7F7FFCFF, 0x70200201, 0x4ECCC7D5)
24 yield from check_case(dut
, 0x70200201, 0x7F7FFCFF, 0x302003E2)
29 stimulus_a
= [0xbf9b1e94, 0x34082401, 0x5e8ef81, 0x5c75da81, 0x2b017]
30 stimulus_b
= [0xc038ed3a, 0xb328cd45, 0x114f3db, 0x2f642a39, 0xff3807ab]
31 yield from run_test(dut
, stimulus_a
, stimulus_b
)
32 count
+= len(stimulus_a
)
33 print (count
, "vectors passed")
36 from itertools
import permutations
37 stimulus_a
= [i
[0] for i
in permutations([0x80000000, 0x00000000, 0x7f800000, 0xff800000, 0x7fc00000, 0xffc00000], 2)]
38 stimulus_b
= [i
[1] for i
in permutations([0x80000000, 0x00000000, 0x7f800000, 0xff800000, 0x7fc00000, 0xffc00000], 2)]
39 yield from run_test(dut
, stimulus_a
, stimulus_b
)
40 count
+= len(stimulus_a
)
41 print (count
, "vectors passed")
44 stimulus_a
= [0x80000000 for i
in xrange(1000)]
45 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
46 yield from run_test(dut
, stimulus_a
, stimulus_b
)
47 count
+= len(stimulus_a
)
48 print (count
, "vectors passed")
50 stimulus_a
= [0x00000000 for i
in xrange(1000)]
51 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
52 yield from run_test(dut
, stimulus_a
, stimulus_b
)
53 count
+= len(stimulus_a
)
54 print (count
, "vectors passed")
56 stimulus_b
= [0x80000000 for i
in xrange(1000)]
57 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
58 yield from run_test(dut
, stimulus_a
, stimulus_b
)
59 count
+= len(stimulus_a
)
60 print (count
, "vectors passed")
62 stimulus_b
= [0x00000000 for i
in xrange(1000)]
63 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
64 yield from run_test(dut
, stimulus_a
, stimulus_b
)
65 count
+= len(stimulus_a
)
66 print (count
, "vectors passed")
68 stimulus_a
= [0x7F800000 for i
in xrange(1000)]
69 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
70 yield from run_test(dut
, stimulus_a
, stimulus_b
)
71 count
+= len(stimulus_a
)
72 print (count
, "vectors passed")
74 stimulus_a
= [0xFF800000 for i
in xrange(1000)]
75 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
76 yield from run_test(dut
, stimulus_a
, stimulus_b
)
77 count
+= len(stimulus_a
)
78 print (count
, "vectors passed")
80 stimulus_b
= [0x7F800000 for i
in xrange(1000)]
81 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
82 yield from run_test(dut
, stimulus_a
, stimulus_b
)
83 count
+= len(stimulus_a
)
84 print (count
, "vectors passed")
86 stimulus_b
= [0xFF800000 for i
in xrange(1000)]
87 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
88 yield from run_test(dut
, stimulus_a
, stimulus_b
)
89 count
+= len(stimulus_a
)
90 print (count
, "vectors passed")
92 stimulus_a
= [0x7FC00000 for i
in xrange(1000)]
93 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
94 yield from run_test(dut
, stimulus_a
, stimulus_b
)
95 count
+= len(stimulus_a
)
96 print (count
, "vectors passed")
98 stimulus_a
= [0xFFC00000 for i
in xrange(1000)]
99 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
100 yield from run_test(dut
, stimulus_a
, stimulus_b
)
101 count
+= len(stimulus_a
)
102 print (count
, "vectors passed")
104 stimulus_b
= [0x7FC00000 for i
in xrange(1000)]
105 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
106 yield from run_test(dut
, stimulus_a
, stimulus_b
)
107 count
+= len(stimulus_a
)
108 print (count
, "vectors passed")
110 stimulus_b
= [0xFFC00000 for i
in xrange(1000)]
111 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
112 yield from run_test(dut
, stimulus_a
, stimulus_b
)
113 count
+= len(stimulus_a
)
114 print (count
, "vectors passed")
117 for i
in xrange(100000):
118 stimulus_a
= [randint(0, 1<<32) for i
in xrange(1000)]
119 stimulus_b
= [randint(0, 1<<32) for i
in xrange(1000)]
120 yield from run_test(dut
, stimulus_a
, stimulus_b
)
122 print (count
, "random vectors passed")
125 if __name__
== '__main__':
126 dut
= FPDIV(width
=32)
127 run_simulation(dut
, testbench(dut
), vcd_name
="test_div.vcd")