1*** Variables ***
2${URI}                          @https://dl.antmicro.com/projects/renode
3${UART}                         sysbus.uart
4${CPU_IBEX_NATIVE_LINUX}        ${URI}/libVcpu_ibex-Linux-x86_64-13112907851.so-s_2251128-ab2dcb1801188d7f934bdeafa93f9c1edc60ad39
5${CPU_IBEX_NATIVE_WINDOWS}      ${URI}/libVcpu_ibex-Windows-x86_64-13112907851.dll-s_3426669-58d11ffc81ea755c1d1151e6b33fc13164bb13d5
6${CPU_IBEX_NATIVE_MACOS}        ${URI}/libVcpu_ibex-macOS-x86_64-13112907851.dylib-s_336528-7677f09f18bfb2937ad2bffdd63ed7d76bb15d56
7
8*** Keywords ***
9Create Machine
10    Execute Command                 using sysbus
11    Execute Command                 mach create
12    Execute Command                 machine LoadPlatformDescription @platforms/cpus/verilated/verilated_ibex.repl
13    Execute Command                 sysbus.cpu SimulationFilePathLinux ${CPU_IBEX_NATIVE_LINUX}
14    Execute Command                 sysbus.cpu SimulationFilePathWindows ${CPU_IBEX_NATIVE_WINDOWS}
15    Execute Command                 sysbus.cpu SimulationFilePathMacOS ${CPU_IBEX_NATIVE_MACOS}
16    Execute Command                 logLevel 3
17    Execute Command                 $bios=@https://dl.antmicro.com/projects/renode/litex_ibex--bios.bin-s_20712-80d064cf8ab28801b78c0e5a63cac4830016f6c8
18    Execute Command                 showAnalyzer ${UART}
19    Execute Command                 sysbus LoadBinary $bios 0x0
20    Execute Command                 cpu PC 0x0
21    Create Terminal Tester          ${UART}
22    Start Emulation
23
24Get Virtual Time
25    ${out}=  Execute Command        emulation GetTimeSourceInfo
26    ${match}=  Get Regexp Matches   ${out}      Elapsed Virtual Time: 00:00:([0-9]+).([0-9]+)     1  2
27    ${mc}=  Convert To Integer      ${match[0][1]}
28    ${se}=  Convert To Integer      ${match[0][0]}
29    ${t}=   Evaluate                ${mc} + ${se} * 1000000
30    RETURN  ${t}
31
32Sleep And Measure
33    ${t1}=  Get Virtual Time
34    Sleep                       4s
35    ${t2}=  Get Virtual Time
36    Should Be Equal             ${t1}  ${t2}
37
38
39*** Test Cases ***
40Should Pause And Resume
41    [Tags]                          skip_host_arm
42    Create Machine
43
44    Wait For Line On Uart       Build your hardware, easily!  pauseEmulation=true
45    Sleep And Measure
46    Execute Command             start
47    Wait For Line On Uart       CPU:\\s+Ibex               treatAsRegex=true
48
49Should Pause And Resume Cpu
50    [Tags]                          skip_host_arm
51    Create Machine
52
53    Wait For Line On Uart       Build your hardware, easily!
54    Execute Command             cpu Pause
55    Sleep And Measure
56    Execute Command             cpu Resume
57    Wait For Line On Uart       CPU:\\s+Ibex               treatAsRegex=true
58
59Should Enter Single Step Blocking
60    [Tags]                          skip_host_arm
61    Create Machine
62
63    Wait For Line On Uart       Build your hardware, easily!
64    Execute Command             cpu ExecutionMode SingleStep
65    Sleep And Measure
66    Execute Command             cpu ExecutionMode Continuous
67    Wait For Line On Uart       CPU:\\s+Ibex               treatAsRegex=true
68
69Should Enter Single Step Non Blocking
70    [Tags]                          skip_host_arm
71    Create Machine
72    Execute Command             emulation SingleStepBlocking false
73
74    Wait For Line On Uart       Build your hardware, easily!
75    Execute Command             cpu ExecutionMode SingleStep
76    ${t1}=  Get Virtual Time
77    Test If Uart Is Idle        4
78    ${t2}=  Get Virtual Time
79    Should Be True              ${t2} - ${t1} >= 4000000
80    Execute Command             cpu ExecutionMode Continuous
81    Wait For Line On Uart       CPU:\\s+Ibex               treatAsRegex=true
82
83Should Reset
84    [Tags]                          skip_host_arm
85    Create Machine
86
87    Wait For Line On Uart       Build your hardware, easily!
88
89    Execute Command             cpu Reset
90    Execute Command             cpu PC 0x0
91    Execute Command             cpu Resume
92
93    Wait For Line On Uart       Build your hardware, easily!
94