This is my third year project and the subject of my dissertation, programmable state-machine based I/O blocks designed for use in low-power RISC-V SoCs.
sbt run
generates the verilog, which can then be synthesised or simulated however you pleasesbt test
runs the testbenches, verifying things work as intended
sbt run
to write the Verilog to gen/PioAxiWrapper.v
PioAxiWrapper.v
The primary reference for using the PIO is The RP2040 Datasheet. /docs
includes some rough documentation on the instruction set as implemented by this hardware. My dissertation also serves as good documentation.
A simple Rust test binary is included in /drivers
. The justfile
includes a recipe to build it: just binary
. drivers/src/pio.rs
contains a driver interface for the PIO. If you wish to use the PIO within a larger piece of software, the types and methods exported by this module will be of use.