I worked with three team members to design and implement an ARM-based CPU from the ground up and develop a successful form of value prediction. We first designed an in-order pipeline, but eventually moved to an HPS-style out-of-order microarchitecture. After modeling the architecture in SystemC, we implemented the design in structural Verilog with unit- and top-level SystemVerilog testbenches. To aid us with verification and demoes, we also built a wide array of tooling.
Our team of four built an autonomous car that navigates a maze with obstacles and other cars. The car ran on a real-time operating system of our own making that managed two microcontrollers, several sensors, and a set of motors. Our car also won a class-wide race. ECE post.
I creating an LC-3 assembler and simulator to revamp the existing set of tools available to students using the Introduction to Computing textbook by Dr. Yale Patt and Dr. Sanjay Patel. The tools run across all major platforms and decouple the backend from the Electron and command line frontends. I specifically designed the tools to cater to students as much as the graders.
With one other team member, I built a CUDA-accelerated path tracer with a free floating camera. The path tracer renders noisy, but recognizable, scenes with primitive shapes and fractals (using the marching rays algorithm) within milliseconds. For simple scenes, it can converge to a noise-free image within seconds, but with difficult lighting conditions it can take minutes.