Skip to the content
6 layers146.1 × 58.4 mmComp Board, the printed circuit board in 3D

An open-source handheld game console built around a Lattice ECP5 FPGA that uses a custom hybrid 2D + 3D graphics engine capable of DS-era 2D-and-3D gameplay at a locked 60 fps. Most open-source consoles are 2D-only or software-render 3D at sub-60 fps. The goal is a powerful yet accessible, fully hackable platform for the retro-hardware community.

Size
146.1 × 58.4 mm
Copper layers
6
Thickness
1.6 mm
Parts
248
Nets
411
Pads
1,372
Tracks, vias
4,860, 575
Pours
12
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
28 Jul 2026
Updated
19 Aug 2026

Overview

Comp Board is an open-source printed circuit board by badaboombox, from the badaboombox/SS-Handheld-Console repository on GitHub. It is a 6-layer board of 146.1 × 58.4 mm with 248 parts on 411 nets, routed with 4,860 tracks and 575 vias.

It is built around the MCP73871EV, TPS61165DBV and TPS63001DRC, with the W25Q32JVSSIQ, DW01A and AO3401A among its other parts. Its parts include 126 capacitors, 56 resistors, 15 ICs, 15 switches and 6 connectors. It belongs with the fPGA and programmable logic and retro computing and games boards and the STM32 and FPGA and CPLD boards of this library.

Main components

9

README

README.md

SS Handheld Console

An open-source handheld game console built around an FPGA graphics engine. It runs DS-era style 2D and 3D games at a steady 60 fps.

SS stands for Single Screen: a single-screen take on the dual-screen handheld era.

Most open-source consoles are 2D only, or run 3D in software that can't hold a frame rate. This one does perspective-correct textured 3D and a GBA-class 2D tile/sprite engine together on one FPGA, composited to a 480x272 panel at 60 Hz. The whole bitstream builds with an open toolchain (Yosys, nextpnr, Project Trellis), so no proprietary EDA is needed.

Textured, lit, fogged 3D from RTL sim 2048-triangle stress scene at about 100 fps

Full SoC 3D render Layered 2D with compositor

These frames come straight out of the Verilog RTL in simulation. There are more in sim/proof-of-concept/.

What it is

Two chips split the work.

The Lattice ECP5 (LFE5U-85F) runs the graphics engine: a 2D tile and sprite PPU (text and affine backgrounds, sprites, a scanline compositor), a perspective-correct textured 3D rasterizer, a 32-bit SDRAM subsystem, and RGB panel scanout. All of it is custom Verilog.

The STM32H723 runs game logic, audio, input, and 3D geometry, streaming screen-space work to the FPGA over a parallel bus.

The 3D core is built on RasterIX (see Credits) and extended into a gaming-oriented hybrid GPU that sits next to the 2D engine and compositor.

RTL Status

Everything below is sim and synth validated:

  • Fits the LFE5U-85F (caBGA-381) with room to spare: about 34% logic, 72% block RAM, 80% DSP.
  • The GPU domain runs at 73.5 MHz against a 66.67 target, and the SDRAM domain at 174 MHz against a 133 target. The build is pinned to a deterministic place-and-route seed.
  • The full pipeline is pixel-exact in simulation. The frames above are direct Verilator renders, including a 2048-triangle stress scene at roughly 100 fps.

Repository layout

PathContents
rtl/All the Verilog: 2D PPU, 3D integration, SDRAM controller and clock crossing, FMC bridge, scanout, clocking, board top.
hardware/KiCad project for the 6-layer board: ECP5, STM32H723, SDRAM, panel, power, audio, controls.
build/Bitstream build notes and the reproduce recipe.
sim/Verilator testbenches for every RTL block plus a headless 3D harness. Rendered frames are in sim/proof-of-concept/.

Building the bitstream

No vendor tools:

sh
yosys <synth script>            # produces gpuchip_ecp5.json
nextpnr-ecp5 --85k --package CABGA381 --speed 8 \
  --json gpuchip_ecp5.json --lpf rtl/gpu_chip.lpf --seed 4 \
  --textcfg gpuchip.config
ecppack gpuchip.config gpuchip.bit

The RTL depends on the RasterIX 3D core (submodule linked). Clone with submodules to include it:

sh
git clone --recursive <repo-url>
# or, in an existing clone:
git submodule update --init --recursive

The full build and flashing steps are in build/README.md.

Hardware

3D render of the SS Handheld Console mainboard

A 6-layer board in KiCad: the ECP5-85 FPGA and STM32H723 MCU, 32-bit SDRAM, a 4.3 inch 480x272 RGB panel with a boost-driven backlight, microSD, USB-C charging, stereo audio, and tactile controls. Schematics, layout, and 3D renders are under hardware/.

Status

v0.1 is done and two boards are being made, firmware's likely the next step.

Everything in the repo reflects the design as sent for manufacture. All RTL validated, waiting on physical boards.

Credits

The 3D rasterizer is built on RasterIX by ToNi3141, an open-source fixed-function OpenGL-ES rasterizer (GPL-3.0). This project extends it into a hybrid 2D and 3D console GPU. Big thanks to that work.

