Skip to the content
4 layers183.4 × 143.1 mmMotherboard, the printed circuit board in 3D

Motherboard

apistol78/rv321

Risc-V pipelined CPU and SoC written in SystemVerilog

Size
183.4 × 143.1 mm
Copper layers
4
Thickness
4.69 mm
Parts
126
Nets
230
Pads
687
Tracks, vias
0, 0
Routed
Not yet
KiCad
KiCad 6 (file 20211014)
Created
12 Mar 2023
Updated
5 May 2025

Overview

Motherboard is an open-source printed circuit board by apistol78, from the apistol78/rv32 repository on GitHub. It is a 4-layer board of 183.4 × 143.1 mm with 126 parts on 230 nets.

It is built around the RP2040, FE1.1S and SII9022ACNU, with the W25Q128JVSIQ, USBLC6-2SC6 and AZ1117EH-1.2TRG1 among its other parts. Its parts include 54 capacitors, 31 resistors, 13 connectors, 11 ICs and 5 inductors. It belongs with the fPGA and programmable logic and computers and single-board computers boards and the RP2040 and FPGA and CPLD boards of this library.

Main components

9

README

readme.md

MOJO Risc-V CPU and System-on-a-Chip

The MOJO SOC is an educational and fun system for FPGA and "Bare metal" programming experimentations.
It's a RISC-V CPU running at 100 MHz, 32 MiB RAM, audio and 320*200 video resolution. To make user input easy I've moved USB host functionality to an external PCB using Raspberry Pico as a FPGA <-> HID bridge.

Prerequisites

This project require an install of Traktor to generate required resources. You will also need a RISC-V GCC toolchain compiled and installed at /opt/riscv32/bin on your machine.

How to build

Run build.sh to build host (i.e. Linux) and target products:

text
./build.sh

After everything has been built you should be able to run the emulators:

text
./build/linux/ReleaseStatic/Rv32T -elf=./build/rv32/ReleaseStatic/Boot

or

text
./build/linux/ReleaseStatic/Rv32 -elf=./build/rv32/ReleaseStatic/Boot

CPU

MOJO CPU is a conventional 5-stage (F,D,X,M,W) pipelined RISC-V CPU. It also contain configurable data- and instruction caches.

Written using SystemVerilog and are split up into logical pieces where each stage of the pipeline is in a separate module:

ModuleDescription
CPU_ALUALU unit, fully combinatorial
CPU_CSRCSR control unit
CPU_DCache_CombData cache, combinatorial
CPU_DCache_RegData cache, registered
CPU_DCache_NoneData cache, disabled
CPU_DecodeDecode stage
CPU_DefinesCPU defines
CPU_DivideDivison wrapper, usually implemented with a vendor IP
CPU_ExecuteExecute stage
CPU_FetchFetch stage
CPU_ForwardRegister forwarding logic
CPU_ICache_CombInstruction cache, combinatorial
CPU_ICache_RegInstruction cache, registered
CPU_ICache_NoneInstruction cache, disabled
CPU_MemoryMemory stage
CPU_MultiplyMultiplication wrapper, usually implemented with a vendor IP
CPU_RegistersRegister file
CPU_SkidBufferGeneralized skid-buffer
CPU_TypesCPU types
CPU_WritebackWriteback stage

Perifherials

A lot of perifherial modules has been implemented as port of the SoC:

ModuleDescription
AUDIO_controller, AUDIO_i2s_output, AUDIO_pwm_outputPCM based audio modules
BRAMVarious block-ram modules
BRIDGEBUS bridge, to separate BUS devices for improved timing.
BROMBlock-rom module
BusAccessBUS multiplexed access
ClockDividerGeneric clock divider
DMADirect memory access controller
FIFO_BRAMBlock ram backed FIFO
FIFORegister backed FIFO
GPIOGeneral purpose IO controller
I2CI2C controller
LEDLED controller
PLICPLIC interrupt controller
RESETReset controller
SDSD controller
SDRAM_controllerGeneric SDRAM controller
SRAM_interfaceGeneric SRAM controller
SystemRegistersSystem wide register map
TimerHardware timer with compare
UARTUART controller
VIDEO_controllerVideo output controller
VIDEO_VGAVideo VGA signal generator
WriteBufferWrite buffer (queue) with readback or read-through

System-on-a-Chip

