| *** Keywords ** |
| |
| Create Platform |
| Execute Command mach create |
| Execute Command using sysbus |
| Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV32 @ sysbus { cpuType: \\"rv32gc\\"; timeProvider: empty }" |
| Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x1000 }" |
| Execute Command machine LoadPlatformDescriptionFromString "uart: UART.LiteX_UART @ sysbus 0x2000" |
| Execute Command machine LoadPlatformDescriptionFromString "radio: Wireless.NRF52840_Radio @ sysbus 0x3000" |
| |
| Should Throw Python Syntax Exception |
| [Arguments] ${command} |
| ${out}= Run Keyword And Expect Error KeywordException:* |
| ... Execute Command ${command} |
| Should Contain ${out} [FatalError] unexpected EOF while parsing (Line 1, Column 9) |
| |
| Read Should Be Equal |
| [Arguments] ${type} ${address} ${value} |
| |
| ${res}= Execute Command sysbus Read${type} ${address} |
| Should Be Equal As Integers ${res} ${value} |
| |
| *** Test Cases *** |
| |
| Should Return Syntax Error |
| Create Platform |
| |
| # BlockPythonEngine |
| Should Throw Python Syntax Exception |
| ... cpu AddHook 0xC0FFEE "if error" |
| |
| # InterruptPythonEngine |
| Should Throw Python Syntax Exception |
| ... cpu AddHookAtInterruptBegin "if error" |
| |
| # BusPeripheralsHooksPythonEngine |
| Should Throw Python Syntax Exception |
| ... sysbus SetHookAfterPeripheralRead uart "if error" |
| |
| # WatchpointHookPythonEngine |
| Should Throw Python Syntax Exception |
| ... sysbus AddWatchpointHook 0xC0FFEE Byte Read "if error" |
| |
| # PacketInterceptionPythonEngine |
| Execute Command emulation CreateIEEE802_15_4Medium "wireless" |
| Should Throw Python Syntax Exception |
| ... wireless SetPacketHookFromScript radio "if error" |
| |
| # UartPythonEngine |
| Should Throw Python Syntax Exception |
| ... uart AddLineHook "foobar" "if error" |
| |
| # UserStatePythonEngine |
| Should Throw Python Syntax Exception |
| ... machine AddUserStateHook "foobar" "if error" |
| |
| Should Abort On Runtime Error |
| Create Platform |
| Create Log Tester 1 |
| |
| Execute Command logLevel -1 cpu |
| Execute Command cpu InstallCustomInstructionHandlerFromString "11111111111111111111111100001011" "a = b" |
| Execute Command sysbus WriteDoubleWord 0x00000000 0xffffff0b |
| Execute Command cpu PC 0x00000000 |
| |
| Execute Command cpu Step |
| Wait For Log Entry Python runtime error: name 'b' is not defined |
| Wait For Log Entry CPU abort detected, halting. |
| |
| PyDev Should Handle QuadWord Accesses |
| Execute Command mach create |
| Execute Command numbersMode Hexadecimal |
| |
| ${init_value} = Set Variable 0x1234567890abcdef |
| ${init_value_32} = Evaluate ${init_value} & 0xFFFFFFFF |
| ${pydev_script} = Catenate SEPARATOR=\n |
| ... """ |
| ... if request.isInit: |
| ... \ \ value = ${init_value} |
| ... elif request.isRead: |
| ... \ \ request.value = value |
| ... elif request.isWrite: |
| ... \ \ value = request.value |
| ... """ |
| ${pydev_address} = Set Variable 0x8 |
| |
| Execute Command machine PyDevFromString ${pydev_script} ${pydev_address} 8 True |
| Read Should Be Equal QuadWord ${pydev_address} ${init_value} |
| Read Should Be Equal DoubleWord ${pydev_address} ${init_value_32} |
| |
| ${new_value} = Set Variable 0xfedcba0987654321 |
| Execute Command sysbus WriteQuadWord ${pydev_address} ${new_value} |
| Read Should Be Equal QuadWord ${pydev_address} ${new_value} |
| |
| Should Handle Unsupported Variable Types |
| Execute Command $a=@a |
| |
| ${out}= Run Keyword And Expect Error KeywordException:* |
| ... Execute Command py $a |
| Should Contain ${out} There was an error when executing command 'py $a': Variable type has to be a string. |