

8-bit cpu
An 8-bit CPU running on a TangNano 9k FPGA. Written in SystemVerilog and tested with PYUVM.
- Size
- 122 × 81 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 20
- Nets
- 52
- Pads
- 185
- Tracks, vias
- 165, 0
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 2 Jul 2025
- Updated
- 9 Dec 2025
Overview
8-bit cpu is an open-source printed circuit board by Robert-Riordan-UCD, from the Robert-Riordan-UCD/8_Bit_CPU_FPGA repository on GitHub. It is a 2-layer board of 122 × 81 mm with 20 parts on 52 nets, routed with 165 tracks and 0 vias.
Its parts include 8 switches, 4 resistors, 2 ICs and 2 connectors. It belongs with the fPGA and programmable logic and retro computing and games boards and the FPGA and CPLD boards of this library.
README
README.md8 Bit FPGA CPU
This is an 8-bit CPU design running on a Tang Nano 9k FPGA. The CPU design is based on Ben Eaters Breadboard CPU, which is based on the Simple As Possible Computer.
The CPU is made of 11 modules, which are designed in SystemVerilog and verified using pyuvm.
This is a gif of the CPU calculating the fibonacci sequence and displaying it (in hexadecimal).

Getting Started
This project is not fully complete yet and is currently only tested on my personal laptop and raspberry pi. However, this is the current process. (I am developing on Ubuntu 24 and used this guide to get up and running using an open source toolchain)
Installation and Setup
The following programs are required:
yosysfor synthisis.nextpnrfor place and route, and bitstream generation.openFPGALoaderfor loading the bitstream.
sudo apt insatll yosys nextpnr-gowin openfpgaloader
Clone and navigate to the repository
git clone https://github.com/Robert-Riordan-UCD/8_Bit_CPU_FPGA
cd ./8_Bit_CPU_FPGA/Running
make all upload
Testing
pyuvm is required for testing.
sudo apt install pyuvm
To test each module navigate to the verif directory for that module and run make.
cd ./verif/<module>/
makeCurrent Design Status
| Module | RTL | Verified | Runs on FPGA |
|---|---|---|---|
| Clock | ✅ | ✅ | ✅ |
| Program Counter | ✅ | ✅ | ✅ |
| A register | ✅ | ✅ | ✅ |
| B Register | ✅ | ✅ | ✅ |
| Memory Address Register | ✅ | ✅ | ✅ |
| Instruction Register | ✅ | ✅ | ✅ |
| Random Access Memory | ✅ | ✅ | ✅ |
| Arithmetic Logic Unit | ✅ | ✅ | ✅ |
| Control | ✅ | ✅ | ✅ |
| Output | ✅ | ✅ | ✅ |
| Bus | ✅ | ✅ | ✅ |
| Bootloader | ✅ | ✅ | ✅ |
| Top | ✅ | ❌ | ✅ |
The output is currently in hexadecimal, because there was not enough LUTs on the Tang Nano 9k to implement a naive approach to decimal conversion using division. I will hopefully update this to a better approach soon.
Parts
20| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 1k | Resistor_THT:R_Axial_DIN0309_L9.0mm_D3.2mm_P12.70mm_Horizontal | R1, R2, R3, R4 |
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 2 | Conn_01x24_Socket | Connector_PinHeader_2.54mm:PinHeader_1x24_P2.54mm_Vertical | J1, J2 |
| 2 | ~ | footprints:4xDoubleThrowSwitch | SW7, SW8 |
| 1 | BOOTLOAD EN | footprints:DoubleThrowSwitch | SW3 |
| 1 | CA56-12EWA | Display_7Segment:CA56-12EWA | U2 |
| 1 | CLK MODE | footprints:DoubleThrowSwitch | SW1 |
| 1 | CLK PULSE | footprints:tactile_switch | SW2 |
| 1 | RAM MODE | footprints:DoubleThrowSwitch | SW4 |
| 1 | RAM PULSE | footprints:tactile_switch | SW5 |
| 1 | Tang Nano | footprints:TangNano | U1 |
| 1 | ~ | footprints:8xDoubleThrowSwitch | SW6 |
Similar boards
- 2 layers66.9 × 74.5 mm

- 2 layers86.4 × 64.8 mm

- 2 layers36.2 × 26.8 mm

Esp32 minimal
atopile/atopile
Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️
20 parts4kMIT - 2 layers108.1 × 393.8 mm

Sweep compact ble
davidphilipbarr/Sweep
Sweep - a small promicro based keyboard inspired by the Ferris.
20 parts2.1k - 2 layers26 × 15.9 mm

TPS54340 Buck Regulator
rusefi/rusefi
rusefi - GPL internal combustion engine control unit
20 parts1.2k - 2 layers67.6 × 30.5 mm

Rgb to hdmi
hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI
20 parts1kGPL-3.0 - 2 layers44.3 × 28.7 mm

Lin bus adapter esp32
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
20 parts915 - 2 layers89.5 × 61.6 mm

FreeDeck TH 2020-02
FreeYourStream/freedeck-hardware
all the stuff you need to build your own FreeDeck
20 parts772
Questions
How big is the 8-bit cpu PCB?
It measures 122 × 81 mm and has 2 copper layers, 1.6 mm thick.
What parts does the 8-bit cpu use?
20 parts. 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 8-bit cpu KiCad files?
From the Robert-Riordan-UCD/8_Bit_CPU_FPGA repository on GitHub, at the commit this page was made from: the board is pcb/8-bit-cpu.kicad_pcb and its schematic pcb/8-bit-cpu.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the 8-bit cpu design in my own project?
Its repository states no licence, so its author keeps all rights: ask Robert-Riordan-UCD before reusing the design.