License

The repository is dual-licensed by directory:

  • rtl/ is GPL-3.0-or-later. The gateware is a derivative of RasterIX (GPL-3.0), so it carries the same copyleft terms.
  • hardware/ is CERN-OHL-P-2.0, a permissive open-hardware license. The board is an independent work.

See LICENSING.md for the breakdown and the per-file SPDX tags.

Parts

248
QtyValueFootprintReferences
75100nFCapacitor_SMD:C_0402_1005MetricC10, C11, C12, C100, C105, C108, C110, C113, C114, C115, C116, C117, C118, C121, C122, C123 +59
2310uFCapacitor_SMD:C_0805_2012MetricC1, C3, C4, C5, C19, C24, C27, C44, C51, C103, C107, C111, C112, C119, C120, C130 +7
1210kResistor_SMD:R_0402_1005MetricR16, R19, R20, R21, R22, R33, R34, R35, R36, R42, R43, R57
10100nFCapacitor_SMD:C_0201_0603MetricC85, C89, C93, C94, C96, C98, C101, C104, C106, C109
822Resistor_SMD:R_0402_1005MetricR23, R24, R25, R26, R27, R28, R44, R56
7TestPointTestPoint:TestPoint_Pad_1.5x1.5mmTP1, TP3, TP4, TP5, TP7, TP8, TP9
622uFCapacitor_SMD:C_0805_2012MetricC25, C26, C46, C87, C91, C95
647kResistor_SMD:R_0402_1005MetricR10, R45, R46, R47, R48, R49
5100kResistor_SMD:R_0402_1005MetricR11, R12, R13, R15, R53
44.7kResistor_SMD:R_0402_1005MetricR30, R31, R32, R40
4TestPointTestPoint:TestPoint_THTPad_1.5x1.5mm_Drill0.7mmTP10, TP11, TP12, TP13
31kResistor_SMD:R_0402_1005MetricR4, R9, R41
31uFCapacitor_SMD:C_0603_1608MetricC21, C28, C48
32.2uFCapacitor_SMD:C_0603_1608MetricC29, C49, C50
333Resistor_SMD:R_0402_1005MetricR29, R38, R55
3470Resistor_SMD:R_0402_1005MetricR5, R6, R7
3LEDLED_SMD:LED_0603_1608MetricD2, D3, D4
20Resistor_SMD:R_1206_3216MetricR50, R51
22kResistor_SMD:R_0402_1005MetricR3, R8
249.9Resistor_SMD:R_0402_1005MetricR17, R18
25.1kResistor_SMD:R_0402_1005MetricR1, R2
2AS4C4M16SAPackage_SO:TSOP-II-54_22.2x10.16mm_P0.8mmU3, U4
2Conn_ST_STDC14Connector_PinHeader_1.27mm:PinHeader_2x07_P1.27mm_VerticalJ5, J6
2MAX98357APackage_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mmU8, U17
2Speaker 4-8 ohmConnector_TE-Connectivity:TE_440054-2_1x02_P2.00mm_VerticalLS1, LS2
10.47uFCapacitor_SMD:C_0402_1005MetricC22
10.5mm FPC ConnConnector_FFC-FPC:Hirose_FH12-40S-0.5SH_1x40-1MP_P0.50mm_HorizontalJ4
11.5uHInductor_SMD:L_1008_2520MetricL1
110Resistor_SMD:R_0402_1005MetricR37
110k LinearPotentiometer_THT:Potentiometer_Bourns_3266Y_VerticalRV1
110nFCapacitor_SMD:C_0402_1005MetricC73
110uHInductor_SMD:L_Abracon_ASPI-4030SL3
1120@100MHzInductor_SMD:L_0805_2012MetricFB2
1120kResistor_SMD:R_0402_1005MetricR14
11S LiPoConnector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ3
11uFCapacitor_SMD:C_1206_3216MetricC127
12.2uHInductor_SMD:L_1008_2520MetricL2
1220kResistor_SMD:R_0402_1005MetricR54
1220nFCapacitor_SMD:C_0402_1005MetricC128
1240kResistor_SMD:R_0402_1005MetricR39
12N7002Package_TO_SOT_SMD:SOT-23Q3
14.7uFCapacitor_SMD:C_0603_1608MetricC30
147nFCapacitor_SMD:C_0402_1005MetricC23
1600@100MHzInductor_SMD:L_0805_2012MetricFB1
1AButton_Switch_SMD:SW_SPST_EVQP2_ShortPushTravel_H2.5mmSW7
1AO3401APackage_TO_SOT_SMD:SOT-23Q2
1AP2112K-2.5Package_TO_SOT_SMD:SOT-23-5U13
1APS6404L-3SQRx-SNPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU16
1BButton_Switch_SMD:SW_SPST_EVQP2_ShortPushTravel_H2.5mmSW8
1DW01APackage_TO_SOT_SMD:SOT-23-6U10
1D_DOWNButton_Switch_SMD:SW_SPST_EVQP2_ShortPushTravel_H2.5mmSW2
1D_LEFTButton_Switch_SMD:SW_SPST_EVQP2_ShortPushTravel_H2.5mmSW3
1D_RIGHTButton_Switch_SMD:SW_SPST_EVQP2_ShortPushTravel_H2.5mmSW4
1D_UPButton_Switch_SMD:SW_SPST_EVQP2_ShortPushTravel_H2.5mmSW1
1FORCE_RECONButton_Switch_SMD:SW_Push_SPST_NO_Alps_SKRKSW14
1FS8205Package_TO_SOT_SMD:SOT-23-6Q1
1LButton_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx39-2LFSSW5
1LFE5U-85F-8BG381xPackage_BGA:Lattice_caBGA-381_17x17mm_Layout20x20_P0.8mmU1
1LOGOsonic-rush-handheld:logoG***
1LTC2954CTS8-1-TRPBFPackage_TO_SOT_SMD:TSOT-23-8U15
1MAINButton_Switch_SMD:SW_SPST_SKQG_WithStemSW13
1MCP73871Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mmU11
1Micro_SD_Card_Det1Connector_Card:microSD_HC_Hirose_DM3D-SFJ1
1NTC 10kResistor_SMD:R_0603_1608MetricTH1
1RButton_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx39-2LFSSW6
1SELButton_Switch_THT:SW_TH_Tactile_Omron_B3F-100xSW12
1SMAJ5.0ADiode_SMD:D_SMAD1
1SS16Diode_SMD:D_SMAD5
1STARTButton_Switch_THT:SW_TH_Tactile_Omron_B3F-100xSW11
1STM32H723ZGTxPackage_QFP:LQFP-144_20x20mm_P0.5mmU2
1SW_PushButton_Switch_SMD:SW_Push_SPST_NO_Alps_SKRKSW15
1SiT8008xx-7x-xxEOscillator:Oscillator_SMD_SiT_PQFN-4Pin_2.0x1.6mmY1
1TLV62569DDCPackage_TO_SOT_SMD:SOT-23-6U12
1TPS61165DBVPackage_TO_SOT_SMD:SOT-23-6U14
1TPS63001Package_SON:Texas_DRC0010J_ThermalViasU7
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_G-Switch_GT-USB-7010ASVJ2
1W25Q32JVSSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU6
1XButton_Switch_SMD:SW_SPST_EVQP2_ShortPushTravel_H2.5mmSW9
1YButton_Switch_SMD:SW_SPST_EVQP2_ShortPushTravel_H2.5mmSW10

