FPGA / SystemVerilog Project

8-Bit FPGA Microprocessor

During my Computer Engineering coursework at NAU, I worked on a multi-lab FPGA project where we built a simple 8-bit microprocessor from the ground up. This project started with smaller digital logic components and eventually became a complete processor that could fetch, decode, and execute instructions. Throughout the project, I worked with SystemVerilog, Quartus Prime, ModelSim/Questa, FPGA board testing, and processor-level design concepts.

This project was one of the better examples of how my computer engineering classes connected hardware and software together. Instead of only writing code, I had to think about how signals moved through registers, memory, the ALU, and the control unit on every clock cycle. It helped me better understand what is actually happening inside a processor at the hardware level.


Project Overview

When we first started this project, we were not building the full processor all at once. Each lab focused on a different part of the system. We started by learning and applying SystemVerilog concepts, then moved into designing the ALU, creating memory, integrating datapaths, building the instruction fetch process, and finally completing the control unit for the full processor.

By the end of the project, the processor included an accumulator, instruction register, program counter, memory, ALU, datapath logic, and a finite-state-machine control unit. The processor used a custom instruction set with load, store, arithmetic, logic, shift, and jump instructions. We tested the design in simulation and prepared it for demonstration on a Cyclone V FPGA board.

The main challenge was making sure each part of the processor worked together correctly. Since memory reads required multiple clock cycles, the control unit had to sequence each step carefully. A small timing mistake could cause the processor to load the wrong value, increment the program counter at the wrong time, or execute an instruction incorrectly.


Tools and Skills Used

SystemVerilog FPGA Design Digital Logic Processor Design Quartus Prime ModelSim / Questa Finite-State Machines Hardware Debugging

What I Worked On

For this project, I worked through the major sections needed to build the processor. This included writing and testing SystemVerilog modules, connecting registers and memory, designing the ALU behavior, and understanding how the control unit drives the rest of the processor. I also used simulation waveforms to verify that the processor was moving through the correct states and producing the expected results.

A major part of the project was learning how to debug hardware designs. Unlike normal software, the issue was not always obvious from the code alone. I had to check timing, control signals, register values, memory output, and instruction flow to understand what the processor was doing at each clock cycle.



Processor Features


Project Accomplishments


What I Learned

This project helped me understand processor design in a much more practical way. Before working through these labs, it was easy to think of a processor as one large complicated system. Breaking it down into smaller parts made it easier to understand how each piece contributes to the final design.

I learned how important timing is in digital hardware, especially when memory, registers, and control signals all depend on the clock. I also learned how useful simulation waveforms are for debugging because they let me see exactly what each signal is doing during each step of instruction fetch and execution.

Overall, this project gave me hands-on experience with FPGA development, SystemVerilog, digital design, and hardware-level debugging. It also gave me a better appreciation for the connection between low-level hardware and the software instructions that run on top of it.


Back to Projects