16-bit CPU Design


In this project we designed a processor capable of running 16 unique instructions. The overall design can be broken up into two major components, the Datapath, and the Control Signals.

Every instruction would be controlled using a 16-bit signal that contained the Opcode, registers used, and all the other data needed to run the instruction. There was a Timer and a Program Status Word which were both capable of creating exceptions, the handling of which will be detailed in the Exception Handling section of our report.

Components of the Data-path were essentially standard Logisim components such as the Program Counter, the Instruction Memory input, the ALU, and the Data memory. For us, it was just a matter of getting each of these components working together properly. We did this by first using arbitrarily named and created push buttons. This allowed us to manually run through each instruction and count the CPU cycles each instruction took to execute, which could then be used to help us design all of the necessary Control Signals.

Once the Datapath was working, we began to take each of our push buttons and replaced them with gate-level circuitry so that the CPU could execute the instructions on its own, rather than us manually telling each component of the Datapath what it should do. This logic became our control unit. There were a few other necessary things that needed to be added for things like Exception Handling, Decoding of the Opcode, etc.

Special thanks to our partner on this project, Zach Siefker.
This Project will be the focus of a multi-article series on CPU design.