Files
simulation_core/tools/guest_cache/guest_cache.robot

105 lines
4.7 KiB
Plaintext
Raw Normal View History

*** Settings ***
Library String
Library Collections
Library Process
*** Variables ***
${CACHE_TESTBENCH} ${RENODETOOLS}/guest_cache/src/cache_testbench.py
${GUEST_CACHE_ANALYZER} ${RENODETOOLS}/guest_cache/src/renode_cache_interface.py
${EXPECTED_OUTPUT} {"l1i,u74": {"hit": 13, "miss": 1, "invalidations": 0}, "l1d,u74": {"hit": 2, "miss": 4, "invalidations": 0}}
${PLATFORM_REPL} platforms/cpus/sifive-fu740.repl
${CPU} sysbus.u74_1
${ASSEMBLY} SEPARATOR=\n
... """
... // U74 has 4-way cache with a line size of 64 bytes.
... la t0, arr
...
... li t1, 1
... sw t1, 0(t0) // Miss
...
... li t1, 2
... sw t1, 256(t0) // Miss
...
... li t1, 3
... sw t1, 512(t0) // Miss
...
... li t1, 3
... sw t1, 1024(t0) // Miss
...
... li t1, 3
... sw t1, 512(t0) // Hit
...
... li t1, 3
... sw t1, 1024(t0) // Hit
...
... arr:
... """
*** Keywords ***
Execute Python Script
[Arguments] ${path} ${args} ${outputPath}=${None}
${all_args}= Create List ${path} @{args}
IF $outputPath
${out}= Evaluate open($outputPath, "w")
ELSE
${out}= Set Variable ${None}
END
Evaluate subprocess.run([sys.executable] + ${all_args}, stdout=$out) sys,subprocess
IF $out
Evaluate $out.close()
END
Prepare Machine
[Arguments] ${trace_file}
Execute Command mach create
Execute Command machine LoadPlatformDescription @${PLATFORM_REPL}
Execute Command sysbus.s7 IsHalted true
Execute Command sysbus.u74_2 IsHalted true
Execute Command sysbus.u74_3 IsHalted true
Execute Command sysbus.u74_4 IsHalted true
Execute Command ${CPU} PC 0x80000000
${size}= Execute Command ${CPU} AssembleBlock `${CPU} PC` ${ASSEMBLY}
Execute Command ${CPU} AddHook 0x8000002c "self.IsHalted=True"
Execute Command ${CPU} MaximumBlockSize 1
Execute Command ${CPU} CreateExecutionTracing "tracer" @${trace_file} PCAndOpcode
Execute Command tracer TrackMemoryAccesses
*** Test Cases ***
Should Pass Selftest
${output_file}= Allocate Temporary File
Remove File ${output_file}
${args}= Create List
Execute Python Script ${CACHE_TESTBENCH} ${args} outputPath=${output_file}
${testbench_file}= Get File ${output_file}
${testbench_results}= Split To Lines ${testbench_file}
List Should Contain Value ${testbench_results} Fully associative cache test success!
List Should Contain Value ${testbench_results} Set associative cache test success!
List Should Contain Value ${testbench_results} Direct mapped cache test success!
List Should Contain Value ${testbench_results} FIFO cache test success!
List Should Contain Value ${testbench_results} LFU cache test success!
List Should Contain Value ${testbench_results} LRU cache test success!
Remove File ${output_file}
Should Analyze Cache
${trace_file}= Allocate Temporary File
${analyzer_file}= Allocate Temporary File
Prepare Machine ${trace_file}
Start Emulation
${args}= Create List
Append To List ${args}
... --output
... ${analyzer_file}
... ${trace_file}
... presets
... fu740.u74
Execute Python Script ${GUEST_CACHE_ANALYZER} ${args}
${analyzer_output}= Get File ${analyzer_file}
Log To Console ${analyzer_output}
Should Be Equal ${analyzer_output} ${EXPECTED_OUTPUT}