Skip to the content
PCBKitNew board
4 layers84 × 40 mmCpu, the printed circuit board in 3D

RV4028 - A hackable Risc-V computer

Size
84 × 40 mm
Copper layers
4
Thickness
1.6 mm
Parts
40
Nets
91
Pads
269
Tracks, vias
636, 90
Pours
11
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
24 Oct 2025
Updated
22 Feb 2026

Overview

Cpu is an open-source printed circuit board by MichaelBell, from the MichaelBell/RV4028 repository on GitHub, published under the BSD-3-Clause licence. It is a 4-layer board of 84 × 40 mm with 40 parts on 91 nets, routed with 636 tracks and 90 vias.

It is built around the W25Q80DVSSIG and 1N4148W. Its parts include 19 capacitors, 11 resistors, 3 ICs, 3 diodes and 2 connectors. It belongs with the FPGA and CPLD boards of this library.

Main components

2

README

README.md

RV4028 - A hackable Risc-V computer

RV4028 is intended to be a modular Risc-V computer, similar to the excellent RC2014 Z80 homebrew computer.

The idea is to create a minimal Risc-V system that is easy to understand and extend.

The inspiration for this came from @theJPster's post.

All hardware and software are open source and permissively licensed.

Architecture

The system bus has a 32-bit address and 16-bit data, which fits reasonably well with an RV32 system and readily available (P)SRAM chips, and runs at 3.3V.

Modules are attached by an 80-pin dual row header, similar to RC2014 modules but with 2 rows of pins instead of 1. 2mm pitch headers are used instead of 2.54mm, this makes boards slightly smaller (and cheaper), and also avoids the possibility of boards being plugged into RC2014 by mistake.

However, the pinout is chosen such that RC2014 modules might be compatible, if 3v3 capable components are used and a backplane with additional 2.54mm pitch sockets were created. The pinout is also chosen such that modules not requiring access to the full bus can use just a single row.

Bus connector

Software

The intention is to be able to run standard RV32I programs with a C SDK. A Micropython port and Rust support are likely.

It is currently not a goal to support either real time operating systems (although this may be possible in future), or Linux (which would likely not be possible without moving to a larger FPGA).

Initial modules

CPU

CPU Module render

Keeping things minimal and simple, we use a Bruno Levy's FemtoRV Quark (RV32I) core with some small modifications, and a wrapper to handle breaking each 32-bit data access into 16-bit accesses. This is the most minimal Risc-V instruction set and can fit in a small FPGA, so we use an ICE40 HX1K, which is available in a 100-pin QFP.

A small flash is required for the FPGA configuration, a header will be provided that will allow the FPGA to be held in reset and the flash programmed. Although it is significantly larger than required, using a 1MB W25Q80DV seems cost effective.

Schematic

RAM

RAM Module render

The two candidates here are PSRAM, such as the IS66WVE, or SRAM such as the CY7C1041G30.

The PSRAM is larger but slower, and the larger capacities only seem available in BGA packages. The linked SRAM is available in TSOP, which may allow for easier assembly.

The current RAM module uses the PSRAM.

Schematic

ROM

Something like SST39VF3202C looks suitable, and available at the same access speed as the PSRAM (70ns).

ROM might not be required - we can embed a small amount of ROM (6kB) in the CPU gateware which could be enough for a simple SD card driver, allowing a program to be loaded from SD card to RAM without any ROM.

IO

IO Module render

An RP2350B is used for IO. The board should include:

  • Two UARTs
  • Two I2C broken out to Qw/ST compatible ports
  • A micro SD card socket
  • An SPI with a couple of chip selects (this should be made easy to connect to the CPU for updating the gateware)
  • Some GPIO

8 bits of address should easily be sufficient, and 8 bits of data should also be fine, which allows this to be single row.

I'm tempted to put USB on a couple of the spare backplane pins, so a single USB connection can power the system and be used to communicate with/program the RP2350.

If we also wired clock and reset from the RP2350 then it could provide a clock, meaning a separate clock module would not be required.

Schematic | More details

Clock

As above, a clock module likely won't be required, but it is a nice educational addition, and would allow the machine to be used without the RP2350 based IO module.

A 14.7456MHz crystal would seem appropriate - double the clock rate of the RC2014. Assuming IS66WVE PSRAM is used, the maximum reliable clock rate of the system should be around 17-18MHz (TBC).

An SN74LVC1GX04 could be used to drive the crystal.

Backplane

USB-C socket, with data wired to spare pins for RP2350 on IO board.

AP2112K for 3.3V supply. 3v3 enable is delayed by a few milliseconds to help with power sequencing on the CPU board (the core power to the FPGA should be applied before IO voltage).

Decoupling caps, LED, reset button. Use surface mount headers for the 2x40 pin connectors, allows all the signals to run above a nice unbroken ground plane, rather than having loads of through holes breaking up the ground planes.

Bus timing

Addresses are always 16-bit aligned and a byte mask is used for single byte stores.

All writes complete in a two cycles. Reads normally complete in two cycles, but wait may be asserted to extend the read cycle.

MREQ is intended to be wired to the (P)SRAM CE, so must be pulsed regularly even if reads are continuous in order to avoid exceeding max CE assertion time on PSRAM. This is acheived by pulsing it high in the first half clock of each read cycle. MREQ remains low at the start of a write cycle in order to support a faster clock speed when used with a IS66WVE.

