+++ /dev/null
-from nmigen import Module, Signal
-from soc.simple.test.test_runner import TestRunner
-from openpower.simulator.program import Program
-from openpower.endian import bigendian
-import unittest
-
-from openpower.test.common import (TestAccumulatorBase, skip_case, TestCase,
- ALUHelpers)
-
-def b(x):
- return int.from_bytes(x.to_bytes(8, byteorder='little'),
- byteorder='big', signed=False)
-
-
-default_mem = { 0x10000: # PARTITION_TABLE_2
- # PATB_GR=1 PRTB=0x1000 PRTS=0xb
- b(0x800000000100000b),
-
- 0x30000: # RADIX_ROOT_PTE
- # V = 1 L = 0 NLB = 0x400 NLS = 9
- b(0x8000000000040009),
-
- 0x40000: # RADIX_SECOND_LEVEL
- # V = 1 L = 1 SW = 0 RPN = 0
- # R = 1 C = 1 ATT = 0 EAA 0x7
- b(0xc000000000000187),
-
- 0x1000000: # PROCESS_TABLE_3
- # RTS1 = 0x2 RPDB = 0x300 RTS2 = 0x5 RPDS = 13
- b(0x40000000000300ad),
- }
-
-
-class MMUTestCase(TestAccumulatorBase):
- # MMU on microwatt handles MTSPR, MFSPR, DCBZ and TLBIE.
- # libre-soc has own SPR unit
- # libre-soc MMU supports MTSPR and MFSPR but **ONLY** for the subset
- # of SPRs it actually does.
- # other instructions here -> must be load/store
-
- def case_mmu_ldst(self):
- lst = [
- #"mtspr 720, 1", # XXX do not execute unsupported instructions
- "lhz 3, 0(1)" # load some data
- ]
-
- initial_regs = [0] * 32
-
- # set process table
- prtbl = 0x1000000
- initial_regs[1] = prtbl
-
- initial_sprs = {'DSISR': 0, 'DAR': 0,
- 720: 0}
- self.add_case(Program(lst, bigendian),
- initial_regs, initial_sprs)
-
-
-
-
-if __name__ == "__main__":
- unittest.main(exit=False)
- suite = unittest.TestSuite()
- suite.addTest(TestRunner(MMUTestCase().test_data, microwatt_mmu=True,
- rom=default_mem))
- runner = unittest.TextTestRunner()
- runner.run(suite)
-
-# soc/simple/test/test_runner.py
from nmigen.cli import rtlil
import unittest
-from openpower.decoder.isa.caller import ISACaller, special_sprs
-from openpower.decoder.power_decoder import (create_pdecode)
-from openpower.decoder.power_decoder2 import (PowerDecode2)
+from openpower.decoder.power_decoder import create_pdecode
+from openpower.decoder.power_decoder2 import PowerDecode2
from openpower.decoder.power_enums import (XER_bits, Function, MicrOp, CryIn)
-from openpower.decoder.selectable_int import SelectableInt
from openpower.simulator.program import Program
from openpower.decoder.isa.all import ISA
from openpower.endian import bigendian
from openpower.consts import MSR
+from openpower.test.mmu.mmu_cases import MMUTestCase
-from openpower.test.common import (
- TestAccumulatorBase, skip_case, TestCase, ALUHelpers)
+from openpower.test.common import (TestAccumulatorBase, skip_case, ALUHelpers)
#from soc.fu.spr.pipeline import SPRBasePipe
#from soc.fu.spr.pipe_data import SPRPipeSpec
from soc.fu.mmu.fsm import FSMMMUStage
import random
from soc.fu.div.test.helper import (log_rand, get_cu_inputs,
- set_alu_inputs, DivTestHelper)
+ set_alu_inputs)
import power_instruction_analyzer as pia
return None #TODO
#incomplete test - connect fsm inputs first
-class MMUTestCase(TestAccumulatorBase):
- # MMU handles MTSPR, MFSPR, DCBZ and TLBIE.
- # other instructions here -> must be load/store
-
- #before running the test case: set DISR and DAR
-
- def case_mfspr_after_invalid_load(self):
- lst = [ # TODO -- set SPR on both sinulator and port interface
- "mfspr 1, 18", # DSISR to reg 1
- "mfspr 2, 19", # DAR to reg 2
- # TODO -- verify returned sprvals
- ]
-
- initial_regs = [0] * 32
-
- initial_sprs = {'DSISR': 0x12345678, 'DAR': 0x87654321}
- self.add_case(Program(lst, bigendian),
- initial_regs, initial_sprs)
-
+class MMUIlangCase(TestAccumulatorBase):
#def case_ilang(self):
# pspec = SPRPipeSpec(id_wid=2)
# alu = SPRBasePipe(pspec)
# vl = rtlil.convert(alu, ports=alu.ports())
# with open("trap_pipeline.il", "w") as f:
# f.write(vl)
+ pass
class TestRunner(unittest.TestCase):
unittest.main(exit=False)
suite = unittest.TestSuite()
suite.addTest(TestRunner(MMUTestCase().test_data))
+ suite.addTest(TestRunner(MMUIlangCase().test_data))
runner = unittest.TextTestRunner()
runner.run(suite)