2 def __init__(self
, program
, name
, regs
=None, sprs
=None, cr
=0, mem
=None,
22 def set_int_ra(alu
, dec2
, inp
):
24 yield alu
.p
.data_i
.ra
.eq(inp
['ra'])
26 yield alu
.p
.data_i
.ra
.eq(0)
28 def set_int_rb(alu
, dec2
, inp
):
29 yield alu
.p
.data_i
.rb
.eq(0)
31 yield alu
.p
.data_i
.rb
.eq(inp
['rb'])
32 # If there's an immediate, set the B operand to that
33 imm_ok
= yield dec2
.e
.imm_data
.imm_ok
35 data2
= yield dec2
.e
.imm_data
.imm
36 yield alu
.p
.data_i
.rb
.eq(data2
)
38 def set_int_rc(alu
, dec2
, inp
):
40 yield alu
.p
.data_i
.rc
.eq(inp
['rc'])
42 yield alu
.p
.data_i
.rc
.eq(0)
44 def set_xer_ca(alu
, dec2
, inp
):
46 yield alu
.p
.data_i
.xer_ca
.eq(inp
['xer_ca'])
47 print ("extra inputs: CA/32", bin(inp
['xer_ca']))
49 def set_xer_so(alu
, dec2
, inp
):
52 print ("extra inputs: so", so
)
53 yield alu
.p
.data_i
.xer_so
.eq(so
)
55 def set_fast_cia(alu
, dec2
, inp
):
57 yield alu
.p
.data_i
.cia
.eq(inp
['cia'])
59 def set_fast_spr1(alu
, dec2
, inp
):
61 yield alu
.p
.data_i
.spr1
.eq(inp
['spr1'])
63 def set_fast_spr2(alu
, dec2
, inp
):
65 yield alu
.p
.data_i
.spr2
.eq(inp
['spr2'])
67 def set_cr_a(alu
, dec2
, inp
):
69 yield alu
.p
.data_i
.cr_a
.eq(inp
['cr_a'])
71 def set_cr_b(alu
, dec2
, inp
):
73 yield alu
.p
.data_i
.cr_b
.eq(inp
['cr_b'])
75 def set_cr_c(alu
, dec2
, inp
):
77 yield alu
.p
.data_i
.cr_c
.eq(inp
['cr_c'])
79 def set_full_cr(alu
, dec2
, inp
):
81 yield alu
.p
.data_i
.full_cr
.eq(inp
['full_cr'])
83 yield alu
.p
.data_i
.full_cr
.eq(0)
85 def get_int_o(res
, alu
, dec2
):
86 out_reg_valid
= yield dec2
.e
.write_reg
.ok
88 res
['o'] = yield alu
.n
.data_o
.o
.data
90 def get_cr_a(res
, alu
, dec2
):
91 cridx_ok
= yield dec2
.e
.write_cr
.ok
93 res
['cr_a'] = yield alu
.n
.data_o
.cr0
.data
95 def get_sim_int_o(res
, sim
, dec2
):
96 out_reg_valid
= yield dec2
.e
.write_reg
.ok
98 write_reg_idx
= yield dec2
.e
.write_reg
.data
99 res
['o'] = sim
.gpr(write_reg_idx
).value
101 def get_sim_cr_a(res
, sim
, dec2
):
102 cridx_ok
= yield dec2
.e
.write_cr
.ok
104 cridx
= yield dec2
.e
.write_cr
.data
105 res
['cr_a'] = sim
.crl
[cridx
].get_range().value
107 def check_int_o(dut
, res
, sim_o
, msg
):
109 expected
= sim_o
['o']
111 print(f
"expected {expected:x}, actual: {alu_out:x}")
112 dut
.assertEqual(expected
, alu_out
, msg
)
114 def check_cr_a(dut
, res
, sim_o
, msg
):
116 cr_expected
= sim_o
['cr_a']
117 cr_actual
= res
['cr_a']
118 print ("CR", cr_expected
, cr_actual
)
119 dut
.assertEqual(cr_expected
, cr_actual
, msg
)