IORQ is not required as the address space is sufficiently large. It is simply set to ~A31.

LO_ADDR indicates if the address is in the bottom 16MB of the address space, to reduce the amount of address checking logic required on low addressed modules.

Read timing diagram

Write timing diagram

Full store instruction

Full load instruction

Expected RAM implementation

RAM access is controlled by CE, OE, WE and byte selects.

  • Address high bits are compared for the chip, CE is never asserted if the address doesn't match
  • CE is MREQ
  • WE is WR
  • OE is RD
  • Byte selects are MSK.

Writes are latched by deasserting WE and CE. So a full store instruction that read the instruction and wrote data back to the same RAM chip would look like:

Full store instruction to RAM

Parts

40
QtyValueFootprintReferences
13100nFCapacitor_SMD:C_0402_1005MetricC7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
910kResistor_SMD:R_0402_1005MetricR1, R2, R4, R5, R6, R8, R9, R10, R11
31uFCapacitor_SMD:C_0603_1608MetricC1, C3, C4
34.7uFCapacitor_SMD:C_0603_1608MetricC2, C5, C6
22.2kResistor_SMD:R_0402_1005MetricR3, R7
2LEDLED_SMD:LED_0603_1608MetricD2, D3
2TestTestPoint:TestPoint_Pad_1.5x1.5mmTP1, TP3
11N4148WDiode_SMD:D_SOD-123FD1
1AP2112K-1.2Package_TO_SOT_SMD:SOT-23-5U3
1Conn_01x08RV4028:PinHeader_1x08_P2.54mm_VerticalJ2
1ICE40HX1K-VQ100_RV4028RV4028:QFP50P1600X1600X120-100NU1
1W25Q80DVSSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU2
1~RV4028:Module_2mmJ1

Questions

How big is the Cpu PCB?

It measures 84 × 40 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Cpu use?

40 parts, built around the W25Q80DVSSIG and 1N4148W. 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 Cpu KiCad files?

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

Can I use the Cpu design in my own project?

Its repository publishes it under the BSD-3-Clause licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from MichaelBell/RV4028

4
  • 4 layers84 × 40 mmRV4028, the printed circuit board in 3D

    RV4028

    MichaelBell/RV4028

    RV4028 - A hackable Risc-V computer

    48 parts9BSD-3-Clause
  • 4 layers90 × 100 mmBackplane, the printed circuit board in 3D

    Backplane

    MichaelBell/RV4028

    RV4028 - A hackable Risc-V computer

    37 parts9BSD-3-Clause
  • 4 layers84 × 40 mmRam, the printed circuit board in 3D

    Ram

    MichaelBell/RV4028

    RV4028 - A hackable Risc-V computer

    10 parts9BSD-3-Clause
  • 2 layers16 × 84 mmProbe, the printed circuit board in 3D

    Probe

    MichaelBell/RV4028

    RV4028 - A hackable Risc-V computer

    5 parts9BSD-3-Clause

Similar boards

  • 4 layers95 × 95 mmTelemetryOnboard, the printed circuit board in 3D

    TelemetryOnboard

    Spaceflight-Rocketry-Giessen-e-V/Telemetry

    Open-Source Rocket Telemetry System Based On Radiocrafts RC232 Radio Modules

    143 parts27CERN-OHL-S-2.0
  • 4 layers104.5 × 91 mmMbed ce ci shield v2, the printed circuit board in 3D

    Mbed ce ci shield v2

    mbed-ce/mbed-ce-ci-shield-v2

    New version of the Mbed OS CE CI Shield -- a shield containing a logic analyzer and components to test features like I2C, SPI, and PWM.

    176 parts7CERN-OHL-P-2.0
  • 2 layers107 × 137 mmWalkeeg v3.0, the printed circuit board in 3D

    Walkeeg v3.0

    WalkEEG/WalkEEG

    Reload now

    106 parts4
  • 2 layers63 × 39 mmEsdp, the printed circuit board in 3D

    Esdp

    Ashley-Ann-Benoy/Digital-Stethoscope

    A digital stethoscope that amplifies, filters, and digitally processes heart sounds for enhanced diagnostics and remote monitoring.

    33 parts1
  • 2 layers72 × 59 mmMuon, the printed circuit board in 3D

    Muon

    Dekanova/muon-kbd

    Simple OSU! keypad

    61 parts1
  • 4 layers93.5 × 72.5 mm000018 PGKB, the printed circuit board in 3D

    000018 PGKB

    kalliod/PGKB

    Programmable keyboard

    157 partsGPL-3.0
  • 2 layers51 × 61 mmRniwase tsuraraGB tGB main, the printed circuit board in 3D

    Rniwase tsuraraGB tGB main

    punkfab/pcb-corpus

    235 real KiCad boards from open-source hardware repositories, prepared as a placement and routing benchmark

    70 parts1
  • 4 layers99 × 53.3 mmPSLab, the printed circuit board in 3D

    PSLab

    fossasia/pslab-hardware

    PSLab Hardware Design and Schematics https://pslab.io

    199 parts1.7kApache-2.0