50e9d133dfa19dc2fda828456a6d23598f39a140
2 from soc
.decoder
.power_enums
import (XER_bits
, Function
)
4 # XXX bad practice: use of global variables
5 from soc
.fu
.cr
.test
.test_pipe_caller
import get_cu_inputs
6 from soc
.fu
.cr
.test
.test_pipe_caller
import CRTestCase
8 from soc
.fu
.compunits
.compunits
import CRFunctionUnit
9 from soc
.fu
.compunits
.test
.test_compunit
import TestRunner
10 from soc
.config
.endian
import bigendian
13 class CRTestRunner(TestRunner
):
14 def __init__(self
, test_data
):
15 super().__init
__(test_data
, CRFunctionUnit
, self
,
16 Function
.CR
, bigendian
)
18 def get_cu_inputs(self
, dec2
, sim
):
19 """naming (res) must conform to CRFunctionUnit input regspec
21 res
= yield from get_cu_inputs(dec2
, sim
)
24 def check_cu_outputs(self
, res
, dec2
, sim
, alu
, code
):
25 """naming (res) must conform to CRFunctionUnit output regspec
28 print ("check extra output", repr(code
), res
)
31 whole_reg
= yield dec2
.e
.do
.write_cr_whole
32 cr_en
= yield dec2
.e
.write_cr
.ok
34 full_cr
= res
['full_cr']
35 expected_cr
= sim
.cr
.get_range().value
36 print(f
"expected cr {expected_cr:x}, actual: {full_cr:x}")
37 self
.assertEqual(expected_cr
, full_cr
, code
)
41 cr_sel
= yield dec2
.e
.write_cr
.data
42 expected_cr
= sim
.crl
[cr_sel
].get_range().value
44 self
.assertEqual(expected_cr
, real_cr
, code
)
47 out_reg_valid
= yield dec2
.e
.write_reg
.ok
50 write_reg_idx
= yield dec2
.e
.write_reg
.data
51 expected
= sim
.gpr(write_reg_idx
).value
52 print(f
"expected {expected:x}, actual: {alu_out:x}")
53 self
.assertEqual(expected
, alu_out
, code
)
56 if __name__
== "__main__":
57 unittest
.main(exit
=False)
58 suite
= unittest
.TestSuite()
59 suite
.addTest(CRTestRunner(CRTestCase
.test_data
))
61 runner
= unittest
.TextTestRunner()