blob: 319aa5ef81998cd2b5806adf40592f80b0435038 [file] [log] [blame]
*** 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