Custom Single-Cycle 32-Bit Processor
From-scratch 32-bit processor design that brings core computer architecture concepts to life in working hardware.
Overview
This processor project turns textbook architecture into something real you can build and run code on. It is impressive because it covers the full journey: instruction design, datapath logic, control behavior, and practical execution. Rather than using an existing CPU, the project creates one and demonstrates it on meaningful workloads.
Demo
No live demo available for this project. See the repo for setup and run instructions.
Description
pong.s in the Pong-on-Assembly repo. Demonstrates processor design from ISA definition through datapath and control to synthesis-ready Verilog.IF: The PC is held in flip-flops; an ALU computes PC+1. Instruction memory is addressed by the PC. When a branch or jump is taken, a bubble (zero) is fed instead of the next instruction; otherwise the fetched word is latched for decode.
ID: The instruction is decoded into opcode, rd/rs/rt, shamt, ALU op, sign-extended immediate, and jump target. Control logic identifies instruction types (e.g. r_type, lw, sw, bne, jal) and drives reg_write, mem_read, mem_write, and alu_src. Read ports are steered (e.g. $r30 for bex exception check) for the correct source operands.
EX: The ALU performs add, sub, and, or, sll, sra as needed. It produces result, not-equal and less-than (for branches), and overflow; overflow writes a status code to $r30. Branch and jump targets select the next PC (j/jal/jr/bex take priority over branch over PC+1).
MEM: The ALU result is the memory address. Stores write
data_readRegB; loads read into q_dmem for writeback.WB: Writeback selects ALU result or load data via mem_to_reg. setx writes the immediate to $r30; jal writes the return address (PC) to $r31.
Tech & tools
- Verilog
- Digital design
- Custom ISA
- Single-cycle datapath
Highlights
- Custom instruction set and datapath (fetch, decode, execute)
- Single-cycle execution model; Verilog suitable for FPGA synthesis
- Used as execution target for Pong assembly (pong.s)
- Duke ECE 550 — complements Pong-on-Assembly hardware/software stack
More projects
tinyTemp
Custom tiny temperature monitor that evolved from an ATmega328P prototype into a compact ATtiny85 OLED PCB.
WorldWide Rover
Award-winning internet-controlled rover that lets users drive and monitor a physical robot from anywhere in real time.
BareTag Tool Tracker
Smart tool tracking that helps teams instantly find equipment, prevent loss, and stay coordinated in real time.
Buffet
Automated trading system that tests strategies, learns from market behavior, and executes decisions with built-in risk controls.
HeadHunter
AI-powered job search assistant that helps people find better-fit roles faster, with smarter resume matching and cleaner tracking.
Meal Planner
Personal meal planning app that turns “what should I cook?” into a clear weekly routine with pantry awareness and shopping support.
BrickVision
Turns ideas or 3D models into buildable LEGO-style instructions, making custom creations faster and more accessible.
Pong on Assembly
Classic Pong rebuilt from the ground up in hardware and low-level assembly, showing full-stack systems engineering in action.
ThreadLib Disk Scheduler
C++ user-level threading library paired with a concurrent disk scheduler that coordinates requester threads and SSTF service.
Multilateration 3D Positioning
3D location engine that estimates where an object is in space and validates accuracy through realistic simulation.
RISC-V Encryption
Encryption concepts implemented at the hardware-software boundary, showing security logic at instruction level detail.
PUF Tester
Hardware security testing toolkit for measuring unique device fingerprints and reliability under real test conditions.
tinyTemp
Custom tiny temperature monitor that evolved from an ATmega328P prototype into a compact ATtiny85 OLED PCB.
WorldWide Rover
Award-winning internet-controlled rover that lets users drive and monitor a physical robot from anywhere in real time.