| *** Keywords *** | |
| Prepare Machine | |
| ${TEST_DIR}= Evaluate r"${CURDIR}".replace(" ", "\\ ") | |
| Execute Command include @${TEST_DIR}/TestPeripheral.cs | |
| Execute Command mach create | |
| Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.ARMv7A @ sysbus { cpuType: \\"cortex-a9\\" }" | |
| Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x1000 }" | |
| Execute Command machine LoadPlatformDescriptionFromString "mock: Mocks.TestPeripheral @ sysbus 0x2000" | |
| Prepare Multicore Machine | |
| ${TEST_DIR}= Evaluate r"${CURDIR}".replace(" ", "\\ ") | |
| Execute Command include @${TEST_DIR}/TestPeripheral.cs | |
| Execute Command mach create | |
| Execute Command machine LoadPlatformDescriptionFromString "cpu0: CPU.ARMv7A @ sysbus { cpuType: \\"cortex-a9\\" }" | |
| Execute Command machine LoadPlatformDescriptionFromString "cpu1: CPU.ARMv7A @ sysbus { cpuType: \\"cortex-a9\\" }" | |
| Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x1000 }" | |
| Execute Command machine LoadPlatformDescriptionFromString "mock: Mocks.TestPeripheral @ sysbus 0x2000" | |
| Scheduled Action Should Be Delayed By ${delay} Microseconds | |
| ${x}= Wait For Log Entry Written value 0x0 to Reg0 | |
| ${c}= Get Regexp Matches ${x} \\.([0-9]+) 1 | |
| ${y}= Evaluate str(int(${c[0]}) + ${delay}).rjust(6, '0') | |
| Wait For Log Entry Executing scheduled action for Reg0; current timestamp is 00:00:00.${y} | |
| Fill Memory | |
| # prepare a block of code | |
| # containing precisely 12 instructions | |
| # consisting mostly of `nops` with | |
| # a single `strb` inbetween | |
| # 1: nop | |
| Execute Command sysbus WriteDoubleWord 0x10 0xe320f000 | |
| # 2: nop | |
| Execute Command sysbus WriteDoubleWord 0x14 0xe320f000 | |
| # 3: nop | |
| Execute Command sysbus WriteDoubleWord 0x18 0xe320f000 | |
| # 4: nop | |
| Execute Command sysbus WriteDoubleWord 0x1c 0xe320f000 | |
| # 5: nop | |
| Execute Command sysbus WriteDoubleWord 0x20 0xe320f000 | |
| # 6: nop | |
| Execute Command sysbus WriteDoubleWord 0x24 0xe320f000 | |
| # 7: nop | |
| Execute Command sysbus WriteDoubleWord 0x28 0xe320f000 | |
| # 8: strb r0, [r1] | |
| Execute Command sysbus WriteDoubleWord 0x2c 0xe5c10000 | |
| # 9: nop | |
| Execute Command sysbus WriteDoubleWord 0x30 0xe320f000 | |
| # 10: nop | |
| Execute Command sysbus WriteDoubleWord 0x34 0xe320f000 | |
| # 11: nop | |
| Execute Command sysbus WriteDoubleWord 0x38 0xe320f000 | |
| # 12: nop | |
| Execute Command sysbus WriteDoubleWord 0x3c 0xe320f000 | |
| # 13: j -4 | |
| Execute Command sysbus WriteDoubleWord 0x40 0xeafffffd | |
| *** Test Cases *** | |
| Should Delay Action | |
| Prepare Machine | |
| Execute Command sysbus.mock SetDelay 3 | |
| Create Log Tester 1 | |
| Execute Command sysbus.cpu PC 0x10 | |
| Execute Command sysbus.cpu SetRegisterUnsafe 1 0x2000 | |
| Fill Memory | |
| Scheduled Action Should Be Delayed By 3 Microseconds | |
| Should Delay Action With Multiple Cores | |
| Prepare Multicore Machine | |
| Execute Command machine SetSerialExecution true | |
| Execute Command sysbus.mock SetDelay 3 | |
| Create Log Tester 1 | |
| Execute Command sysbus.cpu0 PC 0x10 | |
| Execute Command sysbus.cpu0 SetRegisterUnsafe 1 0x2000 | |
| # just make the other CPU spin in a loop | |
| Execute Command sysbus.cpu1 PC 0x3c | |
| Fill Memory | |
| Scheduled Action Should Be Delayed By 3 Microseconds | |
| Should Delay Action With Multiple Cores In Different Ordering | |
| Prepare Multicore Machine | |
| Execute Command machine SetSerialExecution true | |
| Execute Command sysbus.mock SetDelay 3 | |
| Create Log Tester 1 | |
| Execute Command sysbus.cpu1 PC 0x10 | |
| Execute Command sysbus.cpu1 SetRegisterUnsafe 1 0x2000 | |
| # just make the other CPU spin in a loop | |
| Execute Command sysbus.cpu0 PC 0x3c | |
| Fill Memory | |
| Scheduled Action Should Be Delayed By 3 Microseconds |