Sailbot Hackathon
Working on our design (left) and our team at the end of the competition (right)

Overview
In March 2026 I competed in UBC Sailbot's design competition with Avi Guha, Samuel Sjoden, and Wayne Sudanartha.
We designed "The SuperVisor", a pair of smart glasses that help visually impaired people get around by turning what a camera sees into small taps on the side of their head.
The SuperVisor

My main contributions were:
- Setting up the flow to turn our neural network chip's Verilog into a silicon layout
- The MCU schematic for the glasses control board
Motivation
Current navigation aids for the visually impaired are often bulky, loud, or draw attention to the person using them. We wanted something that looks like a normal pair of glasses, and uses quiet taps instead of audio so the feedback stays private.
Architecture
System diagram

An ESP32-S3 sits at the center of the glasses. It talks to a phone over Bluetooth for things like GPS navigation, and to the IMU and haptic drivers over I2C.
The camera doesn't go to the ESP32 at all. It goes straight into a neural processing unit (NPU), a chip we designed to run an object detection model. Even a small model like YOLO26 nano has 2.4 million parameters, which is too much for a microcontroller to run in real time, so the NPU runs the model and only sends the ESP32 what it found over UART.
Implementation
Neural net
We used Ultralytics' YOLO26 nano model to detect objects in the camera feed, like people and phones.
Example YOLO run detecting a person and a cell phone

Model to silicon
Turning the model into a chip took four steps:
- Convert the Python model to C++ with hls4ml
- Convert the C++ to Verilog with Bambu HLS, which split the network into 24 stages
- Turn the Verilog into a physical layout with LibreLane
- Output a GDSII file, the file you'd actually send to a fab, on the SkyWater 130 nm process
Model to silicon flow
![]()
My part was steps 3 and 4. I set up LibreLane in a Nix dev shell so everyone on the team could get the exact same tools with one command, and then got our generated Verilog through to a GDSII file.
Layout of the NPU

Glasses control board
I did the MCU schematic for the control board. The ESP32-S3 shares one I2C bus with a BNO086 IMU and two DRV2605 haptic drivers, one for each arm of the glasses. Both haptic drivers have the same I2C address, so each one gets its own enable pin. Since it was a hackathon we ran out of time, and only got as far as the schematic.
MCU schematic

Power module
Our team also designed a power module with Qi wireless charging and overcharge protection, small enough to fit inside the frame of the glasses.
Power module PCB

Challenges
- Our chip layout didn't have any real memory in it
- The generated Verilog stores the model's weights and results in 25 memories totaling about 396 Mbits. The Sky130 process doesn't have memory blocks anywhere near that big, and building it out of the ones it does have would take at least 24,204 of them, about 6,887 mm² of silicon. With the time we had, I ran the flow with the memory left as a placeholder, which gave us a 250 µm × 250 µm layout of just the logic.
- We ran out of time
- It was a hackathon, so a lot of the design stopped partway. The control board never got past the schematic, and the chip layout only covers the logic.
Presentation
Repositories
- YOLO model: github.com/elec-larpers/yolo-testing
- Neural net to C++ to RTL: github.com/elec-larpers/ModelToRTL
- RTL to GDSII: github.com/elec-larpers/asic-flow
- Glasses control board: github.com/elec-larpers/glasses-control
- Power control board: github.com/elec-larpers/powermodule
Our team ended up winning the competition!