| *** Variables *** |
| ${UART} sysbus.cpu.uartSemihosting |
| |
| *** Keywords *** |
| Create Machine |
| Execute Command using sysbus |
| Execute Command mach create |
| Execute Command machine LoadPlatformDescription @platforms/cpus/xtensa-sample-controller.repl |
| |
| Load Opcodes To Memory |
| # MOVI at0, 0x400 |
| Execute Command sysbus WriteDoubleWord 0x00 0x0000A402 |
| # L32I at1, at0, 0x0 |
| Execute Command sysbus WriteDoubleWord 0x03 0x00002012 |
| # L32I at2, at0, 0x1 (load from at0 + 4) |
| Execute Command sysbus WriteDoubleWord 0x06 0x00012022 |
| # BEQZ at2, 0x12 |
| Execute Command sysbus WriteDoubleWord 0x09 0x00005216 |
| # QUOU at3, at1, at2 (integer division) |
| Execute Command sysbus WriteDoubleWord 0x0c 0x00C23120 |
| # J 0x15 |
| Execute Command sysbus WriteDoubleWord 0x0f 0x00000086 |
| # MOVI at3, 0x0 |
| Execute Command sysbus WriteDoubleWord 0x12 0x0000A032 |
| # J 0x15 |
| Execute Command sysbus WriteDoubleWord 0x15 0xFFFFFF06 |
| |
| *** Test Cases *** |
| Test Division |
| ${NUMERATOR}= Set Variable 0x10 |
| ${DENOMINATOR}= Set Variable 0x02 |
| ${EXPECTED_RES}= Evaluate str(0 if ${DENOMINATOR} == 0 else ${NUMERATOR} // ${DENOMINATOR}) |
| |
| Create Machine |
| Execute Command machine LoadPlatformDescriptionFromString 'opmem: Memory.MappedMemory @ sysbus 0x0 { size: 0x30000 }' |
| Execute Command cpu PC 0x0 |
| Load Opcodes To Memory |
| |
| # Load operands of the operation |
| # in this example it will calculate: |
| # 0x10 / 0x02 |
| Execute Command sysbus WriteDoubleWord 0x400 ${NUMERATOR} |
| Execute Command sysbus WriteDoubleWord 0x404 ${DENOMINATOR} |
| |
| Execute Command cpu Step |
| PC Should Be Equal 0x3 |
| Register Should Be Equal 1 0x400 |
| |
| Execute Command cpu Step |
| PC Should Be Equal 0x6 |
| Register Should Be Equal 2 ${NUMERATOR} |
| |
| Execute Command cpu Step |
| PC Should Be Equal 0x9 |
| Register Should Be Equal 3 ${DENOMINATOR} |
| |
| Execute Command cpu Step 3 |
| |
| PC Should Be Equal 0x15 |
| Register Should Be Equal 4 ${EXPECTED_RES} |
| |
| |
| Test Zephyr hello_world sample |
| Create Machine |
| Execute Command sysbus LoadELF @https://dl.antmicro.com/projects/renode/xtensa-sample-controller-zephyr-hello-world.elf-s_293544-4be60f8a3891e70c30e1e8a471df4ad12ab08144 |
| Execute Command cpu PC 0x50000000 |
| |
| Create Terminal Tester ${UART} |
| |
| Start Emulation |
| |
| Wait For Line On Uart Booting Zephyr OS |
| Wait For Line On Uart Hello World! qemu_xtensa |