Skip to the content
PCBKitNew board
2 layers70 × 70 mmVector CPU, the printed circuit board in 3D

A single-cycle RISC-V CPU with a small subset of the RISC-V Vector (RVV) extension. It was designed in SystemVerilog and taken from RTL to GDS for a 180 nm tape-out in UCLA EE209AS (2026).

Size
70 × 70 mm
Copper layers
2
Thickness
1.6 mm
Parts
54
Nets
40
Pads
193
Tracks, vias
247, 2,463
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
26 Sep 2026
Updated
26 Sep 2026

Overview

Vector CPU is an open-source printed circuit board by louisquantran, from the louisquantran/Vector-CPU-Tape-out repository on GitHub. It is a 2-layer board of 70 × 70 mm with 54 parts on 40 nets, routed with 247 tracks and 2,463 vias.

Its parts include 28 resistors, 17 connectors, 4 capacitors and 1 IC.

README

README.md

Vector-CPU-Tape-out

A single-cycle RISC-V CPU with a small subset of the RISC-V Vector (RVV) extension. It was designed in SystemVerilog and taken from RTL to GDS for a 180 nm tape-out in UCLA EE209AS (2026).

The core runs a subset of RV32I plus vsetvli, unit-stride 32-bit vector loads and stores, and four vector ALU ops on a 4-lane, 128-bit SIMD datapath. The chip has only 23 signal pins, so programs are loaded one byte at a time over an 8-bit port. A debug mode streams every write-back result out over an 8-bit output bus.

Final layout

Repository layout

FolderContents
Vector_CPU/Taped-out design. Scalar core + vector unit (rtl/), testbenches (tb/), Hammer configs (design/), chip-testing PCB (PCB/)
CPU/Earlier scalar-only version of the same core (no vector unit)
SIMD_ALU/First block: a combinational 16-bit SIMD ALU (2 × 8-bit lanes: ADD, AND, OR, SHIFT)
docs/Datapath diagram and final layout screenshot

Architecture

Scalar datapath

  • Single-cycle scalar core. Fetch, decode, execute, memory and write-back all happen in one clock. The instruction and data memories are read combinationally, so the longest path is a load that goes through both memories in one cycle.
  • Vector unit added next to the scalar datapath:
    • VLEN = 128 bits, SEW = 32 only, LMUL = 1 only, so VLMAX = 4
    • 4 vector registers (v0–v3), unmasked instructions only
    • simd_alu_4lane: four 32-bit lanes in parallel, with tail-undisturbed or tail-agnostic handling (the agnostic tail is written with all 1s)
    • Vector loads and stores share the one data-memory port with the scalar core and take one 32-bit element per cycle
  • Memories (set as parameters in chip_top): 32-word instruction memory, 64-byte data memory.
  • Illegal or unsupported instructions stop the CPU. The PC stays where it is, so a program ends by running into an unloaded (all-zero) word.

Supported instructions

ClassInstructions
Scalar (RV32I subset)LUI, ADDI, ORI, SLTIU, SUB, AND, SRA, LW, LBU, SW, SH, BNE, JALR
Vector configvsetvli (only e32, m1; vl = min(AVL, 4), including the rs1 = x0 special cases)
Vector memoryvle32.v, vse32.v (unit-stride)
Vector ALUvadd.vv, vsub.vv, vand.vv, vor.vv

Chip interface

14 inputs, 9 outputs, plus VDD and VSS. Everything runs on one clock (clk, with a 10 ns / 100 MHz target).

PinDirDescription
clk, rstinClock and asynchronous active-high reset
load_modeinHigh: program-load mode (also holds the core in reset)
instr_byte_in[7:0]inProgram bytes during load mode
instr_byte_validinQualifies instr_byte_in
cpu_eninRun enable
debug_stream_modeinStream every write-back result to the output port
stream_data_out[7:0]outStreamed result bytes
stream_valid_outoutQualifies stream_data_out

Operating the chip

  1. Reset: pulse rst.
  2. Load the program: raise load_mode. For each 32-bit instruction, send 4 bytes least-significant byte first, holding instr_byte_valid high for one clock per byte. Words are written in order starting at address 0.
  3. Run: lower load_mode and raise cpu_en. Execution starts at PC 0.
  4. Observe (optional): with debug_stream_mode high, each result the core writes back goes out as 4 bytes, LSB first, with stream_valid_out high. Results come from scalar rd writes, the new vl from vsetvli, each vector-load element, and each lane of a SIMD result. The core stalls while it streams, so no results are lost. With debug_stream_mode low, the core runs at full speed and nothing is streamed.

