Skip to the content
PCBKitNew board
4 layers80 × 60 mmLx32-fpga, the printed circuit board in 3D

A from-scratch computing platform: custom processor, LLVM compiler backend and custom hardware.

Size
80 × 60 mm
Copper layers
4
Thickness
1.6 mm
Parts
49
Nets
94
Pads
287
Tracks, vias
1,233, 216
Pours
4
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
6 Feb 2026
Updated
24 Oct 2026

Overview

Lx32-fpga is an open-source printed circuit board by looprotate, from the looprotate/lx32 repository on GitHub. It is a 4-layer board of 80 × 60 mm with 49 parts on 94 nets, routed with 1,233 tracks and 216 vias.

It is built around the ICE40HX4K-TQ144, CH340C and W25Q32JVSSIQ, with the AP2112K-3.3 among its other parts. Its parts include 17 capacitors, 7 resistors, 6 ICs, 2 diodes and 2 connectors. It belongs with the fPGA and programmable logic boards and the FPGA and CPLD boards of this library.

Main components

4

README

README.md

lx32

I built a computer from scratch because ChatGPT told me "no hay huevos." So here we are.

Custom processor, custom PCB, custom compiler. The whole thing.


ok first let me flex

looser

Zero violations. Zero unconnected items. I cried a little.

(also this is the 5th time I rewrote this README. if it still looks AI-generated I give up)


what is this actually

lx32 is a 32-bit CPU with a custom instruction set, running on a custom PCB, compiled by a custom LLVM backend. You can write C, compile it, and it runs on simulation (for now).

I wanted to actually understand how computers work, not just read about it. So I built one.

The board is 80x60mm, about the size of a credit card. Black soldermask, gold finish.


the board

Here's what it looks like:

first look

The schematics:

schematics

Measurements:

Long: pcb long

Width: pcb width

Full view: Full picture pcb

The main chip is a Lattice iCE40HX4K FPGA — that's what becomes the processor. I chose it because the toolchain is fully open source (Yosys, nextpnr, icepack).

The rest of the board is USB-C for power and programming, SPI flash so the bitstream loads on power-up, two LDOs for the separate 3.3V and 1.2V rails, a USB-UART bridge to talk to it from my laptop, 32KB of external SRAM, and a VGA header. There's also an OLED that shows register values and the current instruction live, which is the coolest part honestly.

3D render, front: front of pcb

3D render, back: back of pcb

.STEP file if you want it: lx32-fpga.step


the processor

32 registers, fixed 32-bit instruction width, single-cycle. I made up the instruction encoding: ADD, SUB, AND, OR, XOR, shifts, loads, stores, branches, jumps, LUI, AUIPC. x0 is hardwired to zero. Everything is in rtl/ and every module has a spec in docs/rtl/.


how I know it works

I wrote a Rust model of the processor, then a fuzzer that fires random instruction sequences through both Verilator and the model at the same time and compares cycle by cycle.

moduletest vectorsresult
ALU100,000,000passed
Branch Unit100,000,000passed
Control Unit100,000,000passed
Register File100,000,000passed
Full System100,000,000passed
Total1,100,000,000+zero failures

Runs in under 75 seconds. I also tortured my laptop with a Python script to run it on loop. There are Coq proofs for some properties and formal verification through sby too.


the compiler

LLVM backend for lx32 — instruction patterns, register file, calling convention. Eight programs compile and run end-to-end: return, pointer store, call chain, branch/loop, compare/assign, pointer walk, iterative fibonacci, recursive fibonacci.

Write C, compile with LLVM, runs on this board.


the gold art

ENIG means the exposed copper comes out gold on black soldermask. I put personal stuff on both sides.

