# Requirements & Functional Specification ## Requirements Specification The aim of the project is the implementation of the Raspberry Pi's RP2040 programmable I/O state machine (PIO) in an FPGA to help understanding this instance and general forms of programmable state machines. Driving a 64x64 RGB LED matrix could be optional illustrations of the PIO capabilities. ![Hardware top level block diagram](res/SoC_PIO_Block_Diagram.svg) ## Functional Specification - PIO original specification - UART ### Mandatory - Compatibility to the Raspi PIO spec - Side-set - Program wrapping - Autopush and autopull - Clock dividers - Forced and `EXEC`’d instructions - Full instruction set `JMP`, `WAIT`, `IN`, `OUT`, `PUSH`, `PULL`, `MOV`, `IRQ`, `SET` - 4 state machines per PIO block - 4 testing Programs - UART - SPI - Manchester encoded UART/Differential manchester (BMC) TX and RX - (I2C) ### Optional: - FIFO joining - Multiple PIO blocks - Full GPIO mapping support - Additional PIO functions for common tasks - CRC calculation - Stuff bit counter - Same timing/performance capabilities within the possible frequency range of the FPGA - Video output via 64x64 RGB LED matrix - Language and compiler for PIO assembly