2 from sfpy
import Float64
5 return x
& 0x000fffffffffffff
8 return ((x
& 0x7ff0000000000000) >> 52) - 1023
11 return ((x
& 0x8000000000000000) >> 63)
14 return get_exponent(x
) == 1024 and get_mantissa(x
) != 0
17 return get_exponent(x
) == 1024 and get_mantissa(x
) == 0
20 return is_inf(x
) and not get_sign(x
)
23 return is_inf(x
) and get_sign(x
)
27 (is_pos_inf(x
) and is_pos_inf(y
)) or
28 (is_neg_inf(x
) and is_neg_inf(y
)) or
29 (is_nan(x
) and is_nan(y
)) or
33 def get_case(dut
, a
, b
):
34 yield dut
.in_a
.v
.eq(a
)
35 yield dut
.in_a
.stb
.eq(1)
38 a_ack
= (yield dut
.in_a
.ack
)
40 yield dut
.in_b
.v
.eq(b
)
41 yield dut
.in_b
.stb
.eq(1)
42 b_ack
= (yield dut
.in_b
.ack
)
47 out_z_stb
= (yield dut
.out_z
.stb
)
50 yield dut
.in_a
.stb
.eq(0)
51 yield dut
.in_b
.stb
.eq(0)
52 yield dut
.out_z
.ack
.eq(1)
54 yield dut
.out_z
.ack
.eq(0)
59 out_z
= yield dut
.out_z
.v
62 def check_case(dut
, a
, b
, z
):
63 out_z
= yield from get_case(dut
, a
, b
)
64 assert out_z
== z
, "Output z 0x%x not equal to expected 0x%x" % (out_z
, z
)
67 def run_test(dut
, stimulus_a
, stimulus_b
, op
):
69 expected_responses
= []
71 for a
, b
in zip(stimulus_a
, stimulus_b
):
72 af
= Float64
.from_bits(a
)
73 bf
= Float64
.from_bits(b
)
75 expected_responses
.append(z
.get_bits())
77 actual
= yield from get_case(dut
, a
, b
)
78 actual_responses
.append(actual
)
80 if len(actual_responses
) < len(expected_responses
):
81 print ("Fail ... not enough results")
84 for exp
, act
, a
, b
in zip(expected_responses
, actual_responses
,
85 stimulus_a
, stimulus_b
):
86 passed
= match(exp
, act
)
90 print ("Fail ... expected:", hex(exp
), "actual:", hex(act
))
93 print ("a mantissa:", a
& 0x000fffffffffffff)
94 print ("a exponent:", ((a
& 0x7ff0000000000000) >> 52)\
96 print ("a sign:", ((a
& 0x8000000000000000) >> 63))
99 print ("b mantissa:", b
& 0x000fffffffffffff)
100 print ("b exponent:", ((b
& 0x7ff0000000000000) >> 52)\
102 print ("b sign:", ((b
& 0x8000000000000000) >> 63))
105 print ("expected mantissa:", exp
& 0x000fffffffffffff)
106 print ("expected exponent:", ((exp
& 0x7ff0000000000000) >> 52)\
108 print ("expected sign:", ((exp
& 0x8000000000000000) >> 63))
111 print ("actual mantissa:", act
& 0x000fffffffffffff)
112 print ("actual exponent:", ((act
& 0x7ff0000000000000) >> 52)\
114 print ("actual sign:", ((act
& 0x8000000000000000) >> 63))