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

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