Skip to the content
PCBKitNew board
2 layers54.1 × 23.5 mmUart384, the printed circuit board in 3D

USB-based mini-devboard for the Lattice iCE40LP384 FPGA

Size
54.1 × 23.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
52
Nets
54
Pads
223
Tracks, vias
516, 83
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
26 Aug 2025
Updated
29 Mar 2026

Overview

Uart384 is an open-source printed circuit board by dpiegdon, from the dpiegdon/uart384 repository on GitHub. It is a 2-layer board of 54.1 × 23.5 mm with 52 parts on 54 nets, routed with 516 tracks and 83 vias.

It is built around the ICE40LP384-SG32, AT25DF256-SSHN-B and AMS1117-2.5, with the MIC5365-1.2YC5-TR, XC6206P182MR and LL4148 among its other parts. Its parts include 14 capacitors, 10 resistors, 6 ICs, 5 diodes and 4 connectors. It belongs with the microcontroller boards and fPGA and programmable logic boards and the FPGA and CPLD boards of this library.

Main components

7

README

README.md

UART384 - FPGA devboard & USB-stick

PCB-v2.0 Photo Top PCB-v2.0 Photo Side
PCB-v2.0 Rendering PCB-v2.0 Rendering

This is a mini-devboard for the Lattice iCE40LP384, the BEST 🔍 FPGA ever!

Features:

  • USB-stick form-factor
  • USB is connected to Silabs CP2102 USB-to-UART bridge
  • Tiny Lattice iCE40LP384 with connections:
    • 384 LUTs/FFs
    • UART
    • 2 LEDs
    • 1 push-button
    • 8 GPIOs on pinheader
    • 32MHz oscillator
  • small flash for bitstream
  • TC2050 connector (bottom side) for programming the flash

NOTE: device is not programmable via USB

Gateware

"Why?", you ask?

Mostly for fun and training; there are a few gateware options available in this repository:

Entropy generator

gateware/entropy_generator.v

High quality entropy source using metastability from ringoscillators fed into the spongent hash algorithm.

This is one of the original reasons this board was created for: I wanted a USB stick that generates cryptographically sound entropy that can be used to enhance system entropy on linux.

gateware/tools/seedrng.py can be used to receive the entropy and inject it directly into the kernel entropy pool.

SPI and GPIO over UART tunnel

gateware/relay_spi.v

This variant allows complex muxing of SPI lines from an SPI master core to all GPIO1..8 pins, as well as the internal program flash. All these pins can also be muxed as GPIO input or output and controlled/sampled. All that via a simple UART protocol.

This gives full control of inputs and outputs, as well as efficient SPI communication via SPI core, in any configuration. The SPI core is used for SPI transfer by pulling RTS down, then CS is automatically pulled down and data is seemlessly interchanged between SPI and UART.

This e.g. allows reprogramming the internal flash, or external SPI devices, including Lattice iCE40 FPGAs if GPIOs are used to trigger their CRESET. Since CDONE can also be sampled, this also allows programming any iCE40 FPGA in slave mode, fully replacing any other needed programming board to flash/program a Lattice iCE40 FPGA. Note that the FPGA is pretty much full, no further features will be added to this gateware.

See gateware/tools/spi_device.py for general SPI command abstraction, and gateware/tools/flashtool.py and gateware/tools/spi_device.py as an example client to work with the onboard (or any other) serial flash.

Ring oscillator entropy generator

gateware/ring_noise.v

Low quality entropy generator using metastability from ringoscillators fed into a linear feedback shift register.

UART pass-through

gateware/uart_passthrough.v

A simple example that only passes UART signals along to the GPIO header and shows changes on RX/TX lines on the LEDs (with some timeout).

Variable delay ring oscillator

gateware/variable_ringoscillator.v

Experiments with a ringoscillator with a reconfigurable delay-line. Delay can be changed at runtime via UART.

License

The hardware (Schematic, PCB) is licensed under CERN-OHL-W v2. See cern_ohl_w_v2.txt.

The software is licensed under LGPL v2.0, unless specified otherwise in a subrepository. See LGPLv2.0.txt.

Parts

