1 from nmigen
import Module
, Signal
2 from nmigen
.compat
.sim
import run_simulation
4 from nmigen_add_experiment
import FPADD
8 from random
import randint
9 from random
import seed
11 from unit_test_double
import (get_mantissa
, get_exponent
, get_sign
, is_nan
,
12 is_inf
, is_pos_inf
, is_neg_inf
,
13 match
, get_case
, check_case
, run_test
)
17 yield from check_case(dut
, 0, 0, 0)
18 yield from check_case(dut
, 0x3FF0000000000000, 0x4000000000000000,
20 yield from check_case(dut
, 0x4000000000000000, 0x3FF0000000000000,
22 yield from check_case(dut
, 0x4056C00000000000, 0x4042800000000000,
24 yield from check_case(dut
, 0x4056C00000000000, 0x4042EA3D70A3D70A,
30 stimulus_a
= [0x3ff00000000000c5, 0xff80000000000000]
31 stimulus_b
= [0xbd28a404211fb72b, 0x7f80000000000000]
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([
46 stimulus_b
= [i
[1] for i
in permutations([
54 yield from run_test(dut
, stimulus_a
, stimulus_b
)
55 count
+= len(stimulus_a
)
56 print (count
, "vectors passed")
59 stimulus_a
= [0x8000000000000000 for i
in range(1000)]
60 stimulus_b
= [randint(0, 1<<64) for i
in range(1000)]
61 yield from run_test(dut
, stimulus_a
, stimulus_b
)
62 count
+= len(stimulus_a
)
63 print (count
, "vectors passed")
65 stimulus_a
= [0x0000000000000000 for i
in range(1000)]
66 stimulus_b
= [randint(0, 1<<64) for i
in range(1000)]
67 yield from run_test(dut
, stimulus_a
, stimulus_b
)
68 count
+= len(stimulus_a
)
69 print (count
, "vectors passed")
71 stimulus_b
= [0x8000000000000000 for i
in range(1000)]
72 stimulus_a
= [randint(0, 1<<64) for i
in range(1000)]
73 yield from run_test(dut
, stimulus_a
, stimulus_b
)
74 count
+= len(stimulus_a
)
75 print (count
, "vectors passed")
77 stimulus_b
= [0x0000000000000000 for i
in range(1000)]
78 stimulus_a
= [randint(0, 1<<64) for i
in range(1000)]
79 yield from run_test(dut
, stimulus_a
, stimulus_b
)
80 count
+= len(stimulus_a
)
81 print (count
, "vectors passed")
83 stimulus_a
= [0x7FF8000000000000 for i
in range(1000)]
84 stimulus_b
= [randint(0, 1<<64) for i
in range(1000)]
85 yield from run_test(dut
, stimulus_a
, stimulus_b
)
86 count
+= len(stimulus_a
)
87 print (count
, "vectors passed")
89 stimulus_a
= [0xFFF8000000000000 for i
in range(1000)]
90 stimulus_b
= [randint(0, 1<<64) for i
in range(1000)]
91 yield from run_test(dut
, stimulus_a
, stimulus_b
)
92 count
+= len(stimulus_a
)
93 print (count
, "vectors passed")
95 stimulus_b
= [0x7FF8000000000000 for i
in range(1000)]
96 stimulus_a
= [randint(0, 1<<64) for i
in range(1000)]
97 yield from run_test(dut
, stimulus_a
, stimulus_b
)
98 count
+= len(stimulus_a
)
99 print (count
, "vectors passed")
101 stimulus_b
= [0xFFF8000000000000 for i
in range(1000)]
102 stimulus_a
= [randint(0, 1<<64) for i
in range(1000)]
103 yield from run_test(dut
, stimulus_a
, stimulus_b
)
104 count
+= len(stimulus_a
)
105 print (count
, "vectors passed")
107 stimulus_a
= [0x7FF0000000000000 for i
in range(1000)]
108 stimulus_b
= [randint(0, 1<<64) for i
in range(1000)]
109 yield from run_test(dut
, stimulus_a
, stimulus_b
)
110 count
+= len(stimulus_a
)
111 print (count
, "vectors passed")
113 stimulus_a
= [0xFFF0000000000000 for i
in range(1000)]
114 stimulus_b
= [randint(0, 1<<64) for i
in range(1000)]
115 yield from run_test(dut
, stimulus_a
, stimulus_b
)
116 count
+= len(stimulus_a
)
117 print (count
, "vectors passed")
119 stimulus_b
= [0x7FF0000000000000 for i
in range(1000)]
120 stimulus_a
= [randint(0, 1<<64) for i
in range(1000)]
121 yield from run_test(dut
, stimulus_a
, stimulus_b
)
122 count
+= len(stimulus_a
)
123 print (count
, "vectors passed")
125 stimulus_b
= [0xFFF0000000000000 for i
in range(1000)]
126 stimulus_a
= [randint(0, 1<<64) for i
in range(1000)]
127 yield from run_test(dut
, stimulus_a
, stimulus_b
)
128 count
+= len(stimulus_a
)
129 print (count
, "vectors passed")
132 for i
in range(100000):
133 stimulus_a
= [randint(0, 1<<64) for i
in range(1000)]
134 stimulus_b
= [randint(0, 1<<64) for i
in range(1000)]
135 yield from run_test(dut
, stimulus_a
, stimulus_b
)
137 print (count
, "random vectors passed")
140 if __name__
== '__main__':
141 dut
= FPADD(width
=64, single_cycle
=True)
142 run_simulation(dut
, testbench(dut
), vcd_name
="test_add64.vcd")