Systems & Hardware
Digital Design in Verilog
I built a complete multi-cycle LC-3 processor in Verilog: ALU, register file, memory interface, and the finite-state-machine controller that sequences them, covering the entire LC-3 instruction set across arithmetic, memory, and control flow.
The debugging is the part worth reading. Simulation hung with no error message, which is the least informative failure a processor can give you. Waveform analysis in Vivado traced it to unassigned control-mux selects: certain controller states left mux inputs undriven, so the datapath stalled on undefined values rather than faulting. Fixing it meant making every control signal explicitly assigned in every state instead of relying on defaults. The final design passed all 19 tests with zero errors.
Also built this way: Simon, a two-player memory game in Verilog, on the same controller-and-datapath split. The FSM owns game flow (generate, play back, read input, judge, advance); the datapath owns sequence storage and comparison. Verified module by module before full-game simulation and FPGA deployment.