| *** Variables *** | |
| ${UART} sysbus.uart | |
| ${STDOUT} sysbus.stdout | |
| ${URI} @https://dl.antmicro.com/projects/renode | |
| *** Keywords *** | |
| Create Machine | |
| [Arguments] ${elf} | |
| Execute Command mach create | |
| Execute Command machine LoadPlatformDescription @platforms/boards/A2_CV32E40P.repl | |
| Execute Command sysbus LoadELF ${URI}/${elf} | |
| Create Test File | |
| [Arguments] ${file} | |
| ${string} = Set Variable ${EMPTY} | |
| FOR ${index} IN RANGE 128 | |
| ${string}= Catenate ${string} 00 ${index} | |
| END | |
| ${bytes}= Convert To Bytes ${string} int | |
| Create Binary File ${file} ${bytes} | |
| *** Test Cases *** | |
| Should Print Hello to UART | |
| Create Machine arnold-pulp-hello-s_354412-d0f4d2860104d3bb1d4524c4ee76ef476bbe1d1e | |
| Create Terminal Tester ${UART} | |
| Start Emulation | |
| Wait For Line On Uart Hello ! | |
| Should Set GPIO Output to High | |
| Create Machine arnold-pulp-gpio-s_380728-f9f273e2063a3ea7d4f9607cce4d7f12ea10bf63 | |
| Execute Command machine LoadPlatformDescriptionFromString "gpio: { 5 -> led@0 }; led: Miscellaneous.LED @ gpio 5" | |
| Create LED Tester sysbus.gpio.led | |
| Start Emulation | |
| Assert LED State true 1 | |
| Should Print to UART Using a Timer | |
| Create Machine arnold-pulp-timer-s_365004-fc268eecd231afb88a571748c864b6c3ab0bcb5d | |
| Create Terminal Tester ${UART} | |
| Set Test Variable ${SLEEP_TIME} 163 | |
| Set Test Variable ${SLEEP_TOLERANCE} 10 | |
| Set Test Variable ${REPEATS} 20 | |
| Start Emulation | |
| ${l}= Create List | |
| ${MAX_SLEEP_TIME}= Evaluate ${SLEEP_TIME} + ${SLEEP_TOLERANCE} | |
| FOR ${i} IN RANGE 0 ${REPEATS} | |
| ${r} Wait For Line On Uart Entered user handler | |
| Append To List ${l} ${r.timestamp} | |
| END | |
| FOR ${i} IN RANGE 1 ${REPEATS} | |
| ${i1}= Get From List ${l} ${i - 1} | |
| ${i2}= Get From List ${l} ${i} | |
| ${d}= Evaluate ${i2} - ${i1} | |
| Should Be True ${d} >= ${SLEEP_TIME} Too short sleep detected between entries ${i} and ${i + 1}: expected ${SLEEP_TIME}, got ${d} | |
| Should Be True ${d} <= ${MAX_SLEEP_TIME} Too long sleep detected between entires ${i} and ${i + 1}: expected ${SLEEP_TIME}, got ${d} | |
| END | |
| Should Echo Characters on UART | |
| Create Machine arnold-pulp-echo-s_387788-cf79547cd654f7ebad125546dd2c98e58b47731e | |
| Create Terminal Tester ${UART} | |
| Start Emulation | |
| Wait For Line On Uart Entered test | |
| Write Char On Uart t | |
| Wait For Prompt On Uart t | |
| Write Char On Uart e | |
| Wait For Prompt On Uart e | |
| Write Char On Uart s | |
| Wait For Prompt On Uart s | |
| Write Char On Uart t | |
| Wait For Prompt On Uart t | |
| Should Fail When I2S Not Configured | |
| Create Machine arnold-pulp-i2s_capture-s_566452-62d9e3e48551334dac1ab17af371728e66586c7a | |
| Create Log Tester 1 | |
| Start Emulation | |
| Wait For Log Entry Starting reception without an input file! Aborting | |
| Should Output I2S Samples From File | |
| Create Machine arnold-pulp-i2s_capture-s_566452-62d9e3e48551334dac1ab17af371728e66586c7a | |
| ${input_file}= Allocate Temporary File | |
| Create Test File ${input_file} | |
| Execute Command sysbus.i2s InputFile '${input_file}' | |
| Create Terminal Tester ${STDOUT} | |
| Start Emulation | |
| Wait For Line On Uart Value of sample 0 = 0 | |
| Wait For Line On Uart Value of sample 127 = 127 | |
| Should Run I2C test | |
| Create Machine arnold-pulp-i2c-s_389340-a622fbd1302bc8a0a52b70f8713bc028f341c902 | |
| Execute Command machine LoadPlatformDescriptionFromString "i2c_echo: Mocks.EchoI2CDevice @ i2c0 0x55" | |
| # There is a problem with the rt_i2c_write() function in the simulation. | |
| # It configures the DMA transfer with the first set of commands (CFG, START, WRITE address, RPT, WRITE), but fails to continue with the next one. | |
| # The i2c_step1() callback is being called as a result of the interrupt, but it doesn't start the transfer of the actual data. | |
| # It looks like the state of the X8 register is wrong - it should contain a base address of the controller, but instead it is 0. | |
| # As a result the write that should be directed to I2C's register ends up in the memory. | |
| # | |
| # The code belows patches the value of the register by setting it to the TxBufferBaseAddress register of the i2c0 device | |
| # in the i2c_step1() function (https://github.com/pulp-platform/pulp-rt/blob/master/kernel/riscv/udma-v3.S#L305). | |
| # | |
| # WARNING: the addresses below are binary-specific and should be adapted after rebuilding the demo | |
| Execute Command sysbus.cpu AddHook 0x1c008208 "self.SetRegisterUnsafeUlong(12, 0x1a102190)" | |
| Execute Command sysbus.cpu AddHook 0x1c00822c "self.SetRegisterUnsafeUlong(12, 0x1a102190)" | |
| Create Terminal Tester ${UART} | |
| Start Emulation | |
| Wait For Line On Uart Entering test | |
| Wait For Line On Uart reading... | |
| Wait For Line On Uart 0x0: 0x0 | |
| Wait For Line On Uart 0x1: 0x0 | |
| Wait For Line On Uart 0x2: 0x0 | |
| Wait For Line On Uart 0x3: 0x0 | |
| Wait For Line On Uart writing... | |
| Wait For Line On Uart readng again... | |
| Wait For Line On Uart 0x0: 0x0 | |
| Wait For Line On Uart 0x1: 0x1 | |
| Wait For Line On Uart 0x2: 0x2 | |
| Wait For Line On Uart 0x3: 0x3 | |
| Wait For Line On Uart the end | |
| SPI Should Send Bytes | |
| Create Machine arnold--pulp-rt-examples--spim-send.elf-s_414648-d0100af113d67254d957e26c9ea62c014a753a0c | |
| Execute Command machine LoadPlatformDescriptionFromString "dummySlave: Mocks.DummySPISlave @ spi" | |
| Create Log Tester 0.1 | |
| Execute Command logLevel 0 spi.dummySlave | |
| Start Emulation | |
| Wait For Log Entry Data received: 0x0 | |
| Wait For Log Entry Data received: 0x1 | |
| Wait For Log Entry Data received: 0x2 | |
| Wait For Log Entry Data received: 0x3 | |
| Wait For Log Entry Data received: 0x4 | |
| Wait For Log Entry Data received: 0x5 | |
| Wait For Log Entry Data received: 0x6 | |
| Wait For Log Entry Data received: 0x7 | |
| Wait For Log Entry Data received: 0x8 | |
| Wait For Log Entry Data received: 0x9 | |
| Wait For Log Entry Data received: 0xA | |
| Wait For Log Entry Data received: 0xB | |
| Wait For Log Entry Data received: 0xC | |
| Wait For Log Entry Data received: 0xD | |
| Wait For Log Entry Data received: 0xE | |
| Wait For Log Entry Data received: 0xF | |
| SPI Should Send Bytes Async | |
| Create Machine arnold--spim-async.elf-s_417852-3cf040621fd22ac14bd67be8decfe3a84f7d8d78 | |
| Execute Command machine LoadPlatformDescriptionFromString "dummySlave: Mocks.DummySPISlave @ spi" | |
| Create Terminal Tester sysbus.uart | |
| Create Log Tester 0.1 | |
| Execute Command logLevel 0 spi.dummySlave | |
| Start Emulation | |
| Wait For Line On Uart Executing callback! | |
| Wait For Log Entry Data received: 0x0 | |
| Wait For Log Entry Data received: 0x1F | |
| Wait For Line On Uart Executing callback! | |
| Wait For Log Entry Data received: 0x0 | |
| Wait For Log Entry Data received: 0x1F | |
| Wait For Line On Uart Executing callback! | |
| Wait For Log Entry Data received: 0x0 | |
| Wait For Log Entry Data received: 0x1F | |
| SPI Should Receive Bytes | |
| Create Machine arnold--pulp-rt-examples--spim-receive.elf-s_414528-ba2983aef41f1493d1f6b13c58ea0d7b843bf57a | |
| Execute Command machine LoadPlatformDescriptionFromString "dummySlave: Mocks.DummySPISlave @ spi" | |
| Execute Command logLevel 0 spi.dummySlave | |
| ${res}= Execute Command sysbus ReadDoubleWord 0x1C00A7F8 | |
| Should Contain ${res} 0x00000000 | |
| ${res}= Execute Command sysbus ReadDoubleWord 0x1C00A7FC | |
| Should Contain ${res} 0x00000000 | |
| ${res}= Execute Command sysbus ReadDoubleWord 0x1C00A800 | |
| Should Contain ${res} 0x00000000 | |
| ${res}= Execute Command sysbus ReadDoubleWord 0x1C00A804 | |
| Should Contain ${res} 0x00000000 | |
| FOR ${i} IN RANGE 0 16 | |
| Execute Command sysbus.spi.dummySlave EnqueueValue ${i} | |
| END | |
| Start Emulation | |
| Wait For Log Entry Data received: 0x0 (idx: 15) | |
| ${res}= Execute Command sysbus ReadDoubleWord 0x1C00A7F8 | |
| Should Contain ${res} 0x03020100 | |
| ${res}= Execute Command sysbus ReadDoubleWord 0x1C00A7FC | |
| Should Contain ${res} 0x07060504 | |
| ${res}= Execute Command sysbus ReadDoubleWord 0x1C00A800 | |
| Should Contain ${res} 0x0B0A0908 | |
| ${res}= Execute Command sysbus ReadDoubleWord 0x1C00A804 | |
| Should Contain ${res} 0x0F0E0D0C | |
| Should Read Frames From Camera | |
| Create Machine arnold-pulp-camera-s_391968-f3ac0d1bcaf06ba5811c3e5c333aeac8286c5bdc | |
| Execute Command machine LoadPlatformDescriptionFromString "himax: Sensors.HiMaxHM01B0 @ camera_controller" | |
| Execute Command sysbus.camera_controller.himax AddFrame ${URI}/images/person_image_0.jpg-s_3853-7f2125e28423fa117a1079d84785b17c9b70f62d | |
| Create Terminal Tester ${UART} | |
| Start Emulation | |
| Wait For Line On Uart Entering main controller | |
| Wait For Line On Uart Frame 1 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 2 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 3 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 4 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 5 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 6 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 7 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 8 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 9 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Frame 10 captured! | |
| Wait For Line On Uart 0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a 0x46 | |
| Wait For Line On Uart Test success |