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

RV4028 - A hackable Risc-V computer

Size
84 × 40 mm
Copper layers
4
Thickness
1.6 mm
Parts
48
Nets
123
Pads
338
Tracks, vias
842, 128
Pours
13
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
24 Oct 2025
Updated
22 Feb 2026

Overview

RV4028 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 48 parts on 123 nets, routed with 842 tracks and 128 vias.

It is built around the W25Q32JVSSIQ, 74LVC32AD and 1N4148W, with the ABM8-272-T3, KT-0603R and SM03B-SRSS-TB among its other parts. Its parts include 19 capacitors, 12 resistors, 6 connectors, 3 ICs and 3 diodes. It belongs with the RP2350 boards of this library.

Main components

7

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

48
QtyValueFootprintReferences
12100nCapacitor_SMD:C_0402_1005MetricC2, C8, C11, C12, C13, C14, C15, C16, C17, C18, C20, C21
410kResistor_SMD:R_0402_1005MetricR9, R10, R11, R12
41kResistor_SMD:R_0402_1005MetricR1, R2, R4, R6
215pCapacitor_SMD:C_0402_1005MetricC3, C4
227Resistor_SMD:R_0402_1005MetricR7, R8
233Resistor_SMD:R_0402_1005MetricR3, R5
24.7uCapacitor_SMD:C_0402_1005MetricC9, C10
24.7uRP2350_80QFN_minimal:C_0402_1005Metric_small_padsC6, C7
2QwSTConnector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalJ3, J5
2SW_PushRV4028:SW-SMD_HX-TS-1101-C-WSW1, SW2
110uCapacitor_SMD:C_0805_2012MetricC19
11N4148WDiode_SMD:D_SOD-123FD3
13.3uRP2350_80QFN_minimal:L_pol_2016L1
174LVC32Package_SO:SSOP-14_5.3x6.2mm_P0.65mmU2
1ABM8-272-T3Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
1Conn_02x03Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ2
1Conn_02x08_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalJ6
1KT-0603RLED_SMD:LED_0603_1608MetricD1
1RP2350_80QFNRV4028:RP2350-QFN-80-1EP_10x10_P0.4mm_EP3.4x3.4mm_ThermalViasU1
1SM03B-SRSS-TBConnector_JST:JST_SH_SM03B-SRSS-TB_1x03-1MP_P1.00mm_HorizontalJ4
1TF-15×15easyeda2kicad:TF-SMD_TF-15-15Card1
1W25Q32JVSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU3
1WS2812BLED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD2
1~RV4028:Module_2mmJ1

More from MichaelBell/RV4028

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

    Cpu

    MichaelBell/RV4028

    RV4028 - A hackable Risc-V computer

    40 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 layers40 × 40 mmMAVLink Lights, the printed circuit board in 3D

    MAVLink Lights

    DanielAdelodun/MAVLink-Lights-Hardware

    KiCAD files for MAVLink LED Strip Controller Hardware. Firmware can be found here: https://github.com/DanielAdelodun/MAVLinkLights

    81 parts
  • 2 layers41.3 × 110.5 mmA500 Simple SPI V1.3, the printed circuit board in 3D

    A500 Simple SPI V1.3

    Mathesar/a500-simple-spi-hardware

    Simple SPI controller for Amiga 500 with support for SD-cards and Ethernet controller

    26 parts13
  • 4 layers130 × 64.3 mmTspico v2.6, the printed circuit board in 3D

    Tspico v2.6

    timex-sinclair-projects/tspico-hardware

    Status 2026-10-19: prototype 3 (v3.0-proto3, changes below). Proto1 (v3.0-proto1) was built and brought up; proto2 added its fixes (below).

    93 partsCERN-OHL-S-2.0
  • 6 layers76 × 46.4 mmRp2350 driver, the printed circuit board in 3D

    Rp2350 driver

    sequoia-hope/rp2350-motor-controller

    An RP2350 based brushless motor controller

    291 parts39
  • 6 layers80 × 60 mmIce core, the printed circuit board in 3D

    Ice core

    enkhbold470/ice-core

    iCE40UP5K FPGA board with 8 MB PSRAM and three Pmods, programmed over USB-C by an RP2040. 6-layer KiCad 10 board.

    78 partsCERN-OHL-S-2.0
  • 2 layers100.3 × 69.9 mmHDD Synth Prototype MK5, the printed circuit board in 3D

    HDD Synth Prototype MK5

    MaverickUK/HDDSynth

    Recreate the sound of mechanical spinning HDDs on retro PCs that use a solid state drive

    112 parts16

Questions

How big is the RV4028 PCB?

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

What parts does the RV4028 use?

48 parts, built around the W25Q32JVSSIQ, 74LVC32AD, 1N4148W and ABM8-272-T3. 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 RV4028 KiCad files?

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

Can I use the RV4028 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).