A couple of custom PCBs designed to connect to QM-Tech FPGA boards is the physical basis for MOJO SoC. The SoC support following perifherials:

  • HDMI output
  • Stereo audio output through PWM and through I2S HDMI.
  • SD card interface using 4-bit SD protocol.
  • 2 UARTs, one for host and one for HID input.
  • Raspberry Pico based USB host to FPGA bridge supporting three external HID devices (keyboard, mouse and gamepad).

Emulators

Two different emulators, one C++ highlevel emulator and one based on Verilator. The highlevel is useful for application development and the other is used for verification of gate level logic.

Runtime

C/C++ runtime library, including a preemptive multithreaded kernel, expose all hardware features to user programs. Support CRT for easy portability.

Schematics

KiCad schematics for all perifherial boards are available and been built using JLCPCB.

Parts

126
QtyValueFootprintReferences
110.1uFCapacitor_SMD:C_0402_1005MetricC34, C35, C36, C37, C38, C39, C40, C41, C42, C43, C44
11100nFCapacitor_SMD:C_0402_1005MetricC5, C7, C8, C9, C10, C11, C13, C14, C15, C16, C19
7100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC28, C29, C30, C31, C45, C46, C51
627Resistor_SMD:R_0402_1005MetricR8, R9, R11, R12, R13, R32
64.7kResistor_SMD:R_0402_1005MetricR14, R15, R16, R17, R19, R20
54k7Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR21, R22, R23, R24, R25
40.1uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC24, C25, C26, C27
410kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR26, R27, R30, R31
427pFCapacitor_SMD:C_0805_2012MetricC3, C4, C17, C18
4MountingHoleMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
4TestPointTestPoint:TestPoint_Pad_D1.0mmTP2, TP3, TP4, TP5
30.022uHInductor_SMD:L_0805_2012Metric_Pad1.15x1.40mm_HandSolderL2, L3, L4
310uFCapacitor_SMD:C_0805_2012MetricC21, C22, C23
3292303-1292303-1:TE_292303-1J7, J8, J9
3USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U4, U5, U6
2100uFCapacitor_SMD:CP_Elec_5x5.3C2, C33
210kResistor_SMD:R_0402_1005MetricR2, R18
210uFCapacitor_SMD:CP_Elec_5x5.3C1, C32
210uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC52, C53
212MHzCrystal:Crystal_SMD_HC49-SDY1, Y2
21kResistor_SMD:R_0805_2012MetricR1, R6
21uFCapacitor_SMD:C_0402_1005MetricC6, C12
22.7nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC49, C50
227Resistor_SMD:R_0805_2012MetricR4, R5
23.3uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC47, C48
2470Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR28, R29
10.022uHInductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolderL1
110uFCapacitor_SMD:C_0402_1005MetricC20
11uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC54
12.7k 1%Resistor_SMD:R_0402_1005MetricR7
1220uHInductor_SMD:L_0805_2012MetricL5
133Resistor_SMD:R_0805_2012MetricR3
1685119134923hdmi connector:685119134923J10
1AZ1117EH-1.2TRG1Package_TO_SOT_SMD:SOT-223-3_TabPin2U8
1AZ1117EH-3.3TRG1Package_TO_SOT_SMD:SOT-223-3_TabPin2U1
1AudioJack3Connector_Audio:Jack_3.5mm_CUI_SJ-3523-SMT_HorizontalJ11
1CS4344-CZZ2022-04-22_11-49-30:CS4344-CZZU11
1FE1.1sPackage_SO:SSOP-28_3.9x9.9mm_P0.635mmU7
1IS61LV25616ALPackage_SO:TSOP-II-44_10.16x18.41mm_P0.8mmU10
1Jack-DCConnector_BarrelJack:BarrelJack_CLIFF_FC681465S_SMT_HorizontalJ13
1LEDLED_SMD:LED_0805_2012MetricD1
1LEFTConnector_PinSocket_2.54mm:PinSocket_2x32_P2.54mm_VerticalJ2
1Micro_SD_CardConnector_Card:microSD_HC_Hirose_DM3D-SFJ4
1RIGHTConnector_PinSocket_2.54mm:PinSocket_2x32_P2.54mm_VerticalJ1
1RP2040rp2040:QFN40P700X700X90-57NU3
1SII9022ACNUPackage_DFN_QFN:QFN-72-1EP_10x10mm_P0.5mm_EP6x6mmU9
1SOC_BOOTMODEConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ14
1SOC_NRESETConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ12
1SWDConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ5
1TestPoint_SmallTestPoint:TestPoint_Pad_D1.5mmTP1
1UART0Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
1W25Q128JVSPackage_SO:SOIC-8_5.23x5.23mm_P1.27mmU2

