1 |
6 |
aloy.amber |
library ieee;
|
2 |
|
|
use ieee.std_logic_1164.all;
|
3 |
|
|
use work.fp_generic.all;
|
4 |
|
|
use work.fpmult_comp.all;
|
5 |
|
|
|
6 |
|
|
entity test_fpmult is
|
7 |
|
|
end;
|
8 |
|
|
|
9 |
|
|
architecture testbench of test_fpmult is
|
10 |
8 |
aloy.amber |
type test_condition_type is record
|
11 |
|
|
a:fp_type;
|
12 |
|
|
b:fp_type;
|
13 |
|
|
p:fp_type;
|
14 |
|
|
msg:string(1 to 43);
|
15 |
|
|
end record;
|
16 |
|
|
|
17 |
|
|
type test_condition_array_type is array(positive range <>) of test_condition_type;
|
18 |
|
|
|
19 |
6 |
aloy.amber |
signal clk:std_logic:='0';
|
20 |
|
|
signal d:fpmult_in_type;
|
21 |
|
|
signal q:fpmult_out_type;
|
22 |
8 |
aloy.amber |
|
23 |
|
|
constant number_of_stages:integer:=25;
|
24 |
|
|
constant clock_period:time:=20 ns;
|
25 |
|
|
constant pipeline_delay:time:=number_of_stages*clock_period;
|
26 |
|
|
|
27 |
|
|
constant plus_zero:fp_type:=x"00000000";
|
28 |
|
|
constant minus_zero:fp_type:=x"80000000";
|
29 |
|
|
|
30 |
|
|
constant plus_normal:fp_type:=x"3FB76CE1";
|
31 |
|
|
constant minus_normal:fp_type:=x"BFB76CE1";
|
32 |
|
|
|
33 |
|
|
constant plus_normal_squared:fp_type:=x"40036CD8";
|
34 |
|
|
constant minus_normal_squared:fp_type:=x"C0036CD8";
|
35 |
|
|
|
36 |
|
|
constant plus_subnormal:fp_type:=x"00051D75";
|
37 |
|
|
constant minus_subnormal:fp_type:=x"80051D75";
|
38 |
|
|
|
39 |
|
|
constant plus_infinite:fp_type:=x"7F800000";
|
40 |
|
|
constant minus_infinite:fp_type:=x"FF800000";
|
41 |
|
|
|
42 |
|
|
constant plus_qnan:fp_type:=x"7FC00000";
|
43 |
|
|
constant minus_qnan:fp_type:=x"FFC00000";
|
44 |
|
|
|
45 |
|
|
constant plus_snan:fp_type:=x"7FBFFFFF";
|
46 |
|
|
constant minus_snan:fp_type:=x"FFBFFFFF";
|
47 |
|
|
|
48 |
|
|
constant multiplier_testset:test_condition_array_type:=
|
49 |
|
|
(
|
50 |
|
|
----------------------------------------------------------------------------
|
51 |
|
|
-- zero * zero
|
52 |
|
|
----------------------------------------------------------------------------
|
53 |
|
|
( plus_zero, plus_zero, plus_zero, "+0 * +0 != +0 " ),
|
54 |
|
|
( plus_zero, minus_zero, minus_zero, "+0 * -0 != -0 " ),
|
55 |
|
|
( minus_zero, plus_zero, minus_zero, "-0 * +0 != -0 " ),
|
56 |
|
|
( minus_zero, minus_zero, plus_zero, "-0 * -0 != +0 " ),
|
57 |
|
|
|
58 |
|
|
----------------------------------------------------------------------------
|
59 |
|
|
-- zero * normal
|
60 |
|
|
----------------------------------------------------------------------------
|
61 |
|
|
( plus_zero, plus_normal, plus_zero, "+0 * +normal != +0 " ),
|
62 |
|
|
( plus_zero, minus_normal, minus_zero, "+0 * -normal != -0 " ),
|
63 |
|
|
( minus_zero, plus_normal, minus_zero, "-0 * +normal != -0 " ),
|
64 |
|
|
( minus_zero, minus_normal, plus_zero, "-0 * -normal != +0 " ),
|
65 |
|
|
|
66 |
|
|
----------------------------------------------------------------------------
|
67 |
|
|
-- normal * zero
|
68 |
|
|
----------------------------------------------------------------------------
|
69 |
|
|
( plus_normal, plus_zero, plus_zero, "+normal * +0 != +0 " ),
|
70 |
|
|
( plus_normal, minus_zero, minus_zero, "+normal * -0 != -0 " ),
|
71 |
|
|
( minus_normal, plus_zero, minus_zero, "-normal * +0 != -0 " ),
|
72 |
|
|
( minus_normal, minus_zero, plus_zero, "-normal * -0 != +0 " ),
|
73 |
|
|
|
74 |
|
|
----------------------------------------------------------------------------
|
75 |
|
|
-- zero * subnormal
|
76 |
|
|
----------------------------------------------------------------------------
|
77 |
|
|
( plus_zero, plus_subnormal, plus_zero, "+0 * +subnormal != +0 " ),
|
78 |
|
|
( plus_zero, minus_subnormal, minus_zero, "+0 * -subnormal != -0 " ),
|
79 |
|
|
( minus_zero, plus_subnormal, minus_zero, "-0 * +subnormal != -0 " ),
|
80 |
|
|
( minus_zero, minus_subnormal, plus_zero, "-0 * -subnormal != +0 " ),
|
81 |
|
|
|
82 |
|
|
----------------------------------------------------------------------------
|
83 |
|
|
-- subnormal * zero
|
84 |
|
|
----------------------------------------------------------------------------
|
85 |
|
|
( plus_subnormal, plus_zero, plus_zero, "+subnormal * +0 != +0 " ),
|
86 |
|
|
( plus_subnormal, minus_zero, minus_zero, "+subnormal * -0 != -0 " ),
|
87 |
|
|
( minus_subnormal, plus_zero, minus_zero, "-subnormal * +0 != -0 " ),
|
88 |
|
|
( minus_subnormal, minus_zero, plus_zero, "-subnormal * -0 != +0 " ),
|
89 |
|
|
|
90 |
|
|
----------------------------------------------------------------------------
|
91 |
|
|
-- zero * infinite
|
92 |
|
|
----------------------------------------------------------------------------
|
93 |
|
|
( plus_zero, plus_infinite, plus_qnan, "+0 * +infinite != +qnan " ),
|
94 |
|
|
( plus_zero, minus_infinite, minus_qnan, "+0 * -infinite != -qnan " ),
|
95 |
|
|
( minus_zero, plus_infinite, minus_qnan, "-0 * +infinite != -qnan " ),
|
96 |
|
|
( minus_zero, minus_infinite, plus_qnan, "-0 * -infinite != +qnan " ),
|
97 |
|
|
|
98 |
|
|
----------------------------------------------------------------------------
|
99 |
|
|
-- infinite * zero
|
100 |
|
|
----------------------------------------------------------------------------
|
101 |
|
|
( plus_infinite, plus_zero, plus_qnan, "+infinite * +0 != +qnan " ),
|
102 |
|
|
( plus_infinite, minus_zero, minus_qnan, "+infinite * -0 != -qnan " ),
|
103 |
|
|
( minus_infinite, plus_zero, minus_qnan, "-infinite * +0 != -qnan " ),
|
104 |
|
|
( minus_infinite, minus_zero, plus_qnan, "-infinite * -0 != +qnan " ),
|
105 |
|
|
|
106 |
|
|
----------------------------------------------------------------------------
|
107 |
|
|
-- zero * qnan
|
108 |
|
|
----------------------------------------------------------------------------
|
109 |
|
|
( plus_zero, plus_qnan, plus_qnan, "+0 * +qnan != +qnan " ),
|
110 |
|
|
( plus_zero, minus_qnan, minus_qnan, "+0 * -qnan != -qnan " ),
|
111 |
|
|
( minus_zero, plus_qnan, minus_qnan, "-0 * +qnan != -qnan " ),
|
112 |
|
|
( minus_zero, minus_qnan, plus_qnan, "-0 * -qnan != +qnan " ),
|
113 |
|
|
|
114 |
|
|
----------------------------------------------------------------------------
|
115 |
|
|
-- qnan * zero
|
116 |
|
|
----------------------------------------------------------------------------
|
117 |
|
|
( plus_qnan, plus_zero, plus_qnan, "+qnan * +0 != +qnan " ),
|
118 |
|
|
( plus_qnan, minus_zero, minus_qnan, "+qnan * -0 != -qnan " ),
|
119 |
|
|
( minus_qnan, plus_zero, minus_qnan, "-qnan * +0 != -qnan " ),
|
120 |
|
|
( minus_qnan, minus_zero, plus_qnan, "-qnan * -0 != +qnan " ),
|
121 |
|
|
|
122 |
|
|
----------------------------------------------------------------------------
|
123 |
|
|
-- zero * snan
|
124 |
|
|
----------------------------------------------------------------------------
|
125 |
|
|
( plus_zero, plus_snan, plus_qnan, "+0 * +snan != +qnan " ),
|
126 |
|
|
( plus_zero, minus_snan, minus_qnan, "+0 * -snan != -qnan " ),
|
127 |
|
|
( minus_zero, plus_snan, minus_qnan, "-0 * +snan != -qnan " ),
|
128 |
|
|
( minus_zero, minus_snan, plus_qnan, "-0 * -snan != +qnan " ),
|
129 |
|
|
|
130 |
|
|
----------------------------------------------------------------------------
|
131 |
|
|
-- snan * zero
|
132 |
|
|
----------------------------------------------------------------------------
|
133 |
|
|
( plus_snan, plus_zero, plus_qnan, "+snan * +0 != +qnan " ),
|
134 |
|
|
( plus_snan, minus_zero, minus_qnan, "+snan * -0 != -qnan " ),
|
135 |
|
|
( minus_snan, plus_zero, minus_qnan, "-snan * +0 != -qnan " ),
|
136 |
|
|
( minus_snan, minus_zero, plus_qnan, "-snan * -0 != +qnan " ),
|
137 |
|
|
|
138 |
|
|
----------------------------------------------------------------------------
|
139 |
|
|
-- normal * normal
|
140 |
|
|
----------------------------------------------------------------------------
|
141 |
|
|
( plus_normal, plus_normal, plus_normal_squared, "+normal * +normal != +normal " ),
|
142 |
|
|
( plus_normal, minus_normal, minus_normal_squared, "+normal * -normal != -normal " ),
|
143 |
|
|
( minus_normal, plus_normal, minus_normal_squared, "-normal * +normal != -normal " ),
|
144 |
|
|
( minus_normal, minus_normal, plus_normal_squared, "-normal * -normal != +normal " ),
|
145 |
|
|
|
146 |
|
|
----------------------------------------------------------------------------
|
147 |
|
|
-- normal * subnormal
|
148 |
|
|
----------------------------------------------------------------------------
|
149 |
|
|
( plus_normal, plus_subnormal, plus_zero, "+normal * +subnormal != +0 " ),
|
150 |
|
|
( plus_normal, minus_subnormal, minus_zero, "+normal * -subnormal != -0 " ),
|
151 |
|
|
( minus_normal, plus_subnormal, minus_zero, "-normal * +subnormal != -0 " ),
|
152 |
|
|
( minus_normal, minus_subnormal, plus_zero, "-normal * -subnormal != +0 " ),
|
153 |
|
|
|
154 |
|
|
----------------------------------------------------------------------------
|
155 |
|
|
-- subnormal * normal
|
156 |
|
|
----------------------------------------------------------------------------
|
157 |
|
|
( plus_subnormal, plus_normal, plus_zero, "+subnormal * +normal != +0 " ),
|
158 |
|
|
( plus_subnormal, minus_normal, minus_zero, "+subnormal * -normal != -0 " ),
|
159 |
|
|
( minus_subnormal, plus_normal, minus_zero, "-subnormal * +normal != -0 " ),
|
160 |
|
|
( minus_subnormal, minus_normal, plus_zero, "-subnormal * -normal != +0 " ),
|
161 |
|
|
|
162 |
|
|
----------------------------------------------------------------------------
|
163 |
|
|
-- normal * infinite
|
164 |
|
|
----------------------------------------------------------------------------
|
165 |
|
|
( plus_normal, plus_infinite, plus_infinite, "+normal * +infinite != +infinite " ),
|
166 |
|
|
( plus_normal, minus_infinite, minus_infinite, "+normal * -infinite != -infinite " ),
|
167 |
|
|
( minus_normal, plus_infinite, minus_infinite, "-normal * +infinite != -infinite " ),
|
168 |
|
|
( minus_normal, minus_infinite, plus_infinite, "-normal * -infinite != +infinite " ),
|
169 |
|
|
|
170 |
|
|
----------------------------------------------------------------------------
|
171 |
|
|
-- infinite * normal
|
172 |
|
|
----------------------------------------------------------------------------
|
173 |
|
|
( plus_infinite, plus_normal, plus_infinite, "+infinite * +normal != +infinite " ),
|
174 |
|
|
( plus_infinite, minus_normal, minus_infinite, "+infinite * -normal != -infinite " ),
|
175 |
|
|
( minus_infinite, plus_normal, minus_infinite, "-infinite * +normal != -infinite " ),
|
176 |
|
|
( minus_infinite, minus_normal, plus_infinite, "-infinite * -normal != +infinite " ),
|
177 |
|
|
|
178 |
|
|
----------------------------------------------------------------------------
|
179 |
|
|
-- normal * qnan
|
180 |
|
|
----------------------------------------------------------------------------
|
181 |
|
|
( plus_normal, plus_qnan, plus_qnan, "+normal * +qnan != +qnan " ),
|
182 |
|
|
( plus_normal, minus_qnan, minus_qnan, "+normal * -qnan != -qnan " ),
|
183 |
|
|
( minus_normal, plus_qnan, minus_qnan, "-normal * +qnan != -qnan " ),
|
184 |
|
|
( minus_normal, minus_qnan, plus_qnan, "-normal * -qnan != +qnan " ),
|
185 |
|
|
|
186 |
|
|
----------------------------------------------------------------------------
|
187 |
|
|
-- qnan * normal
|
188 |
|
|
----------------------------------------------------------------------------
|
189 |
|
|
( plus_qnan, plus_normal, plus_qnan, "+qnan * +normal != +qnan " ),
|
190 |
|
|
( plus_qnan, minus_normal, minus_qnan, "+qnan * -normal != -qnan " ),
|
191 |
|
|
( minus_qnan, plus_normal, minus_qnan, "-qnan * +normal != -qnan " ),
|
192 |
|
|
( minus_qnan, minus_normal, plus_qnan, "-qnan * -normal != +qnan " ),
|
193 |
|
|
|
194 |
|
|
----------------------------------------------------------------------------
|
195 |
|
|
-- normal * snan
|
196 |
|
|
----------------------------------------------------------------------------
|
197 |
|
|
( plus_normal, plus_snan, plus_qnan, "+normal * +snan != +qnan " ),
|
198 |
|
|
( plus_normal, minus_snan, minus_qnan, "+normal * -snan != -qnan " ),
|
199 |
|
|
( minus_normal, plus_snan, minus_qnan, "-normal * +snan != -qnan " ),
|
200 |
|
|
( minus_normal, minus_snan, plus_qnan, "-normal * -snan != +qnan " ),
|
201 |
|
|
|
202 |
|
|
----------------------------------------------------------------------------
|
203 |
|
|
-- snan * normal
|
204 |
|
|
----------------------------------------------------------------------------
|
205 |
|
|
( plus_snan, plus_normal, plus_qnan, "+snan * +normal != +qnan " ),
|
206 |
|
|
( plus_snan, minus_normal, minus_qnan, "+snan * -normal != -qnan " ),
|
207 |
|
|
( minus_snan, plus_normal, minus_qnan, "-snan * +normal != -qnan " ),
|
208 |
|
|
( minus_snan, minus_normal, plus_qnan, "-snan * -normal != +qnan " ),
|
209 |
|
|
|
210 |
|
|
----------------------------------------------------------------------------
|
211 |
|
|
-- subnormal * subnormal
|
212 |
|
|
----------------------------------------------------------------------------
|
213 |
|
|
( plus_subnormal, plus_subnormal, plus_zero, "+subnormal * +subnormal != +0 " ),
|
214 |
|
|
( plus_subnormal, minus_subnormal, minus_zero, "+subnormal * -subnormal != -0 " ),
|
215 |
|
|
( minus_subnormal, plus_subnormal, minus_zero, "-subnormal * +subnormal != -0 " ),
|
216 |
|
|
( minus_subnormal, minus_subnormal, plus_zero, "-subnormal * -subnormal != +0 " ),
|
217 |
|
|
|
218 |
|
|
----------------------------------------------------------------------------
|
219 |
|
|
-- subnormal * infinite
|
220 |
|
|
----------------------------------------------------------------------------
|
221 |
|
|
( plus_subnormal, plus_infinite, plus_qnan, "+subnormal * +infinite != +qnan " ),
|
222 |
|
|
( plus_subnormal, minus_infinite, minus_qnan, "+subnormal * -infinite != -qnan " ),
|
223 |
|
|
( minus_subnormal, plus_infinite, minus_qnan, "-subnormal * +infinite != -qnan " ),
|
224 |
|
|
( minus_subnormal, minus_infinite, plus_qnan, "-subnormal * -infinite != +qnan " ),
|
225 |
|
|
|
226 |
|
|
----------------------------------------------------------------------------
|
227 |
|
|
-- infinite * subnormal
|
228 |
|
|
----------------------------------------------------------------------------
|
229 |
|
|
( plus_infinite, plus_subnormal, plus_qnan, "+infinite * +subnormal != +qnan " ),
|
230 |
|
|
( plus_infinite, minus_subnormal, minus_qnan, "+infinite * -subnormal != -qnan " ),
|
231 |
|
|
( minus_infinite, plus_subnormal, minus_qnan, "-infinite * +subnormal != -qnan " ),
|
232 |
|
|
( minus_infinite, minus_subnormal, plus_qnan, "-infinite * -subnormal != +qnan " ),
|
233 |
|
|
|
234 |
|
|
----------------------------------------------------------------------------
|
235 |
|
|
-- subnormal * qnan
|
236 |
|
|
----------------------------------------------------------------------------
|
237 |
|
|
( plus_subnormal, plus_qnan, plus_qnan, "+subnormal * +qnan != +qnan " ),
|
238 |
|
|
( plus_subnormal, minus_qnan, minus_qnan, "+subnormal * -qnan != -qnan " ),
|
239 |
|
|
( minus_subnormal, plus_qnan, minus_qnan, "-subnormal * +qnan != -qnan " ),
|
240 |
|
|
( minus_subnormal, minus_qnan, plus_qnan, "-subnormal * -qnan != +qnan " ),
|
241 |
|
|
|
242 |
|
|
----------------------------------------------------------------------------
|
243 |
|
|
-- qnan * subnormal
|
244 |
|
|
----------------------------------------------------------------------------
|
245 |
|
|
( plus_qnan, plus_subnormal, plus_qnan, "+qnan * +subnormal != +qnan " ),
|
246 |
|
|
( plus_qnan, minus_subnormal, minus_qnan, "+qnan * -subnormal != -qnan " ),
|
247 |
|
|
( minus_qnan, plus_subnormal, minus_qnan, "-qnan * +subnormal != -qnan " ),
|
248 |
|
|
( minus_qnan, minus_subnormal, plus_qnan, "-qnan * -subnormal != +qnan " ),
|
249 |
|
|
|
250 |
|
|
----------------------------------------------------------------------------
|
251 |
|
|
-- subnormal * snan
|
252 |
|
|
----------------------------------------------------------------------------
|
253 |
|
|
( plus_subnormal, plus_snan, plus_qnan, "+subnormal * +snan != +qnan " ),
|
254 |
|
|
( plus_subnormal, minus_snan, minus_qnan, "+subnormal * -snan != -qnan " ),
|
255 |
|
|
( minus_subnormal, plus_snan, minus_qnan, "-subnormal * +snan != -qnan " ),
|
256 |
|
|
( minus_subnormal, minus_snan, plus_qnan, "-subnormal * -snan != +qnan " ),
|
257 |
|
|
|
258 |
|
|
----------------------------------------------------------------------------
|
259 |
|
|
-- snan * subnormal
|
260 |
|
|
----------------------------------------------------------------------------
|
261 |
|
|
( plus_snan, plus_subnormal, plus_qnan, "+snan * +subnormal != +qnan " ),
|
262 |
|
|
( plus_snan, minus_subnormal, minus_qnan, "+snan * -subnormal != -qnan " ),
|
263 |
|
|
( minus_snan, plus_subnormal, minus_qnan, "-snan * +subnormal != -qnan " ),
|
264 |
|
|
( minus_snan, minus_subnormal, plus_qnan, "-snan * -subnormal != +qnan " ),
|
265 |
|
|
|
266 |
|
|
----------------------------------------------------------------------------
|
267 |
|
|
-- infinite * infinite
|
268 |
|
|
----------------------------------------------------------------------------
|
269 |
|
|
( plus_infinite, plus_infinite, plus_infinite, "+infinite * +infinite != +infinite " ),
|
270 |
|
|
( plus_infinite, minus_infinite, minus_infinite, "+infinite * -infinite != -infinite " ),
|
271 |
|
|
( minus_infinite, plus_infinite, minus_infinite, "-infinite * +infinite != -infinite " ),
|
272 |
|
|
( minus_infinite, minus_infinite, plus_infinite, "-infinite * -infinite != +infinite " ),
|
273 |
|
|
|
274 |
|
|
----------------------------------------------------------------------------
|
275 |
|
|
-- infinite * qnan
|
276 |
|
|
----------------------------------------------------------------------------
|
277 |
|
|
( plus_infinite, plus_qnan, plus_qnan, "+infinite * +qnan != +qnan " ),
|
278 |
|
|
( plus_infinite, minus_qnan, minus_qnan, "+infinite * -qnan != -qnan " ),
|
279 |
|
|
( minus_infinite, plus_qnan, minus_qnan, "-infinite * +qnan != -qnan " ),
|
280 |
|
|
( minus_infinite, minus_qnan, plus_qnan, "-infinite * -qnan != +qnan " ),
|
281 |
|
|
|
282 |
|
|
----------------------------------------------------------------------------
|
283 |
|
|
-- qnan * infinite
|
284 |
|
|
----------------------------------------------------------------------------
|
285 |
|
|
( plus_qnan, plus_infinite, plus_qnan, "+qnan * +infinite != +qnan " ),
|
286 |
|
|
( plus_qnan, minus_infinite, minus_qnan, "+qnan * -infinite != -qnan " ),
|
287 |
|
|
( minus_qnan, plus_infinite, minus_qnan, "-qnan * +infinite != -qnan " ),
|
288 |
|
|
( minus_qnan, minus_infinite, plus_qnan, "-qnan * -infinite != +qnan " ),
|
289 |
|
|
|
290 |
|
|
----------------------------------------------------------------------------
|
291 |
|
|
-- infinite * snan
|
292 |
|
|
----------------------------------------------------------------------------
|
293 |
|
|
( plus_infinite, plus_snan, plus_qnan, "+infinite * +snan != +qnan " ),
|
294 |
|
|
( plus_infinite, minus_snan, minus_qnan, "+infinite * -snan != -qnan " ),
|
295 |
|
|
( minus_infinite, plus_snan, minus_qnan, "-infinite * +snan != -qnan " ),
|
296 |
|
|
( minus_infinite, minus_snan, plus_qnan, "-infinite * -snan != +qnan " ),
|
297 |
|
|
|
298 |
|
|
----------------------------------------------------------------------------
|
299 |
|
|
-- snan * infinite
|
300 |
|
|
----------------------------------------------------------------------------
|
301 |
|
|
( plus_snan, plus_infinite, plus_qnan, "+snan * +infinite != +qnan " ),
|
302 |
|
|
( plus_snan, minus_infinite, minus_qnan, "+snan * -infinite != -qnan " ),
|
303 |
|
|
( minus_snan, plus_infinite, minus_qnan, "-snan * +infinite != -qnan " ),
|
304 |
|
|
( minus_snan, minus_infinite, plus_qnan, "-snan * -infinite != +qnan " ),
|
305 |
|
|
|
306 |
|
|
----------------------------------------------------------------------------
|
307 |
|
|
-- qnan * qnan
|
308 |
|
|
----------------------------------------------------------------------------
|
309 |
|
|
( plus_qnan, plus_qnan, plus_qnan, "+qnan * +qnan != +qnan " ),
|
310 |
|
|
( plus_qnan, minus_qnan, minus_qnan, "+qnan * -qnan != -qnan " ),
|
311 |
|
|
( minus_qnan, plus_qnan, minus_qnan, "-qnan * +qnan != -qnan " ),
|
312 |
|
|
( minus_qnan, minus_qnan, plus_qnan, "-qnan * -qnan != +qnan " ),
|
313 |
|
|
|
314 |
|
|
----------------------------------------------------------------------------
|
315 |
|
|
-- qnan * snan
|
316 |
|
|
----------------------------------------------------------------------------
|
317 |
|
|
( plus_qnan, plus_snan, plus_qnan, "+qnan * +snan != +qnan " ),
|
318 |
|
|
( plus_qnan, minus_snan, minus_qnan, "+qnan * -snan != -qnan " ),
|
319 |
|
|
( minus_qnan, plus_snan, minus_qnan, "-qnan * +snan != -qnan " ),
|
320 |
|
|
( minus_qnan, minus_snan, plus_qnan, "-qnan * -snan != +qnan " ),
|
321 |
|
|
|
322 |
|
|
----------------------------------------------------------------------------
|
323 |
|
|
-- snan * qnan
|
324 |
|
|
----------------------------------------------------------------------------
|
325 |
|
|
( plus_snan, plus_qnan, plus_qnan, "+snan * +qnan != +qnan " ),
|
326 |
|
|
( plus_snan, minus_qnan, minus_qnan, "+snan * -qnan != -qnan " ),
|
327 |
|
|
( minus_snan, plus_qnan, minus_qnan, "-snan * +qnan != -qnan " ),
|
328 |
|
|
( minus_snan, minus_qnan, plus_qnan, "-snan * -qnan != +qnan " ),
|
329 |
|
|
|
330 |
|
|
----------------------------------------------------------------------------
|
331 |
|
|
-- snan * snan
|
332 |
|
|
----------------------------------------------------------------------------
|
333 |
|
|
( plus_snan, plus_snan, plus_qnan, "+snan * +snan != +qnan " ),
|
334 |
|
|
( plus_snan, minus_snan, minus_qnan, "+snan * -snan != -qnan " ),
|
335 |
|
|
( minus_snan, plus_snan, minus_qnan, "-snan * +snan != -qnan " ),
|
336 |
|
|
( minus_snan, minus_snan, plus_qnan, "-snan * -snan != +qnan " )
|
337 |
|
|
);
|
338 |
|
|
|
339 |
|
|
constant pipeline_testset:test_condition_array_type:=
|
340 |
|
|
(
|
341 |
|
|
( x"2923be84", x"e16cd6ae", x"cb177cf2", " 3.63585e-14 * -2.73056e+20 != -9.92792e+06" ),
|
342 |
|
|
( x"529049f1", x"f1bbe9eb", x"ff800000", " 3.09858e+11 * -1.86101e+30 != -infinite" ),
|
343 |
|
|
( x"b3a6db3c", x"870c3e99", x"000016da", "-7.76986e-08 * -1.05508e-34 != +subnormal" ),
|
344 |
|
|
( x"245e0d1c", x"06b747de", x"00000000", " 4.81497e-17 * 6.89425e-35 != +zero" ),
|
345 |
|
|
( x"b3124dc8", x"43bb8ba6", x"b7565d40", "-3.40640e-08 * 3.75091e+02 != -1.27771e-05" ),
|
346 |
|
|
( x"1f035a7d", x"0938251f", x"00000000", " 2.78152e-20 * 2.21656e-33 != +zero" ),
|
347 |
|
|
( x"5dd4cbfc", x"96f5453b", x"b54be0c4", " 1.91670e+18 * -3.96256e-25 != -7.59505e-07" ),
|
348 |
|
|
( x"130d890a", x"1cdbae32", x"00000000", " 1.78643e-27 * 1.45372e-21 != +zero" ),
|
349 |
|
|
( x"209a50ee", x"407836fd", x"21959f8c", " 2.61422e-19 * 3.87836e+00 != 1.01389e-18" ),
|
350 |
|
|
( x"124932f6", x"9e7d49dc", x"80000000", " 6.34872e-28 * -1.34090e-20 != -zero" ),
|
351 |
|
|
( x"ad4f14f2", x"444066d0", x"b21ba2e0", "-1.17712e-11 * 7.69606e+02 != -9.05922e-09" ),
|
352 |
|
|
( x"6bc430b7", x"323ba122", x"5e8fcb12", " 4.74359e+26 * 1.09215e-08 != 5.18070e+18" ),
|
353 |
|
|
( x"f622919d", x"e18b1fda", x"7f800000", "-8.24322e+32 * -3.20799e+20 != +infinite" ),
|
354 |
|
|
( x"b0ca9902", x"b9729d49", x"2ac0011d", "-1.47409e-09 * -2.31375e-04 != 3.41068e-13" ),
|
355 |
|
|
( x"2c807ec5", x"99d5e980", x"86d6bd5b", " 3.65205e-12 * -2.21180e-23 != -8.07761e-35" ),
|
356 |
|
|
( x"b2eac9cc", x"53bf67d6", x"c72f8bcb", "-2.73330e-08 * 1.64416e+12 != -4.49398e+04" ),
|
357 |
|
|
( x"bf14d67e", x"2ddc8e66", x"ad803b1f", "-5.81398e-01 * 2.50743e-11 != -1.45782e-11" ),
|
358 |
|
|
( x"83ef5749", x"61ff698f", x"a66ecaa2", "-1.40672e-36 * 5.88941e+20 != -8.28475e-16" ),
|
359 |
|
|
( x"61cdd11e", x"9d9c1672", x"bffafaf4", " 4.74581e+20 * -4.13161e-21 != -1.96078e+00" ),
|
360 |
|
|
( x"72e61df0", x"844f4a77", x"b7ba5525", " 9.11587e+30 * -2.43669e-36 != -2.22126e-05" ),
|
361 |
|
|
( x"02d7e839", x"2c53cbc9", x"00000000", " 3.17247e-37 * 3.00980e-12 != +zero" ),
|
362 |
|
|
( x"121e3374", x"9e0cf4d5", x"80000000", " 4.99194e-28 * -7.46217e-21 != -zero" ),
|
363 |
|
|
( x"d49fd4a4", x"597e35cf", x"ee9eb693", "-5.49174e+12 * 4.47211e+15 != -2.45597e+28" ),
|
364 |
|
|
( x"3222f4cc", x"cfd3902d", x"c286ab8a", " 9.48530e-09 * -7.09888e+09 != -6.73350e+01" ),
|
365 |
|
|
( x"48d38f75", x"e6d91d2a", x"f0336cb4", " 4.33276e+05 * -5.12646e+23 != -2.22117e+29" ),
|
366 |
|
|
( x"e5c0f72b", x"78818744", x"ff800000", "-1.13907e+23 * 2.10172e+34 != -infinite" ),
|
367 |
|
|
( x"0e5f5000", x"d4618dbe", x"a344c0f5", " 2.75254e-30 * -3.87498e+12 != -1.06660e-17" ),
|
368 |
|
|
( x"7b051507", x"3b33821f", x"76baa2b1", " 6.91002e+35 * 2.73908e-03 != 1.89271e+33" ),
|
369 |
|
|
( x"187092da", x"6454ceb1", x"3d47fbd9", " 3.10934e-24 * 1.57024e+22 != 4.88242e-02" ),
|
370 |
|
|
( x"853e6915", x"f8466a04", x"3e139421", "-8.95306e-36 * -1.60973e+34 != 1.44120e-01" ),
|
371 |
|
|
( x"96730ed9", x"162f6768", x"80000000", "-1.96341e-25 * 1.41690e-25 != -zero" ),
|
372 |
|
|
( x"d4f74a4a", x"d0576876", x"65d0144c", "-8.49683e+12 * -1.44558e+10 != 1.22828e+23" ),
|
373 |
|
|
( x"fa16bb11", x"adae2488", x"684d1150", "-1.95660e+35 * -1.97977e-11 != 3.87362e+24" ),
|
374 |
|
|
( x"79fe52db", x"2543e53c", x"5fc29cd9", " 1.65065e+35 * 1.69912e-16 != 2.80466e+19" ),
|
375 |
|
|
( x"f445d3d8", x"28ce0bf5", x"dd9f39b5", "-6.26940e+31 * 2.28758e-14 != -1.43418e+18" ),
|
376 |
|
|
( x"c560593d", x"97278a59", x"1d12d375", "-3.58958e+03 * -5.41352e-25 != 1.94323e-21" ),
|
377 |
|
|
( x"762dd0c2", x"c9cd68d4", x"ff800000", " 8.81349e+32 * -1.68271e+06 != -infinite" ),
|
378 |
|
|
( x"496a7925", x"08614014", x"124e4f2a", " 9.60402e+05 * 6.77838e-34 != 6.50997e-28" ),
|
379 |
|
|
( x"b13b6aa5", x"1128c18c", x"82f7175c", "-2.72727e-09 * 1.33125e-28 != -3.63068e-37" ),
|
380 |
|
|
( x"d6a90b87", x"978c2ff1", x"2eb923ec", "-9.29335e+13 * -9.05939e-25 != 8.41921e-11" ),
|
381 |
|
|
( x"151d9a95", x"c19be1c0", x"973fef27", " 3.18278e-26 * -1.94852e+01 != -6.20173e-25" ),
|
382 |
|
|
( x"7ee9a89a", x"a786c2b5", x"e6f5ffef", " 1.55293e+38 * -3.74036e-15 != -5.80850e+23" ),
|
383 |
|
|
( x"54bf9ae7", x"d923d155", x"ee75389c", " 6.58350e+12 * -2.88191e+15 != -1.89731e+28" ),
|
384 |
|
|
( x"903828d1", x"d96ca166", x"2a2a39bc", "-3.63190e-29 * -4.16285e+15 != 1.51191e-13" ),
|
385 |
|
|
( x"5e4ee130", x"9cfed971", x"bbcdf326", " 3.72681e+18 * -1.68645e-21 != -6.28509e-03" ),
|
386 |
|
|
( x"9fe2a5e2", x"0c9bb447", x"80000000", "-9.59892e-20 * 2.39900e-31 != -zero" ),
|
387 |
|
|
( x"65382a46", x"89a98279", x"af73e389", " 5.43560e+22 * -4.08080e-33 != -2.21816e-10" ),
|
388 |
|
|
( x"7a7678c2", x"63b126df", x"7f800000", " 3.19939e+35 * 6.53575e+21 != +infinite" ),
|
389 |
|
|
( x"da296d3e", x"62e09612", x"fd94a2e8", "-1.19223e+16 * 2.07144e+21 != -2.46965e+37" ),
|
390 |
|
|
( x"34bf39a6", x"3f895ef1", x"34cd398a", " 3.56185e-07 * 1.07321e+00 != 3.82261e-07" ),
|
391 |
|
|
( x"6d0ee36c", x"28a11e20", x"5633dbaf", " 2.76386e+27 * 1.78877e-14 != 4.94390e+13" ),
|
392 |
|
|
( x"1dcbc203", x"3f410784", x"1d99a340", " 5.39343e-21 * 7.54021e-01 != 4.06676e-21" ),
|
393 |
|
|
( x"0f140565", x"1b2861c9", x"00000000", " 7.29800e-30 * 1.39282e-22 != +zero" ),
|
394 |
|
|
( x"c5e72c8e", x"463608dc", x"cca461ad", "-7.39757e+03 * 1.16502e+04 != -8.61833e+07" ),
|
395 |
|
|
( x"f3a88dfe", x"bef2eb71", x"731ff13f", "-2.67086e+31 * -4.74453e-01 != 1.26719e+31" ),
|
396 |
|
|
( x"ffa0d03b", x"75068c7e", x"ffe0d03b", " -qnan * 1.70561e+32 != -snan" ),
|
397 |
|
|
( x"8778734d", x"d0be82be", x"18b8e476", "-1.86913e-34 * -2.55699e+10 != 4.77936e-24" ),
|
398 |
|
|
( x"dbc24641", x"2b8cfa30", x"c7d5f891", "-1.09367e+17 * 1.00170e-12 != -1.09553e+05" ),
|
399 |
|
|
( x"7f70f0a7", x"54863295", x"7f800000", " 3.20264e+38 * 4.61099e+12 != +infinite" ),
|
400 |
|
|
( x"aa5b6813", x"0be6fcf5", x"8000000c", "-1.94872e-13 * 8.89734e-32 != -subnormal" ),
|
401 |
|
|
( x"cabe7d9f", x"898a411b", x"14cdc053", "-6.24200e+06 * -3.32835e-33 != 2.07756e-26" ),
|
402 |
|
|
( x"fdb84f68", x"f6727b14", x"7f800000", "-3.06238e+37 * -1.22952e+33 != +infinite" ),
|
403 |
|
|
( x"99cdd30d", x"f0443ab4", x"4a9dc4c8", "-2.12817e-23 * -2.42920e+29 != 5.16976e+06" ),
|
404 |
|
|
( x"a6665333", x"0bcba110", x"80000000", "-7.99100e-16 * 7.84351e-32 != -zero" )
|
405 |
|
|
);
|
406 |
6 |
aloy.amber |
begin
|
407 |
|
|
|
408 |
|
|
dut:fpmult port map(clk,d,q);
|
409 |
|
|
|
410 |
|
|
clock:process
|
411 |
|
|
begin
|
412 |
8 |
aloy.amber |
wait for (clock_period/2);
|
413 |
|
|
clk<=not clk;
|
414 |
6 |
aloy.amber |
end process clock;
|
415 |
|
|
|
416 |
|
|
stimulus:process
|
417 |
8 |
aloy.amber |
variable test_condition:test_condition_type;
|
418 |
6 |
aloy.amber |
begin
|
419 |
8 |
aloy.amber |
-----------------------------------------------------------------------------
|
420 |
|
|
-- Check qualifying functions and constants
|
421 |
|
|
-----------------------------------------------------------------------------
|
422 |
|
|
assert not fp_is_normal(plus_zero) report "Bad +0" severity error;
|
423 |
|
|
assert fp_is_zero(plus_zero) report "Bad +0" severity error;
|
424 |
|
|
assert not fp_is_subnormal(plus_zero) report "Bad +0" severity error;
|
425 |
|
|
assert not fp_is_infinite(plus_zero) report "Bad +0" severity error;
|
426 |
|
|
assert not fp_is_nan(plus_zero) report "Bad +0" severity error;
|
427 |
|
|
assert not fp_is_signalling(plus_zero) report "Bad +0" severity error;
|
428 |
|
|
assert not fp_is_quiet(plus_zero) report "Bad +0" severity error;
|
429 |
|
|
assert fp_is_positive(plus_zero) report "Bad +0" severity error;
|
430 |
|
|
assert not fp_is_negative(plus_zero) report "Bad +0" severity error;
|
431 |
|
|
|
432 |
|
|
assert not fp_is_normal(minus_zero) report "Bad -0" severity error;
|
433 |
|
|
assert fp_is_zero(minus_zero) report "Bad -0" severity error;
|
434 |
|
|
assert not fp_is_subnormal(minus_zero) report "Bad -0" severity error;
|
435 |
|
|
assert not fp_is_infinite(minus_zero) report "Bad -0" severity error;
|
436 |
|
|
assert not fp_is_nan(minus_zero) report "Bad -0" severity error;
|
437 |
|
|
assert not fp_is_signalling(minus_zero) report "Bad -0" severity error;
|
438 |
|
|
assert not fp_is_quiet(minus_zero) report "Bad -0" severity error;
|
439 |
|
|
assert not fp_is_positive(minus_zero) report "Bad -0" severity error;
|
440 |
|
|
assert fp_is_negative(minus_zero) report "Bad -0" severity error;
|
441 |
|
|
|
442 |
|
|
assert fp_is_normal(plus_normal) report "Bad +normal" severity error;
|
443 |
|
|
assert not fp_is_zero(plus_normal) report "Bad +normal" severity error;
|
444 |
|
|
assert not fp_is_subnormal(plus_normal) report "Bad +normal" severity error;
|
445 |
|
|
assert not fp_is_infinite(plus_normal) report "Bad +normal" severity error;
|
446 |
|
|
assert not fp_is_nan(plus_normal) report "Bad +normal" severity error;
|
447 |
|
|
assert not fp_is_signalling(plus_normal) report "Bad +normal" severity error;
|
448 |
|
|
assert not fp_is_quiet(plus_normal) report "Bad +normal" severity error;
|
449 |
|
|
assert fp_is_positive(plus_normal) report "Bad +normal" severity error;
|
450 |
|
|
assert not fp_is_negative(plus_normal) report "Bad +normal" severity error;
|
451 |
|
|
|
452 |
|
|
assert fp_is_normal(minus_normal) report "Bad -normal" severity error;
|
453 |
|
|
assert not fp_is_zero(minus_normal) report "Bad -normal" severity error;
|
454 |
|
|
assert not fp_is_subnormal(minus_normal) report "Bad -normal" severity error;
|
455 |
|
|
assert not fp_is_infinite(minus_normal) report "Bad -normal" severity error;
|
456 |
|
|
assert not fp_is_nan(minus_normal) report "Bad -normal" severity error;
|
457 |
|
|
assert not fp_is_signalling(minus_normal) report "Bad -normal" severity error;
|
458 |
|
|
assert not fp_is_quiet(minus_normal) report "Bad -normal" severity error;
|
459 |
|
|
assert not fp_is_positive(minus_normal) report "Bad -normal" severity error;
|
460 |
|
|
assert fp_is_negative(minus_normal) report "Bad -normal" severity error;
|
461 |
|
|
|
462 |
|
|
assert fp_is_normal(plus_normal_squared) report "Bad +normal^2" severity error;
|
463 |
|
|
assert not fp_is_zero(plus_normal_squared) report "Bad +normal^2" severity error;
|
464 |
|
|
assert not fp_is_subnormal(plus_normal_squared) report "Bad +normal^2" severity error;
|
465 |
|
|
assert not fp_is_infinite(plus_normal_squared) report "Bad +normal^2" severity error;
|
466 |
|
|
assert not fp_is_nan(plus_normal_squared) report "Bad +normal^2" severity error;
|
467 |
|
|
assert not fp_is_signalling(plus_normal_squared) report "Bad +normal^2" severity error;
|
468 |
|
|
assert not fp_is_quiet(plus_normal_squared) report "Bad +normal^2" severity error;
|
469 |
|
|
assert fp_is_positive(plus_normal_squared) report "Bad +normal^2" severity error;
|
470 |
|
|
assert not fp_is_negative(plus_normal_squared) report "Bad +normal^2" severity error;
|
471 |
|
|
|
472 |
|
|
assert fp_is_normal(minus_normal_squared) report "Bad -normal^2" severity error;
|
473 |
|
|
assert not fp_is_zero(minus_normal_squared) report "Bad -normal^2" severity error;
|
474 |
|
|
assert not fp_is_subnormal(minus_normal_squared) report "Bad -normal^2" severity error;
|
475 |
|
|
assert not fp_is_infinite(minus_normal_squared) report "Bad -normal^2" severity error;
|
476 |
|
|
assert not fp_is_nan(minus_normal_squared) report "Bad -normal^2" severity error;
|
477 |
|
|
assert not fp_is_signalling(minus_normal_squared) report "Bad -normal^2" severity error;
|
478 |
|
|
assert not fp_is_quiet(minus_normal_squared) report "Bad -normal^2" severity error;
|
479 |
|
|
assert not fp_is_positive(minus_normal_squared) report "Bad -normal^2" severity error;
|
480 |
|
|
assert fp_is_negative(minus_normal_squared) report "Bad -normal^2" severity error;
|
481 |
|
|
|
482 |
|
|
assert not fp_is_normal(plus_subnormal) report "Bad +subnormal" severity error;
|
483 |
|
|
assert not fp_is_zero(plus_subnormal) report "Bad +subnormal" severity error;
|
484 |
|
|
assert fp_is_subnormal(plus_subnormal) report "Bad +subnormal" severity error;
|
485 |
|
|
assert not fp_is_infinite(plus_subnormal) report "Bad +subnormal" severity error;
|
486 |
|
|
assert not fp_is_nan(plus_subnormal) report "Bad +subnormal" severity error;
|
487 |
|
|
assert not fp_is_signalling(plus_subnormal) report "Bad +subnormal" severity error;
|
488 |
|
|
assert not fp_is_quiet(plus_subnormal) report "Bad +subnormal" severity error;
|
489 |
|
|
assert fp_is_positive(plus_subnormal) report "Bad +subnormal" severity error;
|
490 |
|
|
assert not fp_is_negative(plus_subnormal) report "Bad +subnormal" severity error;
|
491 |
|
|
|
492 |
|
|
assert not fp_is_normal(minus_subnormal) report "Bad -subnormal" severity error;
|
493 |
|
|
assert not fp_is_zero(minus_subnormal) report "Bad -subnormal" severity error;
|
494 |
|
|
assert fp_is_subnormal(minus_subnormal) report "Bad -subnormal" severity error;
|
495 |
|
|
assert not fp_is_infinite(minus_subnormal) report "Bad -subnormal" severity error;
|
496 |
|
|
assert not fp_is_nan(minus_subnormal) report "Bad -subnormal" severity error;
|
497 |
|
|
assert not fp_is_signalling(minus_subnormal) report "Bad -subnormal" severity error;
|
498 |
|
|
assert not fp_is_quiet(minus_subnormal) report "Bad -subnormal" severity error;
|
499 |
|
|
assert not fp_is_positive(minus_subnormal) report "Bad -subnormal" severity error;
|
500 |
|
|
assert fp_is_negative(minus_subnormal) report "Bad -subnormal" severity error;
|
501 |
|
|
|
502 |
|
|
assert not fp_is_normal(plus_infinite) report "Bad +infinite" severity error;
|
503 |
|
|
assert not fp_is_zero(plus_infinite) report "Bad +infinite" severity error;
|
504 |
|
|
assert not fp_is_subnormal(plus_infinite) report "Bad +infinite" severity error;
|
505 |
|
|
assert fp_is_infinite(plus_infinite) report "Bad +infinite" severity error;
|
506 |
|
|
assert not fp_is_nan(plus_infinite) report "Bad +infinite" severity error;
|
507 |
|
|
assert not fp_is_signalling(plus_infinite) report "Bad +infinite" severity error;
|
508 |
|
|
assert not fp_is_quiet(plus_infinite) report "Bad +infinite" severity error;
|
509 |
|
|
assert fp_is_positive(plus_infinite) report "Bad +infinite" severity error;
|
510 |
|
|
assert not fp_is_negative(plus_infinite) report "Bad +infinite" severity error;
|
511 |
|
|
|
512 |
|
|
assert not fp_is_normal(minus_infinite) report "Bad -infinite" severity error;
|
513 |
|
|
assert not fp_is_zero(minus_infinite) report "Bad -infinite" severity error;
|
514 |
|
|
assert not fp_is_subnormal(minus_infinite) report "Bad -infinite" severity error;
|
515 |
|
|
assert fp_is_infinite(minus_infinite) report "Bad -infinite" severity error;
|
516 |
|
|
assert not fp_is_nan(minus_infinite) report "Bad -infinite" severity error;
|
517 |
|
|
assert not fp_is_signalling(minus_infinite) report "Bad -infinite" severity error;
|
518 |
|
|
assert not fp_is_quiet(minus_infinite) report "Bad -infinite" severity error;
|
519 |
|
|
assert not fp_is_positive(minus_infinite) report "Bad -infinite" severity error;
|
520 |
|
|
assert fp_is_negative(minus_infinite) report "Bad -infinite" severity error;
|
521 |
|
|
|
522 |
|
|
assert not fp_is_normal(plus_qnan) report "Bad +qnan" severity error;
|
523 |
|
|
assert not fp_is_zero(plus_qnan) report "Bad +qnan" severity error;
|
524 |
|
|
assert not fp_is_subnormal(plus_qnan) report "Bad +qnan" severity error;
|
525 |
|
|
assert not fp_is_infinite(plus_qnan) report "Bad +qnan" severity error;
|
526 |
|
|
assert fp_is_nan(plus_qnan) report "Bad +qnan" severity error;
|
527 |
|
|
assert not fp_is_signalling(plus_qnan) report "Bad +qnan" severity error;
|
528 |
|
|
assert fp_is_quiet(plus_qnan) report "Bad +qnan" severity error;
|
529 |
|
|
assert fp_is_positive(plus_qnan) report "Bad +qnan" severity error;
|
530 |
|
|
assert not fp_is_negative(plus_qnan) report "Bad +qnan" severity error;
|
531 |
|
|
|
532 |
|
|
assert not fp_is_normal(minus_qnan) report "Bad -qnan" severity error;
|
533 |
|
|
assert not fp_is_zero(minus_qnan) report "Bad -qnan" severity error;
|
534 |
|
|
assert not fp_is_subnormal(minus_qnan) report "Bad -qnan" severity error;
|
535 |
|
|
assert not fp_is_infinite(minus_qnan) report "Bad -qnan" severity error;
|
536 |
|
|
assert fp_is_nan(minus_qnan) report "Bad -qnan" severity error;
|
537 |
|
|
assert not fp_is_signalling(minus_qnan) report "Bad -qnan" severity error;
|
538 |
|
|
assert fp_is_quiet(minus_qnan) report "Bad -qnan" severity error;
|
539 |
|
|
assert not fp_is_positive(minus_qnan) report "Bad -qnan" severity error;
|
540 |
|
|
assert fp_is_negative(minus_qnan) report "Bad -qnan" severity error;
|
541 |
|
|
|
542 |
|
|
assert not fp_is_normal(plus_snan) report "Bad +snan" severity error;
|
543 |
|
|
assert not fp_is_zero(plus_snan) report "Bad +snan" severity error;
|
544 |
|
|
assert not fp_is_subnormal(plus_snan) report "Bad +snan" severity error;
|
545 |
|
|
assert not fp_is_infinite(plus_snan) report "Bad +snan" severity error;
|
546 |
|
|
assert fp_is_nan(plus_snan) report "Bad +snan" severity error;
|
547 |
|
|
assert fp_is_signalling(plus_snan) report "Bad +snan" severity error;
|
548 |
|
|
assert not fp_is_quiet(plus_snan) report "Bad +snan" severity error;
|
549 |
|
|
assert fp_is_positive(plus_snan) report "Bad +snan" severity error;
|
550 |
|
|
assert not fp_is_negative(plus_snan) report "Bad +snan" severity error;
|
551 |
|
|
|
552 |
|
|
assert not fp_is_normal(minus_snan) report "Bad -snan" severity error;
|
553 |
|
|
assert not fp_is_zero(minus_snan) report "Bad -snan" severity error;
|
554 |
|
|
assert not fp_is_subnormal(minus_snan) report "Bad -snan" severity error;
|
555 |
|
|
assert not fp_is_infinite(minus_snan) report "Bad -snan" severity error;
|
556 |
|
|
assert fp_is_nan(minus_snan) report "Bad -snan" severity error;
|
557 |
|
|
assert fp_is_signalling(minus_snan) report "Bad -snan" severity error;
|
558 |
|
|
assert not fp_is_quiet(minus_snan) report "Bad -snan" severity error;
|
559 |
|
|
assert not fp_is_positive(minus_snan) report "Bad -snan" severity error;
|
560 |
|
|
assert fp_is_negative(minus_snan) report "Bad -snan" severity error;
|
561 |
|
|
|
562 |
|
|
-----------------------------------------------------------------------------
|
563 |
|
|
-- Check multiplier
|
564 |
|
|
-----------------------------------------------------------------------------
|
565 |
|
|
for i in multiplier_testset'range loop
|
566 |
|
|
test_condition:=multiplier_testset(i);
|
567 |
|
|
d.a<=test_condition.a;
|
568 |
|
|
d.b<=test_condition.b;
|
569 |
|
|
wait for pipeline_delay;
|
570 |
|
|
assert q.p = test_condition.p report test_condition.msg severity error;
|
571 |
|
|
end loop;
|
572 |
|
|
|
573 |
|
|
-----------------------------------------------------------------------------
|
574 |
|
|
-- Check pipeline
|
575 |
|
|
-----------------------------------------------------------------------------
|
576 |
|
|
for i in pipeline_testset'range loop
|
577 |
|
|
test_condition:=pipeline_testset(i);
|
578 |
|
|
d.a<=test_condition.a;
|
579 |
|
|
d.b<=test_condition.b;
|
580 |
|
|
wait for clock_period;
|
581 |
|
|
if i>=number_of_stages then
|
582 |
|
|
assert q.p = pipeline_testset(i-number_of_stages+1).p report pipeline_testset(i-number_of_stages+1).msg severity error;
|
583 |
|
|
end if;
|
584 |
|
|
end loop;
|
585 |
|
|
|
586 |
|
|
d.a<="0"&"01111111"&"10110010100011101010101"; -- 0x3FD94755 -> +1.69748938083648681640625E0
|
587 |
|
|
d.b<="0"&"01111111"&"01101110110110011100001"; -- 0x3FB76CE1 -> +1.43301022052764892578125E0
|
588 |
|
|
-- 0 01111111 100110111010111001100110110100101000110110110101
|
589 |
|
|
-- 0 10000000 100110111010111001100110110100101000110110110101
|
590 |
|
|
-- 0 10000000 00110111010111001100111 0x401bae67 -> +2.4325196743011474609375E0
|
591 |
|
|
-- |-----||--||-----||--||--||--||--||--|
|
592 |
|
|
wait for 20 ns;
|
593 |
|
|
|
594 |
|
|
d.a<="1"&"10000000"&"10010010000111111011011"; -- 0xC0490FDB -> -3.1415927410125732421875E0
|
595 |
|
|
d.b<="0"&"10000010"&"00001011110001011101010"; -- 0x4105E2EA -> +8.3678989410400390625E0
|
596 |
|
|
-- 1 10000011 011010010010011101110100100011101101010000101110
|
597 |
|
|
-- 1 10000011 11010010010011101110100100011101101010000101110
|
598 |
|
|
-- 1 10000011 10100100100111011101001 0xC1D24EE9 -> -2.62885303497314453125E1
|
599 |
|
|
-- |-----||--||-----||--||--||--||--||--|
|
600 |
|
|
wait for 20 ns;
|
601 |
|
|
|
602 |
|
|
d.a<="1"&"10000101"&"01110011100001000111010"; -- 0xC2B9C23A -> -9.28793487548828125E1
|
603 |
|
|
d.b<="1"&"10000111"&"11010001001111000001110"; -- 0xC3E89E0E -> -4.6523480224609375E2
|
604 |
|
|
-- 0 10001101 101010001100101010110100100110000110101100101100
|
605 |
|
|
-- 0 10001110 101010001100101010110100100110000110101100101100
|
606 |
|
|
-- 0 10001110 01010001100101010110101 0x4728CAB5 -> +4.321070703125E4
|
607 |
|
|
-- |-----||--||-----||--||--||--||--||--|
|
608 |
|
|
wait for 20 ns;
|
609 |
|
|
|
610 |
|
|
wait for 1 us;
|
611 |
6 |
aloy.amber |
end process stimulus;
|
612 |
|
|
|
613 |
|
|
end testbench;
|
614 |
|
|
|