# 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
- 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

## Core (these will run for both cores) verify-core-rtl (-gl)
- Program Counter			
	- Write to program counter
	- Check that the program counter is correct
	- Step core
	- Check that program counter is correct
	- Set GPIO high if pass
- Registers				
	- Write to r0, r1, r2
	- Check that r0==0, and r1, and r2 have correct data
	- Set GPIO high if pass
- Basic register instructions
	- Write basic program to memory
	- Set program counter to start
	- Step through instructions
	- Read back register values
	- 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
	- Set GPIO high if pass
- Jump instructions
	- Write basic program to memory
		- Check conditional and unconditional jumps
	- Set program counter
	- Step through instructions
	- Read back program counter
	- Set GPIO high if pass
- Memory access
	- Run management memory test on user core
- Peripheral access
	- Run management peripheral test on user core
		- UART test modified so user core transfers data to management core, which transfers data back 
- Video access
	- Run management video test on user core
- riscv-arch-test
	- Integrate test into makefile