Design and implementation of a broken CPU


The participants of the CCOM 4086 Computer Architecture I course, Spring semester, 2011:


In the Spring semester 2011 Humberto Ortiz-Zuazaga taught Computer Architecture I, and asked the students to work on implementing an 8 bit CPU in Logisim. My specification was broken, so the student's implementation had no hope of working.

I'm making the specifications and the student's designs available, in the hope that we can learn from my mistakes. What we should have done is to make a slightly larger CPU. I gave a design for a 16-bit CPU in my 2004 Computer Architecture course, which we should have used instead of the 8-bit CPU. The specification is described in this final exam. I have also started a page describing the 16 bit CPU.


The idea is to build a simple CPU up from logic gates. I asked students to use only and gates, or gates or inverters. I used RAM for the program memory, but we built everything else up.

The CPU will execute 8-bit instructions.

With 4 registers we can let 2 bits represent the rs and rt registers, rd is always r0 and have 3 bits for the op:

000 add
001 sub
010 and
011 or
100 lw
101 sw
110 bz
111 addi

We initially said one bit is reserved for future use, but it didn't last very long. We soon discovered we needed opcodes for mov and ldhi.


The design is a simplified version of the MIPS design presented in the textbook David A Patterson, John L Hennessy, Computer Organization and Design, Fourth Edition: The Hardware/Software Interface, 2009. ISBN 978-0-12-374493-7

A register file with 4 8-bit registers feeds into a simple ALU. We use multiplexers, decoders and demultiplexers to select the registers for the ALU to process. A control table drives the components based on the instruction to be executed.

Here are documents describing the design of each component:


I think these circuits implement most of the CPU as described. I haven't figured out logisim completely, there must be a simpler way of packaging these circuits up and integrating them.


This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see

Troglodita approved!

Humberto Ortiz Zuazaga

Most recent change: 2012/11/1 at 09:44
Generated with GTML