1 """simple core test, runs instructions from a TestMemory
5 * https://bugs.libre-soc.org/show_bug.cgi?id=363
8 # NOTE: to use cxxsim, export NMIGEN_SIM_MODE=cxxsim from the shell
9 # Also, check out the cxxsim nmigen branch, and latest yosys from git
14 # here is the logic which takes test cases and "executes" them.
15 # in this instance (TestRunner) its job is to instantiate both
16 # a Libre-SOC nmigen-based HDL instance and an ISACaller python
17 # simulator. it's also responsible for performing the single
18 # step and comparison.
19 from soc
.simple
.test
.test_runner
import TestRunner
22 #src/openpower/test/runner.py:class TestRunnerBase(FHDLTestCase):
25 from openpower
.test
.mmu
.mmu_cases
import MMUTestCase
26 from openpower
.test
.mmu
.mmu_rom_cases
import MMUTestCaseROM
, default_mem
27 from openpower
.test
.ldst
.ldst_cases
import LDSTTestCase
28 from openpower
.test
.ldst
.ldst_exc_cases
import LDSTExceptionTestCase
29 #from openpower.simulator.test_sim import (GeneralTestCases, AttnTestCase)
31 from openpower
.simulator
.program
import Program
32 from openpower
.endian
import bigendian
33 from openpower
.test
.common
import TestAccumulatorBase
35 from openpower
.consts
import MSR
37 from soc
.experiment
.test
import pagetables
40 class MMUTestCase(TestAccumulatorBase
):
42 def case_virtual_ld_st(self
):
50 initial_regs
= [0] * 32
51 initial_regs
[1] = 0x1000000 # hm, was going to do mtspr 720,1 with this
52 initial_regs
[2] = 0x3456
53 initial_regs
[3] = 0x4321
54 initial_regs
[4] = 0x6543
55 initial_regs
[5] = 0x3457
56 initial_regs
[10] = 0xfe
58 # no pre-loaded memory here
61 # set virtual and non-privileged
62 initial_msr
= 1 << MSR
.PR
# must set "problem" state
63 initial_msr |
= 1 << MSR
.DR
# set "virtual" state for data
64 initial_msr |
= 1 << MSR
.IR
# set "virtual" state for instructions
66 # set PRTBL to 0x1000000
67 initial_sprs
= {720: 0x1000000} # PRTBL
69 print("MMUTEST: initial_msr=",initial_msr
)
70 self
.add_case(Program(lst
, bigendian
), initial_regs
,
71 initial_mem
=initial_mem
,
72 initial_sprs
=initial_sprs
,
73 initial_msr
=initial_msr
)
75 def case_virtual_invalid_no_prtbl(self
):
76 """virtual memory test but with no PRTBL set it is expected
77 to throw an "invalid" exception
83 initial_regs
= [0] * 32
85 # set virtual and non-privileged
86 initial_msr
= 1 << MSR
.PR
# must set "problem" state
87 initial_msr |
= 1 << MSR
.DR
# set "virtual" state for data
88 initial_msr |
= 1 << MSR
.IR
# set "virtual" state for instructions
90 print("MMUTEST: initial_msr=",initial_msr
)
91 self
.add_case(Program(lst
, bigendian
), initial_regs
,
92 initial_msr
=initial_msr
,
93 stop_at_pc
=0x400) # stop at this exception addr
95 if __name__
== "__main__":
97 if len(sys
.argv
) == 2:
98 if sys
.argv
[1] == 'nosvp64':
102 print ("SVP64 test mode enabled", svp64
)
104 unittest
.main(exit
=False)
105 suite
= unittest
.TestSuite()
107 # MMU/DCache integration tests
108 suite
.addTest(TestRunner(MMUTestCase().test_data
, svp64
=svp64
,
110 rom
=pagetables
.test1
))
112 runner
= unittest
.TextTestRunner()