# Experiar Core Tests
A number of tests can (when they have been implemented) be run on both the management core and user core, to ensure all aspects of the SoC work correctly. All tests should be compatible with fabricated hardware, with success measurable from changes to GPIO states.

## Peripherals
- GPIO verify-peripheralsGPIO-rtl (-gl)
	- Try outputs
	- Try inputs
- UART verify-peripheralsUART-rtl (-gl)
	- Configure devices
	- Verify config is set
	- Send bytes from caravel to uart0
	- Sent bytes from uart0 to caravel
	- Set GPIO high if pass
- SPI verify-peripheralsSPI-rtl (-gl)
	- Connect test device as a 16 bit shift register
	- Set SPI output (will need a high frequency)
	- Write 3 bytes
	- Check that 3 bytes back are correct
	- Set GPIO high if pass
- PWM verify-peripheralsPWM-rtl (-gl)
	- Set PWM output on two different devices
	- Check that they alternate
		- Maybe also check frequency and on time
	- Read counter
	- Read PWM value register
	- Set GPIO high if pass

## Memory verify-memory-rtl (-gl)
- Write data to each SRAM macro
- Read back from each SRAM macro and compare data
- Read back as byte and half values and compare data
- Read back byte and half with offset and compare data
- Read from unused memory on wishbone and check that the data back is -1
- Read from unused memory in peripheral bus and check that the data back is -1
- Read from unused memory in a core and check that the data back is -1
- Read from unused memory in video config and check that the data back is -1
- Set GPIO high if pass

## Video verify-video-rtl (-gl)
- Write to all configs to make screen refresh happen much faster
- Write to start of frame buffer to have some pixel data
- Check that output is as expected
- Measure the signal timings, and make sure they are correct

## Core (these will run for both cores) verify-core-rtl (-gl)
- Program Counter and management
	- Write to program counter
	- Check that the program counter is correct
	- Write NOP for step (this does require instruction reads to work)
	- Step core
	- Check that the program counter is correct
	- Jump the program counter
	- Check that the program counter is correct
	- Free run the program counter
	- Check that the program counter increases
	- Set GPIO high if pass
- Store/Load instructions
	- Write basic program to memory
		- Write to location in local memory, then read back
	- Set program counter
	- Step through instructions
	- Read back register values
	- Run management memory test on user core
	- Run management peripheral test on user core
		- UART test modified so user core transfers data to management core, which transfers data back 
	- Run management video test on user core
	- Set GPIO high if pass
- riscv-arch-test
	- Integrate test into makefile