Similar boards

  • 2 layers30 × 40 mmKK power module, the printed circuit board in 3D

    KK power module

    lionsarmor/KeychainKreatures_PCB

    32 parts
  • 2 layers71.9 × 37.9 mmMicrobot, the printed circuit board in 3D

    Microbot

    Rishabh416/microbot

    My first fully custom project inspired by the microbots from the movie Big Hero 6. My goal is to get into swarm robotics and I believe this is a HUGE leap in that direction, but a good moment to learn.

    59 parts
  • 2 layers98 × 56 mmThermal pcb, the printed circuit board in 3D

    Thermal pcb

    Badbird5907/thermal-camera

    My design of a cheap and affordable thermal camera

    68 parts59MIT
  • 2 layers57 × 43 mmRbcrash, the printed circuit board in 3D

    Rbcrash

    onitake/rbcrash

    Remote controlled high power RGB LED lamp

    42 parts
  • 4 layers120 × 60 mmController, the printed circuit board in 3D

    Controller

    DavidLafleur17/projet_etudiant_manette_kicad

    89 parts
  • 2 layers230 × 85 mmLe chiff ble hotswap, the printed circuit board in 3D

    Le chiff ble hotswap

    MangoIV/le_chiff_ble

    A drop-in replacement-PCB for the beautiful le_chiffre

    117 parts52GPL-3.0
  • 2 layers51 × 21 mmFOX JACK EXT BOARD TOP, the printed circuit board in 3D

    FOX JACK EXT BOARD TOP

    KaliAssistant/Fox-Jack

    Portable social-engineering LAN tool for automated payloads and wired audits — based on Luckfox Pico Max

    35 parts22GPL-3.0
  • 2 layers196.1 × 87.8 mmUnispliff, the printed circuit board in 3D

    Unispliff

    weteor/Unispliff

    34 key col stagger keyboard w/ encoder.

    99 parts3CERN-OHL-P-2.0

Questions

How big is the Comp Board PCB?

It measures 146.1 × 58.4 mm and has 6 copper layers, 1.6 mm thick.

What parts does the Comp Board use?

248 parts, built around the MCP73871EV, TPS61165DBV, TPS63001DRC and W25Q32JVSSIQ. 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 Comp Board KiCad files?

From the badaboombox/SS-Handheld-Console repository on GitHub, at the commit this page was made from: the board is hardware/Comp Board/Comp Board.kicad_pcb and its schematic hardware/Comp Board/Audio.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Comp Board design in my own project?

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