

Lx32-fpga
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
4ICE40HX4K-TQ144
TQFP-144(20x20)-40℃~+100℃ 1.14V~1.26V 107 3520 440 81920bit iCE40 HX TQFP-144(20x20) Programmable Logic Device (CPLDs/FPGAs) ROHSLatticeProgrammable Logic Device (CPLDs/FPGAs)CH340C
SOP-16-20℃~+70℃ 2Mbps 3.3V、5V 50uA 7mA Transceiver USB 2.0 SOP-16 USB Converters ROHSWCH (Nanjing Qinheng Microelectronics)USB ConvertersW25Q32JVSSIQ
SOIC-8-208mil-40℃~+85℃ 100,000 cycles 133MHz 1uA 2.7V~3.6V 20 Years 32Mbit 3ms SPI SOIC-8-208mil NOR FLASH ROHSWinbondNOR FLASHAP2112K-3.3
SOT253.3V 600mA CMOS Low Dropout Linear Regulator with EnableDiodes IncorporatedUncategorised
README
README.mdlx32
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

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:

The schematics:

Measurements:
Long:

Width:

Full view:

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:

3D render, back:

.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.
| module | test vectors | result |
|---|---|---|
| ALU | 100,000,000 | passed |
| Branch Unit | 100,000,000 | passed |
| Control Unit | 100,000,000 | passed |
| Register File | 100,000,000 | passed |
| Full System | 100,000,000 | passed |
| Total | 1,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
git clone https://github.com/looprotate/lx32.git
cd lx32
make setupYou'll need: verilator, Rust (cargo), coqc, sby, yosys, z3, g++.
make sim TB=lx32_system_tb # full system sim
make validate # full test suite (1.1B vectors)
make formal-all # formal proofsBOM
Full BOM: lx32-bom.csv
| Part | Qty | Total |
|---|---|---|
| Custom LX32 PCB (JLCPCB, 4-layer, ENIG, black mask) | 5 | $15.00 |
| Lattice iCE40HX4K-TQ144 | 2 | $19.00 |
| CH340C USB-UART (SOP-16) | 2 | $0.90 |
| W25Q32JVSSIQ SPI Flash 32Mb | 2 | $1.10 |
| AP2112K-3.3TRG1 LDO 3.3V | 2 | $0.60 |
| AP2112K-1.2TRG1 LDO 1.2V | 2 | $0.60 |
| 25MHz Crystal SMD 3225 | 2 | $0.70 |
| USB-C connector SMD | 2 | $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 headers | 1 | $0.80 |
| M3 standoffs + screws | 12 | $1.00 |
| 0.96" OLED display | 1 | $14.22 |
| Jumper wires + breadboard | 1 | $9.89 |
| Shipping JLCPCB to Uruguay | -- | $22.00 |
| Shipping Tiendamia | -- | $38.00 |
| Total | $127.15 |
MIT
Parts
49| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 100nF | C_0402_1005Metric | C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 |
| 4 | 10uF | C_0805_2012Metric | C13, C14, C15, C16 |
| 4 | MH_M3 | MH1, MH2, MH3, MH4 | |
| 3 | 68R | R5, R6, R7 | |
| 3 | Fiducial | FID1, FID2, FID3 | |
| 2 | 100R | R_0402_1005Metric | R3, R4 |
| 2 | 5.1k | R_0402_1005Metric | R1, R2 |
| 2 | LED | LED_0805_2012Metric | D1, D2 |
| 1 | 100nF | C21 | |
| 1 | 23K256 | U6 | |
| 1 | AP2112K-1.2 | SOT-23-5 | U5 |
| 1 | AP2112K-3.3 | SOT-23-5 | U2 |
| 1 | CH340C | SOIC-16_3.9x9.9mm_P1.27mm | U4 |
| 1 | CLK25 | TP7 | |
| 1 | Crystal | Crystal_SMD_3225-4Pin | Y1 |
| 1 | GND | TP3 | |
| 1 | ICE40HX4K-TQ144 | TQFP-144_20x20mm_P0.5mm | U1 |
| 1 | USB_C_Receptacle_USB2.0_14P | USB_C_Receptacle | J1 |
| 1 | USB_DM | TP6 | |
| 1 | USB_DP | TP5 | |
| 1 | VBUS | TP4 | |
| 1 | VCC_1V2 | TP2 | |
| 1 | VCC_3V3 | TP1 | |
| 1 | VGA_HDR | J2 | |
| 1 | W25Q32JVSS | SOIC-8_5.3x5.3mm_P1.27mm | U3 |
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 mm

- 4 layers165 × 125 mm

- 4 layers100 × 100 mm

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 mm

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 mm

- 2 layers70.6 × 53.7 mm

Riscduino Uno
dineshannayya/riscduino_bringup
Host all the MPW Bring-up related Enviornment
95 parts2Apache-2.0 - 2 layers86 × 50 mm

- 2 layers45.1 × 45.1 mm

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