More from apistol78/rv32

9
  • 2 layers129 × 41.9 mmUsb host hub, the printed circuit board in 3D

    Usb host hub

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    61 parts1
  • 2 layers42.7 × 83.8 mmHdmi brd, the printed circuit board in 3D

    Hdmi brd

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    42 parts1
  • 2 layers47 × 83.8 mmQm k7 aux brd, the printed circuit board in 3D

    Qm k7 aux brd

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    27 parts1
  • 4 layers45.7 × 83.8 mmSrambrd, the printed circuit board in 3D

    Srambrd

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    24 parts1
  • 2 layers38.1 × 83.8 mmIobrd, the printed circuit board in 3D

    Iobrd

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    22 parts1
  • 2 layersHdmi tx, the printed circuit board in 3D

    Hdmi tx

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    20 parts1
  • 2 layers30.5 × 83.8 mmLcdbrd, the printed circuit board in 3D

    Lcdbrd

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    13 parts1
  • 2 layers68.6 × 99.1 mmLcd, the printed circuit board in 3D

    Lcd

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    3 parts1
  • 2 layers27.4 × 63.2 mmStm32f breakout, the printed circuit board in 3D

    Stm32f breakout

    apistol78/rv32

    Risc-V pipelined CPU and SoC written in SystemVerilog

    3 parts1

Similar boards

  • 4 layers77 × 71.5 mmKsz9031-eval, the printed circuit board in 3D

    Ksz9031-eval

    azonenberg/misc-devboards

    Miscellaneous prototype hardware that wasn't major enough to warrant a dedicated repo

    173 parts17BSD-3-Clause
  • 2 layers290.5 × 116.7 mmKeeby60v2, the printed circuit board in 3D

    Keeby60v2

    minhazislamnafi/KEEBY60-20

    A moduler 60% mechanical hot-swapble keyboard. With 20% numpad attachment will form a proper 80% keyboard

    237 partsCERN-OHL-S-2.0
  • 4 layers91.4 × 102.9 mmFPGC4IOboard, the printed circuit board in 3D

    FPGC4IOboard

    bartpleiter/FPGC5

    A completely self designed (game) computer, implemented in hardware using an FPGA. Basically every component is self designed, from the ISA up to the PCB and software.

    150 parts6GPL-3.0
  • 8 layers68 × 67.8 mmReform kintex, the printed circuit board in 3D

    Reform kintex

    kitspace-forks/reform-kintex-som

    This is the open hardware system-on-module featuring the Xilinx/AMD Kintex-7 FPGA (XC7K160T or XC7K325T) and 2GB DDR3 RAM.

    297 parts2
  • 4 layers70 × 69.8 mmKarabas mini, the printed circuit board in 3D

    Karabas mini

    andykarpov/karabas-mini-pcb

    Karabas Go Mini PCB

    222 parts2
  • 4 layers536.5 × 385.7 mmDC27-badge, the printed circuit board in 3D

    DC27-badge

    netik/dc27_badge

    Defcon 27 "DaBomb!" badge.

    141 parts30Apache-2.0
  • 4 layers50 × 100 mmBeamBender, the printed circuit board in 3D

    BeamBender

    jbilander/BeamBender

    An open source flicker fixer PCB for Amiga 1200 and 500

    104 parts25CC-BY-SA-4.0
  • 4 layers109.2 × 47 mmArty a7-expansion, the printed circuit board in 3D

    Arty a7-expansion

    antmicro/arty-expansion-board

    IO expansion board compatible with Digilent Arty A7

    125 parts14Apache-2.0

Questions

How big is the Motherboard PCB?

It measures 183.4 × 143.1 mm and has 4 copper layers, 4.69 mm thick.

What parts does the Motherboard use?

126 parts, built around the RP2040, FE1.1S, SII9022ACNU and W25Q128JVSIQ. 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 Motherboard KiCad files?

From the apistol78/rv32 repository on GitHub, at the commit this page was made from: the board is schematics/motherboard/motherboard.kicad_pcb and its schematic schematics/hdmi brd/hdmi brd.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Motherboard design in my own project?

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