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

ui_in[7:0]

Input to chip

User inputs (from peripherals)

uo_out[7:0]

Output from chip

User outputs (to peripherals)

uio[7:0]

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

Tiny VGA

VGA output, 2-bit/channel

Output

QSPI PMOD

16 MB Flash + 16 MB RAM

Bidir

TT Audio

Mono PWM audio, line out + piezo

Bidir or Output

VGA Clock

VGA + 3 buttons

Input + Output

Simon Says

4 LEDs, 4 buttons, piezo, 7-seg

Custom

ChipTune PWM

PWM audio filter + USB UART

Custom

KianV QSPI

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