Home

Awesome

PicoStation 3D

Top view of board, showing an RP2040 microcontroller, iCE40 UP5k FPGA, 8MB HyperRAM, HDMI socket, micro SD receptacle, audio jack, two SNES controller ports, micro USB for power + data.

This is an unfinished, untested project to develop a 3D games console based on an RP2040 microcontroller and an iCE40 UP5k FPGA. Quick links:

From left to right, the components on the top edge are:

The bottom edge has two SNES controller sockets. Also on the board is an 8MiB HyperRAM connected to the FPGA.

There is a RESET and BOOTSEL button for the RP2040, for quick firmware updates over USB, but the debug header (UART + SWD) is a better solution for iterating and developing code.

There are 12 wires connecting the FPGA to the microcontroller, one of them going from a GPOUT clock output on the RP2040 to a GB_IN global clock input pin on the UP5k. The intention is to use these for an 8 bit parallel bus with a free-running clock, a valid-ready handshake and an IRQ line, and for the UP5k to derive its internal clocks from the bus clock. This interface overlaps with the pins required to load the FPGA's internal configuration memory (and the RP2040 also has control of the UP5k's reset) so there is no separate external flash required for the UP5k.

Board Use Cases

Project Status

I've laid out a first iteration of the board, and have soldered up a prototype, but haven't had the chance to bring up the board or write any firmware, thanks to being a bit overloaded with the launch of RP2040 itself!

Front view of a prototype board, showing the two SNES controller connectors soldered to the front

Top detail of a prototype board, showing the RP2040 microcontroller, iCE40 UP5k FPGA, and HyperRAM. The controller ports are labelled player 0 and player 1.

Rear view of a prototype board, showing left to right the HDMI socket, FPGA LED, USB socket, SD card slot, microcontroller LED, and audio jack.

There are questionable decisions in the schematic (in particular the power chain violates the UP5k's sequencing requirements) so you shouldn't copy what you see here, but I'm posting this anyway because it might inspire somebody to make something better, and that is more important than me being embarrassed about my shoddy design work.

You can find a proof of concept for direct DVI output from a UP5k FPGA in this repo.

I've also managed to squeeze RISCBoy plus a DVI output onto a UP5k. Still need to push that code but you can see a video of it I tweeted. This shows you can fit plenty of interesting graphics hardware (and in this case a RISC-V processor) into a UP5k whilst generating DVI-D signals.

Known issues with rev A:

If you have read all the way to the end and you have spotted something else that irritates you about this design, please raise an issue! It will be a while until I get to Rev B. The main purpose of Rev A was to explore what I could get away with, and to develop the comms and interactions between microcontroller and FPGA.