The back has an infinity symbol, pototo ralora arerita, "All we need is love", Lizzie <3, 22/03/09, and 67 (that last one I didn't choose, it just ended up there).

It's a working computer and it also has my whole heart on it.


run it yourself

bash
git clone https://github.com/looprotate/lx32.git
cd lx32
make setup

You'll need: verilator, Rust (cargo), coqc, sby, yosys, z3, g++.

bash
make sim TB=lx32_system_tb    # full system sim
make validate                  # full test suite (1.1B vectors)
make formal-all                # formal proofs

BOM

Full BOM: lx32-bom.csv

PartQtyTotal
Custom LX32 PCB (JLCPCB, 4-layer, ENIG, black mask)5$15.00
Lattice iCE40HX4K-TQ1442$19.00
CH340C USB-UART (SOP-16)2$0.90
W25Q32JVSSIQ SPI Flash 32Mb2$1.10
AP2112K-3.3TRG1 LDO 3.3V2$0.60
AP2112K-1.2TRG1 LDO 1.2V2$0.60
25MHz Crystal SMD 32252$0.70
USB-C connector SMD2$0.80
Microchip 23K256 SPI SRAM (SOIC-8)2$1.20
VGA 2x5 header + 68Ω resistors--$0.76
Passives (caps, resistors, LEDs)--$0.58
2.54mm pin headers1$0.80
M3 standoffs + screws12$1.00
0.96" OLED display1$14.22
Jumper wires + breadboard1$9.89
Shipping JLCPCB to Uruguay--$22.00
Shipping Tiendamia--$38.00
Total$127.15

MIT

Parts

49
QtyValueFootprintReferences
12100nFC_0402_1005MetricC1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
410uFC_0805_2012MetricC13, C14, C15, C16
4MH_M3MH1, MH2, MH3, MH4
368RR5, R6, R7
3FiducialFID1, FID2, FID3
2100RR_0402_1005MetricR3, R4
25.1kR_0402_1005MetricR1, R2
2LEDLED_0805_2012MetricD1, D2
1100nFC21
123K256U6
1AP2112K-1.2SOT-23-5U5
1AP2112K-3.3SOT-23-5U2
1CH340CSOIC-16_3.9x9.9mm_P1.27mmU4
1CLK25TP7
1CrystalCrystal_SMD_3225-4PinY1
1GNDTP3
1ICE40HX4K-TQ144TQFP-144_20x20mm_P0.5mmU1
1USB_C_Receptacle_USB2.0_14PUSB_C_ReceptacleJ1
1USB_DMTP6
1USB_DPTP5
1VBUSTP4
1VCC_1V2TP2
1VCC_3V3TP1
1VGA_HDRJ2
1W25Q32JVSSSOIC-8_5.3x5.3mm_P1.27mmU3

Questions

How big is the Lx32-fpga PCB?

It measures 80 × 60 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Lx32-fpga use?

49 parts, built around the ICE40HX4K-TQ144, CH340C, W25Q32JVSSIQ and AP2112K-3.3. 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 Lx32-fpga KiCad files?

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

Can I use the Lx32-fpga design in my own project?

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

Similar boards

  • 4 layers120 × 88 mmDual adc, the printed circuit board in 3D

    Dual adc

    devbisme/ai-circuit-design-tests

    Tests of KiCad-related AI tools.

    163 parts10
  • 4 layers165 × 125 mmVideoConv V1, the printed circuit board in 3D

    VideoConv V1

    zOnlyKroks/pcb-consortium

    236 partsCC0-1.0
  • 4 layers100 × 100 mmGammaSpectrometer, the printed circuit board in 3D

    GammaSpectrometer

    RobertGawron/GammaSpectrometer

    Device for quantitative analyze energy spectra of gamma-ray sources. Allows to study what radioactive isotopes in what quantities are present in measured sample.

    326 parts16MIT
  • 4 layers110 × 100 mmFidget, the printed circuit board in 3D

    Fidget

    transistorfet/fidget

    An FPGA board that can interface to the Computie expansion bus using an iCE40HX1K

    99 parts4GPL-3.0
  • 2 layers81.7 × 63.6 mmRiscduino Debug Rev1.4, the printed circuit board in 3D

    Riscduino Debug Rev1.4

    dineshannayya/riscduino_board

    Riscduino PCB Board documentation

    97 parts2
  • 2 layers70.6 × 53.7 mmRiscduino Uno, the printed circuit board in 3D

    Riscduino Uno

    dineshannayya/riscduino_bringup

    Host all the MPW Bring-up related Enviornment

    95 parts2Apache-2.0
  • 2 layers86 × 50 mmCYD NMEA, the printed circuit board in 3D

    CYD NMEA

    Mate8/NMEA-Tester

    Nmea0183 Sniffer basen on CYD PCB

    76 parts2
  • 2 layers45.1 × 45.1 mmSuperPower uC KiCad, the printed circuit board in 3D

    SuperPower uC KiCad

    SuperPower/esp32_shield

    All hardware designs and products you can find in this repository is licensed under CERN Open Hardware Licence Version 2 - Weakly Reciprocal

    33 parts