52
QtyValueFootprintReferences
8TestPointTestPoint:TestPoint_Pad_1.0x1.0mmTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8
7100nCapacitor_SMD:C_0603_1608MetricC1, C3, C7, C9, C10, C13, C14
510KResistor_SMD:R_0603_1608MetricR1, R2, R3, R5, R10
51uCapacitor_SMD:C_0603_1608MetricC2, C5, C6, C11, C12
3680Resistor_SMD:R_0603_1608MetricR6, R7, R9
24k7Resistor_SMD:R_0603_1608MetricR4, R8
24u7Capacitor_SMD:C_0603_1608MetricC4, C8
1AMS1117-2.5Package_TO_SOT_SMD:SOT-223-3_TabPin2U4
1AT25DF256-SSHNPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU1
1CP2102-QFN28Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.35x3.35mmU2
1Conn_02x07_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x07_P2.54mm_Vertical_SMDJ4
1ICE40LP384-SG32Package_DFN_QFN:QFN-32-1EP_5x5mm_P0.5mm_EP3.6x3.6mmIC1
1LED1_REDLED_SMD:LED_0603_1608MetricD4
1LED2_GREENLED_SMD:LED_0603_1608MetricD5
1LED_ORANGELED_SMD:LED_0603_1608MetricD2
1LL4148Diode_SMD:D_MiniMELFD3
1MIC5365-1.2YC5Package_TO_SOT_SMD:SOT-353_SC-70-5U3
1PRTR5V0U2XPackage_TO_SOT_SMD:SOT-143D1
1SW_Pushdpiegdon:TS-1224W_Side_Button_2x4x3.3mm_3.5mm_3.8mm_SMD_AliexpressSW1
1TC2050Connector:Tag-Connect_TC2050-IDC-NL_2x05_P1.27mm_VerticalJ2
1TC2050_extConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_Vertical_SMDJ3
1USB_Adpiegdon:CONN-USB-A-PCB-TRACESJ1
1VSEL1Jumper:SolderJumper-3_P1.3mm_Bridged2Bar12_RoundedPad1.0x1.5mmJP1
1VSEL2Jumper:SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mmJP2
1XC6206P182MRPackage_TO_SOT_SMD:SOT-23-3U5
1XO32Oscillator:Oscillator_SMD_EuroQuartz_XO32-4Pin_3.2x2.5mmY1

The 51 most common of 52 parts.

Questions

How big is the Uart384 PCB?

It measures 54.1 × 23.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Uart384 use?

52 parts, built around the ICE40LP384-SG32, AT25DF256-SSHN-B, AMS1117-2.5 and MIC5365-1.2YC5-TR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Uart384 KiCad files?

From the dpiegdon/uart384 repository on GitHub, at the commit this page was made from: the board is pcb/uart384.kicad_pcb and its schematic pcb/uart384.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Uart384 design in my own project?

Its repository states no licence, so its author keeps all rights: ask dpiegdon before reusing the design.

Similar boards

  • 4 layers140 × 100 mmGpsdo, the printed circuit board in 3D

    Gpsdo

    dpiegdon/dpsgo

    David's Pretty Satisfactory Gps-disciplined Oscillator

    161 parts10
  • 4 layers30 × 15 mmICEBATS384, the printed circuit board in 3D

    ICEBATS384

    Shillelagh1/ICEBATS384

    Experimental small ICE40LP384 FPGA Board

    36 partsGPL-3.0
  • 2 layers50 × 50 mmSDP, the printed circuit board in 3D

    SDP

    TheAnnoyingProgrammer/Low-Cost-FPGA-and-Logic-Design-Tool

    29 parts
  • 2 layers50.8 × 20.3 mmPmod logic lp384, the printed circuit board in 3D

    Pmod logic lp384

    Agilack/pmod

    This repository holds multiple PMOD modules projects

    22 parts10
  • 2 layers17.8 × 35.6 mmTinyFPGA B, the printed circuit board in 3D

    TinyFPGA B

    tinyfpga/TinyFPGA-B-Series

    Open source design files for the TinyFPGA B-Series boards.

    36 parts202GPL-3.0
  • 4 layers55 × 50 mmInterface2, the printed circuit board in 3D

    Interface2

    lowobservable/coax

    Connect to IBM 3270 hardware

    68 parts53ISC
  • 2 layers101.6 × 147.3 mmKarabas pro revER, the printed circuit board in 3D

    Karabas pro revER

    andykarpov/karabas-pro

    FPGA based retrocomputer with FDD and HDD controllers

    223 parts37MIT
  • 4 layers43.2 × 43.2 mmPogobot head, the printed circuit board in 3D

    Pogobot head

    nekonaute/pogobot

    Pogobot is an open-source open-hardware robotic platform for swarm robotics

    140 parts21