Verification

The testbenches in Vector_CPU/tb/ check themselves. They load a program through the byte port, step through it checking the scalar and vector registers, then check that the debug output stream matches the expected sequence of words.

TestbenchCoverage
core_tb.svFull 79-instruction regression with branch and loop scenarios (needs IMEM_WORDS = 128)
core_tb_short.svFits a 32-word IMEM: LUI, ADDI, AND, SW, LW, JALR, BNE + vector ops
core_tb_short2.svFits a 32-word IMEM: ORI, SLTIU, SUB, SRA, SH, LBU + all vector ops at vl = 4 (used for gate-level sim)

Physical design flow

The design was implemented with Hammer driving Cadence Genus (synthesis), Innovus (place and route), Tempus (STA) and Conformal (equivalence), Mentor Calibre (DRC/LVS), and Synopsys VCS (RTL and gate-level simulation).

  • design/design.yml: top module, RTL file list, clock and I/O constraints, a 600 × 720 µm floorplan, pin placement and the power-ring/strap script
  • design/tb.yml: simulation setup for RTL, post-synthesis and post-PAR runs

Note on the PDK: the process design kit is under NDA. In the published design.yml files, process-specific values (technology, node, cell names, metal layer names and design-rule values) are replaced with <placeholders>. Fill these in from your own PDK before running Hammer. Hammer's own configs (env.yml and the tech plugin) are not included.

The input_files paths in the configs (../ECE209/...) are relative to the original Hammer run directory. Update them to point at Vector_CPU/rtl/ and Vector_CPU/tb/ in this repo.

Test PCB

Vector_CPU/PCB/ has the KiCad project for the chip-testing PCB: schematic, board layout, and the chip's symbol and footprint.

Parts

54
QtyValueFootprintReferences
281KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR11, R12, R13, R14, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30 +12
12Conn_02x03_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ5, J14, J15, J16, J17, J18, J19, J20, J21, J22, J23, J24
5Conn_02x02_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x02_P2.54mm_VerticalJ9, J25, J26, J27, J28
4, , ,
10.22uCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC17
12.2nCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC16
122pCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC15
122uCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC18
1~EE209AS_2026:EE209AS_2026U2

Questions

How big is the Vector CPU PCB?

It measures 70 × 70 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Vector CPU use?

54 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 Vector CPU KiCad files?

From the louisquantran/Vector-CPU-Tape-out repository on GitHub, at the commit this page was made from: the board is Vector_CPU/PCB/PCB.kicad_pcb and its schematic Vector_CPU/PCB/PCB.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Vector CPU design in my own project?

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

Similar boards

  • 2 layers203 × 26.6 mmBlade13, the printed circuit board in 3D

    Blade13

    opulo-inc/lumenpnp

    The LumenPnP is an open source pick and place machine.

    54 parts3.7k
  • 2 layers30 × 50 mmModuleV421, the printed circuit board in 3D

    ModuleV421

    stuartpittaway/diyBMSv4

    Version 4 of the diyBMS

    54 parts1.1k
  • 2 layers100.1 × 40 mm32Bit shift register, the printed circuit board in 3D

    32Bit shift register

    MaltWhiskey/Mega-Cube

    16x16x16 PL9823 Cube with Teensy 4.0 and FlexIO driver

    54 parts766
  • 2 layers100 × 120 mmHubble lens, the printed circuit board in 3D

    Hubble lens

    wntrblm/Castor_and_Pollux

    A Juno-inspired dual oscillator

    54 parts587
  • 2 layersPassword, the printed circuit board in 3D

    Password

    limpkin/mooltipass

    Github repository dedicated to the mooltipass project

    54 parts531
  • 2 layers104.3 × 38.9 mmHYD ISO PANEL, the printed circuit board in 3D

    HYD ISO PANEL

    jrsteensen/OpenHornet

    OpenHornet 1:1 F/A-18C Simulator Repository

    54 parts431
  • 2 layers93.8 × 64.2 mmPiFinder smt, the printed circuit board in 3D

    PiFinder smt

    brickbots/PiFinder

    A plate solving telescope finder based around a Raspberry PI and RPI HQ Camera

    54 parts257GPL-3.0