Graduating UWaterloo Mechatronics — 2026

firmware engineer

Hi, I'm Prateek.

I write firmware — bare-metal drivers in C on STM32, Verilog on FPGAs. Sometimes both in the same project.

Prateek Singh
// 01

Projects

selected work · 11 completed
FPGA CNN accelerator running live — predicted: 3 fingers
github.com/Prateek2174/tang-primer-cnn

FPGA CNN accelerator

Three-layer CNN in pure Verilog on a Tang Primer 20K — no CPU, no vendor IP. Classifies hand gestures (0–5 fingers) from a webcam at 84.3% accuracy on real hardware.

VerilogFPGACNNint8
→
FPGA human presence detector — predicted: person
github.com/Prateek2174/tang_primer_human_cnn

FPGA human presence detector

Four-layer CNN in pure Verilog on a Tang Primer 20K — detects person / no person in a webcam scene at 83.3% accuracy on real hardware. Uses BatchNorm folding and knowledge distillation.

VerilogFPGACNNdistillation
→
IR night-vision headset
~/capstone · MTE 481

Vision AI — IR night vision headset

FPGA video pipeline for a head-mounted IR night-vision system. Verilog on Tang Primer 25K — OV5640 capture, I²C bring-up, line buffering, FLCOS display drive.

FPGAVerilogGowin EDAcapstone
→
8-bit breadboard computer schematic
~/hardware · breadboard

8-bit breadboard computer

A Turing-complete 8-bit CPU built from discrete logic — ALU, register file, RAM, control unit, all wired up on breadboards. Custom assembly language for programming it.

Hardwarediscrete logicTTLassembly
→
~/hardware · 6502 + VGA

6502 computer + VGA card

A working 6502-based 8-bit computer on breadboards, paired with a TTL-logic VGA video card generating real HSYNC/VSYNC signals to a monitor.

Hardware6502VGAEEPROM
→
~/MTE 544 · ROS2

Autonomous robot navigation

A* path planning, particle filter localization from LiDAR + odometry, and PID trajectory control on a ROS2 mobile robot.

PythonROS2A*particle filter
→
Kinova Gen3 arm with Jenga blocks in the UWaterloo Robohub
~/ME 547 · Kinova Gen3

Jenga Mosaic robot

Kinova Gen3 robotic arm pick-and-place system — reserve brick selection from a disordered pile and Cartesian path execution to expand a Jenga mosaic.

PythonKinova Gen3Kortex APIpick & place
→
github.com/Prateek2174/uart_bootloader

UART bootloader

A custom UART-based bootloader for the STM32F446RE — receives firmware over serial, writes to flash, jumps to the application.

CbootloaderflashUART
→
github.com/Prateek2174/sai

SAI audio driver

Serial Audio Interface driver for the STM32 NUCLEO-F446RE — I²S/SAI configuration, DMA streaming, audio peripheral bring-up.

CSAI / I²SDMAaudio
→
github.com/Prateek2174/usb

STM32 USB

USB device firmware on the STM32F446RE — descriptor setup, endpoint configuration, host enumeration over the on-chip USB peripheral.

CUSBSTM32F446RE
→
github.com/Prateek2174/F446RE_bare_metal

Bare-metal F446RE

No-HAL register-level drivers for the STM32F446RE — GPIO, USART, and ADC written from the reference manual against custom linker scripts.

CAssemblyno-HALlinker
→
// 02

Background

about

I write firmware because I want to understand how devices actually work. Bare-metal showed me how hardware components communicate and operate as a system — and that just fed the curiosity. There's nothing quite like the moment a device you've been debugging for days finally comes to life and you can see it and interact with it.

Mechatronics Engineering, University of Waterloo — class of 2026.

// 03

Get in touch

contact