Tiny Tapeout PMOD layouts¶
This page is the reference for the PMOD pin layouts that Tiny Tapeout recommends on its demo boards. It covers the demo board’s three PMOD connectors, its signal groups and the standard layouts built on them. It also covers community PMOD boards. The RP2350 (demo board v3, TT09+) and RP2040 (demo board v2, TT06 to TT08) GPIO maps behind the connectors are here too. The layouts follow the PMOD interface, and the HAT that joins them to a Raspberry Pi is on Raspberry Pi PMOD HAT.
Tiny Tapeout I/O signal groups¶
Tiny Tapeout projects have three groups of 8 signals, 24 in all. Signal Group is the group, Direction is its direction as seen from the chip and Description is its use.
Signal Group |
Direction |
Description |
|---|---|---|
|
Input to chip |
User inputs (from peripherals) |
|
Output from chip |
User outputs (to peripherals) |
|
Bidirectional |
Configurable per-pin |
Demo board PMOD connectors¶
The TT demo board has three 12-pin PMOD connectors on the bottom edge, one per signal group. The diagram shows the board from the top, with the connectors in the order ui_in, uio, uo_out.
┌─────────────────────────────────────────┐
│ TT Demo Board │
│ │
│ ┌───────────┬───────────┬───────────┐ │
│ │ ui_in │ uio │ uo_out │ │
│ │ (input) │ (bidir) │ (output) │ │
│ └───────────┴───────────┴───────────┘ │
└─────────────────────────────────────────┘
Each connector maps signals straight through: IO1=bit[0], IO2=bit[1], … IO8=bit[7]. PMOD Pin is the connector pin, Row is its row and TT Signal is the signal it carries for group X.
PMOD Pin |
Row |
TT Signal (for each group X) |
|---|---|---|
1 (IO1) |
Top |
X[0] |
2 (IO2) |
Top |
X[1] |
3 (IO3) |
Top |
X[2] |
4 (IO4) |
Top |
X[3] |
5 |
Top |
GND |
6 |
Top |
VCC (3.3V) |
7 (IO5) |
Bottom |
X[4] |
8 (IO6) |
Bottom |
X[5] |
9 (IO7) |
Bottom |
X[6] |
10 (IO8) |
Bottom |
X[7] |
11 |
Bottom |
GND |
12 |
Bottom |
VCC (3.3V) |
Standard protocol layouts¶
Tiny Tapeout recommends pin assignments that align with Digilent PMOD types, as in its pinout specification and its GPIO spreadsheet. Each protocol can use the top row ([0:3]) or the bottom row ([4:7]) of a signal group, and the top row is preferred. In each protocol table, PMOD Pin is the connector pin. Top Row and Bottom Row give the signal for each choice, and Function is its role.
SPI (Type 2): bidirectional PMOD¶
Either row can be used: the top row (uio[0:3]) or the bottom row (uio[4:7]), and the top row is preferred.
PMOD Pin |
Top Row |
Bottom Row |
Function |
|---|---|---|---|
1 / 7 |
uio[0] |
uio[4] |
CS (Chip Select) |
2 / 8 |
uio[1] |
uio[5] |
MOSI (Master Out) |
3 / 9 |
uio[2] |
uio[6] |
MISO (Master In) |
4 / 10 |
uio[3] |
uio[7] |
SCK (Serial Clock) |
5 / 11 |
GND |
GND |
Ground |
6 / 12 |
VCC |
VCC |
Power (3.3V) |
SPI alternate: across PMODs (frees bidir for other use)¶
When the bidir PMOD is needed for something else, SPI can span the input and output PMODs, with the ASIC as SPI master. TT Signal is the signal and Direction is its direction at the chip.
Function |
TT Signal |
Direction |
|---|---|---|
CS |
uo_out[4] |
Output |
MOSI |
uo_out[3] |
Output |
MISO |
ui_in[2] |
Input |
SCK |
uo_out[5] |
Output |
QSPI flash and PSRAM: bidirectional PMOD (full)¶
Quad SPI on both rows with multiple chip selects. Compatible with the QSPI PMOD (16 MB Flash + 16 MB RAM) and Digilent PmodSF3.
PMOD Pin |
TT Signal |
Function |
|---|---|---|
1 (IO1) |
uio[0] |
CS0 (Flash) |
2 (IO2) |
uio[1] |
SD0 / MOSI |
3 (IO3) |
uio[2] |
SD1 / MISO |
4 (IO4) |
uio[3] |
SCK |
5 |
— |
GND |
6 |
— |
VCC (3.3V) |
7 (IO5) |
uio[4] |
SD2 |
8 (IO6) |
uio[5] |
SD3 |
9 (IO7) |
uio[6] |
CS1 (RAM A) |
10 (IO8) |
uio[7] |
CS2 (RAM B) |
11 |
— |
GND |
12 |
— |
VCC (3.3V) |
UART (Type 4): bidirectional PMOD¶
Either row can be used: the top row (uio[0:3]) or the bottom row (uio[4:7]), and the top row is preferred.
PMOD Pin |
Top Row |
Bottom Row |
Function |
|---|---|---|---|
1 / 7 |
uio[0] |
uio[4] |
CTS (optional) |
2 / 8 |
uio[1] |
uio[5] |
TXD (Transmit) |
3 / 9 |
uio[2] |
uio[6] |
RXD (Receive) |
4 / 10 |
uio[3] |
uio[7] |
RTS (optional) |
5 / 11 |
GND |
GND |
Ground |
6 / 12 |
VCC |
VCC |
Power (3.3V) |
UART via RP2040/RP2350 (built-in USB bridge, no PMOD needed)¶
Two options for UART-to-USB through the on-board microcontroller. RX is the signal into the chip and TX is the signal out of it.
Variant |
RX (to chip) |
TX (from chip) |
|---|---|---|
UART0 |
ui_in[3] |
uo_out[4] |
UART1 |
ui_in[7] |
uo_out[0] |
I2C: bidirectional PMOD¶
Either row can be used: the top row (uio[0:3]) or the bottom row (uio[4:7]), and the top row is preferred.
PMOD Pin |
Top Row |
Bottom Row |
Function |
|---|---|---|---|
1 / 7 |
uio[0] |
uio[4] |
INT (optional) |
2 / 8 |
uio[1] |
uio[5] |
RESET (optional) |
3 / 9 |
uio[2] |
uio[6] |
SCL (Serial Clock) |
4 / 10 |
uio[3] |
uio[7] |
SDA (Serial Data) |
5 / 11 |
GND |
GND |
Ground |
6 / 12 |
VCC |
VCC |
Power (3.3V) |
Standard peripheral layouts¶
VGA output (Tiny VGA): output PMOD¶
2 bits per colour channel on the output PMOD only, which leaves bidir free.
PMOD Pin |
TT Signal |
Function |
|---|---|---|
1 (IO1) |
uo_out[0] |
R1 |
2 (IO2) |
uo_out[1] |
G1 |
3 (IO3) |
uo_out[2] |
B1 |
4 (IO4) |
uo_out[3] |
vsync |
5 |
— |
GND |
6 |
— |
VCC (3.3V) |
7 (IO5) |
uo_out[4] |
R0 |
8 (IO6) |
uo_out[5] |
G0 |
9 (IO7) |
uo_out[6] |
B0 |
10 (IO8) |
uo_out[7] |
hsync |
11 |
— |
GND |
12 |
— |
VCC (3.3V) |
Board: Tiny VGA
Audio output: output or bidirectional PMOD¶
Mode is mono or stereo, TT Signal is the pin choice for it and Function is its role.
Mode |
TT Signal |
Function |
|---|---|---|
Mono |
uo_out[7] or uio[7] |
Audio output |
Stereo |
uo_out[6] or uio[6] |
Left channel |
uo_out[7] or uio[7] |
Right channel |
Board: TT Audio Pmod — compatible with QSPI PMOD (uses different pins).
Game controller: input PMOD¶
TT Signal is the input and Function is the game controller line it carries.
TT Signal |
Function |
|---|---|
ui_in[4] |
LATCH |
ui_in[5] |
CLOCK |
ui_in[6] |
DATA |
These tables are derived from the Tiny Tapeout specification. The mapping of these signals to HAT ports and Raspberry Pi GPIOs is on the Tiny Tapeout FPGA demo board pin mapping page.
RP2350 GPIO mapping (demo board v3, TT09+)¶
Demo board v3 uses an RP2350B. Each table maps a TT signal to an RP2350 GPIO and lists the I2C, SPI and UART peripheral functions of that GPIO. The control signals are reset on GPIO14 and clock on GPIO16.
Input PMOD (ui_in)¶
TT Signal |
PMOD Pin |
RP2350 GPIO |
I2C |
SPI |
UART |
|---|---|---|---|---|---|
ui_in[0] |
1 |
GPIO17 |
SPI0.cs |
||
ui_in[1] |
2 |
GPIO18 |
SPI0.sck |
||
ui_in[2] |
3 |
GPIO19 |
SPI0.tx |
||
ui_in[3] |
4 |
GPIO20 |
UART1.tx |
||
ui_in[4] |
7 |
GPIO21 |
SPI0.cs |
||
ui_in[5] |
8 |
GPIO22 |
SPI0.sck |
||
ui_in[6] |
9 |
GPIO23 |
SPI0.tx |
UART1.rts |
|
ui_in[7] |
10 |
GPIO24 |
Bidirectional PMOD (uio)¶
TT Signal |
PMOD Pin |
RP2350 GPIO |
I2C |
SPI |
UART |
|---|---|---|---|---|---|
uio[0] |
1 |
GPIO25 |
I2C0.scl |
SPI1.cs |
UART1.rx |
uio[1] |
2 |
GPIO26 |
I2C1.sda |
SPI1.sck |
UART1.cts |
uio[2] |
3 |
GPIO27 |
I2C1.scl |
SPI1.tx |
UART0.rts |
uio[3] |
4 |
GPIO28 |
I2C0.sda |
SPI1.rx |
UART0.tx |
uio[4] |
7 |
GPIO29 |
I2C0.scl |
SPI1.cs |
UART0.rx |
uio[5] |
8 |
GPIO30 |
I2C1.sda |
SPI1.sck |
UART0.cts |
uio[6] |
9 |
GPIO31 |
I2C1.scl |
SPI1.tx |
UART0.rts |
uio[7] |
10 |
GPIO32 |
Output PMOD (uo_out)¶
TT Signal |
PMOD Pin |
RP2350 GPIO |
I2C |
SPI |
UART |
|---|---|---|---|---|---|
uo_out[0] |
1 |
GPIO33 |
UART0.rx |
||
uo_out[1] |
2 |
GPIO34 |
UART0.cts |
||
uo_out[2] |
3 |
GPIO35 |
|||
uo_out[3] |
4 |
GPIO36 |
SPI0.rx |
||
uo_out[4] |
7 |
GPIO37 |
UART1.rx |
||
uo_out[5] |
8 |
GPIO38 |
UART1.cts |
||
uo_out[6] |
9 |
GPIO39 |
|||
uo_out[7] |
10 |
GPIO40 |
SPI0.rx |
RP2040 GPIO mapping (demo board v2, TT06-TT08)¶
Each table maps a TT signal to an RP2040 GPIO and lists the I2C, SPI and UART peripheral functions of that GPIO. The control signals are clock on GPIO0 and reset on GPIO1. TT04 and TT05 had a discrete MUX that shared uo_out[0:3] with the control signals, and TT06 and later boards removed it.
Input PMOD (ui_in)¶
TT Signal |
PMOD Pin |
RP2040 GPIO |
I2C |
SPI |
UART |
|---|---|---|---|---|---|
ui_in[0] |
1 |
GPIO9 |
SPI1.cs |
||
ui_in[1] |
2 |
GPIO10 |
SPI1.sck |
||
ui_in[2] |
3 |
GPIO11 |
SPI1.tx |
||
ui_in[3] |
4 |
GPIO12 |
SPI1.rx |
UART0.tx |
|
ui_in[4] |
7 |
GPIO17 |
SPI0.cs |
||
ui_in[5] |
8 |
GPIO18 |
SPI0.sck |
||
ui_in[6] |
9 |
GPIO19 |
SPI0.tx |
||
ui_in[7] |
10 |
GPIO20 |
SPI0.rx |
UART1.tx |
Bidirectional PMOD (uio)¶
TT Signal |
PMOD Pin |
RP2040 GPIO |
I2C |
SPI |
UART |
|---|---|---|---|---|---|
uio[0] |
1 |
GPIO21 |
I2C0.scl |
UART1.rx |
|
uio[1] |
2 |
GPIO22 |
|||
uio[2] |
3 |
GPIO23 |
|||
uio[3] |
4 |
GPIO24 |
SPI1.rx |
UART1.tx |
|
uio[4] |
7 |
GPIO25 |
SPI1.cs |
UART1.rx |
|
uio[5] |
8 |
GPIO26 |
SPI1.sck |
||
uio[6] |
9 |
GPIO27 |
SPI1.tx |
||
uio[7] |
10 |
GPIO28 |
SPI1.rx |
Output PMOD (uo_out)¶
TT Signal |
PMOD Pin |
RP2040 GPIO |
I2C |
SPI |
UART |
|---|---|---|---|---|---|
uo_out[0] |
1 |
GPIO5 |
|||
uo_out[1] |
2 |
GPIO6 |
|||
uo_out[2] |
3 |
GPIO7 |
SPI0.tx |
||
uo_out[3] |
4 |
GPIO8 |
SPI0.rx |
UART1.tx |
|
uo_out[4] |
7 |
GPIO13 |
SPI1.cs |
||
uo_out[5] |
8 |
GPIO14 |
SPI1.sck |
||
uo_out[6] |
9 |
GPIO15 |
SPI1.tx |
||
uo_out[7] |
10 |
GPIO16 |
SPI1.rx |
UART0.tx |
Community PMOD boards¶
Board is the PMOD board with its repository, Description is what it provides and PMOD Port is the demo board connector it uses.
Board |
Description |
PMOD Port |
|---|---|---|
VGA output, 2-bit/channel |
Output |
|
16 MB Flash + 16 MB RAM |
Bidir |
|
Mono PWM audio, line out + piezo |
Bidir or Output |
|
VGA + 3 buttons |
Input + Output |
|
4 LEDs, 4 buttons, piezo, 7-seg |
Custom |
|
PWM audio filter + USB UART |
Custom |
|
8 MB Flash + 8 MB RAM |
Bidir |
More boards are listed in awesome-tinytapeout-pmods.
Design guidelines¶
These are recommendations, not requirements.
Common pinouts: use them where possible, because shared pinouts make it easier to swap peripheral boards between designs.
Top row: for protocols that use one row (SPI, UART, I2C), use pins 1-4 (signals [0:3]).
Bidir for protocols: the bidir PMOD is the natural choice for bidirectional protocols.
3.3V I/O: all signals use 3.3V logic levels.
Proposals: a protocol not listed here is proposed on the Tiny Tapeout Discord.
References¶
Tiny Tapeout pinout recommendations: the pin layouts this page follows.
Tiny Tapeout PCB specifications: the demo board’s connectors.
Tiny Tapeout demo PCB repository: the demo board’s hardware.
Tiny Tapeout KiCad PMOD library: footprints for PMOD boards.