*** 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 SetRegister 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 SetRegister 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 SetRegister 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