👋🏼👋🏼 I'm a Computer Engineering student at Simon Fraser University. I like building things where software meets hardware: FPGAs, embedded systems, you name it. Let's connect!
3.36 GPA · 4x Dean's Honour Roll: Fall 2024, Summer 2025, Fall 2025, Spring 2026
- ENSC 351 — Embedded & Real-Time System Software
- ENSC 254 — Introduction to Computer Organization
- ENSC 252 — Fundamentals of Digital Logic & Design
- ENSC 350 — Digital System Design
- ENSC 452 — Advanced Digital Systems
Real-time dual-core sonar system that sweeps an ultrasonic sensor via a stepper motor, acquires (angle, distance) pairs, and renders them as a sweep animation over VGA.
- Custom AXI4-Lite IP core in VHDL for stepper pulse generation, exposing PS-configurable registers for step rate, direction, and status
- Partitioned across both ARM cores: sensor reading, motor control, and interrupt servicing on Core 0; sweep state machine and VGA rendering on Core 1
- Lock-free inter-core communication via a seqlock in shared OCM, allowing the rendering core to take coherent snapshots of (angle, distance) samples without blocking acquisition
- Non-blocking driver state machines for the ultrasonic sensor and I2C ADC, preventing stalls in the acquisition loop and timing-sensitive audio output
A 2-axis pen plotter that parses coordinate files and physically traces vector drawings using two NEMA 17 steppers for X/Y positioning and a servo for pen lift, driven by a multithreaded pipeline.
- Plotting pipeline that streams coordinate commands, clamps each against axis bounds, then dispatches X/Y targets to motor threads and synchronizes on completion
- Each axis in a dedicated thread with mutex-protected command queues and condition variables, allowing X and Y to step in parallel rather than sequentially and reducing total travel time by up to 50%

Inline two-port Ethernet bridge with dual W5500 controllers, forwarding raw L2 frames between two nodes.
- Register-level W5500 driver from scratch over a shared SPI bus, handling link bring-up and MACRAW configuration
- Interrupt-driven forwarding path with a drain loop, preventing frames queued during a transfer from stalling
VHDL driver for a 64×32 HUB75 RGB dot matrix display, handling row addressing, pixel shifting, and refresh timing over GPIO.
- 4-state FSM sequencing shift, latch, and output-enable signals to meet the panel's strict timing requirements
- 1/16 multiplexed row scanning, validated on a physical panel without visible flicker
- Timing and FSM behaviour verified with ModelSim testbenches
Camera-based parking occupancy detector using a Raspberry Pi NoIR camera that processes a live feed to identify open stalls under varying lighting and weather conditions.
- Vehicle detection pipeline using Gaussian blur and contour analysis to isolate cars from the camera feed
- Adaptive thresholding to adjust detection sensitivity across changing lighting and weather conditions