Figure 1: the SimpleCPU processor
Welcome to the world of tomorrow (Link), the past and the present of computer architectures, with a small sprinkling of flashing LEDs. All good computers have to have banks of flashing lights. This web site was inspired by an article by Alan Clements (Link), in this he discusses the pressures faced in teaching computer architectures. After teaching this topic for about 20 years i also came to the same conclusions, although being an electronic engineer i still embrace the power of ICs, wires and LEDs as teaching tools :). Therefore, to hopefully support computer architectures teaching i have created the resources below.
For those who have not taught computer architectures before this may seem an outdated, or redundant topic i.e. why do students need to know what happens inside a CPU, very few students will go on design one? To me this way of thinking highlights the misunderstanding of the purpose of teaching computer architectures. To steal a quote from Alan:
"Computer architecture is awash with concepts that are fundamental to computer science generally and which do not appear in other parts of the undergraduate curriculum. A course in computer architecture can provide a suitable forum for incorporating fundamental principles in the CS curriculum."
Computer architectures for me was never really about hardware design (although its the bit i enjoy the most), its about understanding the complete system, software and hardware. How the software we write is translated into results we can use. I'm a great believer in that you don't truly understand something until you can build it yourself and use it to solve a real world problem. To often i find students that are taught computer science at A-level know the words, but have not had the opportunity of apply this knowledge, therefore, have not had the chance to make those all important final steps to upstanding what the words really mean. Therefore, i designed the SimpleCPU architecture. Over a series of labs students design and implement this architecture using Xilinx's ISE schematic tools, so that you see the wires, not HDL :), configure FPGA boards and program these systems using assembler and macros to solve image processing problems e.g. find Bob the Bug, shown below.
Figure 2 : Bob
To me this is how computer architectures should be taught, a journey from being to end, no hidden details, just simple fundamental computer science, that hopefully everyone can understand. To conclude, i'm not saying that every student has to be able to understand Intels latest and greatest beasts (architectures) to use them, but if you don't have a basic understanding of how data is represented, or how instructions are processed, very strange things can happen when you try to run your code. At best it may just take a little longer to execute, at worst it can take down the whole machine.
What can i say, the Hacker News summary video of what i am trying to do is on the money (Link), I couldn't have phrased it better myself, so i not going to try :).
Figure 3 : Hacker News summary video
Number representations
- Difference Engine 0.5: work in progress, my implementation of Babbage's Difference engine.
- Difference Engine 9000: your next generation Babbage Difference engine.
Boolean Logic
- Relay Computer: switch logic, logic gates from relays
- Bug Trap version 1: logic tutor, basic logic gates and flip-flops
- Bug Trap version 2: new, improved and optimised ...
- Robot cockroach: designing a brain - a digital logic subsumption architecture
- Robot cockroach version 2: all new and improved, well i added micro-switches :)
A Simple CPU
Below are a series of blog type discussions on the development of the SimpleCPU processor, their aim is to give an insight into the design decisions made when implementing these machines. To often when discussing computer architectures we use adjectives such as complex, simple e.g. CISC (Link) and RISC (Link). I've grownup with this machine evolution, programmed them and designed a few, so i can place these words into a software and hardware context. For people new to this topic these are just words. What is simple? What is complex? How do you measure/compare these design philosophies? To me this disconnect is a problem. Therefore, being an engineer the only valid solution to teach people these ideas is: build it. In the past building your own processor was a little on the tricky side, but with the advent of programmable logic devices it now a possibility. I hope the source files and discussions below will be the starting point for people wanting to design their own processors and machine languages. These are not intended to be a complete set of notes on computer architectures, rather an introduction to this topic through the implementation of this processor in either SPLD or FPGA devices. A starting point, a foot on the road to CPU design, hopefully highlighting questions about computer architectures people have not considered before. Have fun and don't under estimate he power of the flashing LED, there is nothing more satisfying than convincing a processor to do what you tell it to :).
- MinimalCPU: for when a SimpleCPU is just tooooooooo complex :)
- Xilinx ISE: the software used to design, implement, simulate and test the simpleCPU.
- SimpleCPU Simulators: a set of simple instruction-set simulators for the SimpleCPUs.
- SimpleCPU Software Suite: the latest copies of the minimalCPU / simpleCPU assemblers and simulators.
- SimpleCPU version 1: trust me CPUs are simple: a simple 8bit RISCy CPU
- SimpleCPU versions 1a/b/c: new, improved and optimised ...
- SimpleCPU version 1a - back to basics: implementing a simulator in CPUSim
- SimpleCPU version 1a - bread boarded: simpleCPU v1a implemented on bread board
- SimpleCPU version 1a - python assembler: you can only write so much machine code before you write an assembler :)
- SimpleCPU version 1a - fpga: simpleCPU v1a implemented on FPGA (redrawn)
- SimpleCPU version 1a - Logisim: simpleCPU v1a implemented in Logisim, the free digital electronics simulator.
- SimpleCPU version 1a - HDL : an VHDL and Verilog implementation of the simpleCPU_v1a.
- SimpleCPU version 1a - serial IO : an updated hello-world bit-banged serial IO example.
- SimpleCPU version 1a - TTL: simpleCPU v1a implemented in TTL.
- SimpleCPU version 1a - datasheet: a quick reference guide of its architecture and instruction set.
- SimpleCPU version 1a1 - fpga: simpleCPU v1a1 how to add new instructions.
- SimpleCPU version 1d - fpga: an improved simpleCPU, more memory, more instructions, more addressing modes.
- SimpleCPU version 1d - images: what do you need from your HW / SW to process an image?
- SimpleCPU version 1d - pong: the beginning, turning the SimpleCPU into a games console.
- SimpleCPU version 1d - snake: a PS2 keyboard interface upgrade and a snake game.
- SimpleCPU version 1d - datasheet: a quick reference guide of its architecture and instruction set.
- SimpleCPU version 1d1 - interrupts: improving functionality, adding interrupt support
- SimpleCPU version 1d1 - clock: how to implement an interrupt driven clock
- SimpleCPU version 1d - space invaders: finally, getting closer to building a games console :)
- SimpleCPU version 1d - game of life: the classic zero player game
- SimpleCPU version 1d2 - fpga:an instruction-set expansion for the simpleCPUv1d.
- SimpleCPU version 1d2 - maths: new maths routines for the new hardware.
- SimpleCPU version 1d2 - datasheet: a quick reference guide of its architecture and instruction set.
- SimpleCPU version 1e - fpga: what changes do we need to make to support a data stack?
- SimpleCPU version 1e - datasheet: a quick reference guide of its architecture and instruction set.
- Game Controllers: to play a game you need a game controller.
- Video Game Console: version 1 of the simpleCPU games console.
- SimpleCPU version 2: trust me again CPUs are simple: a simple 8bit CISCy CPU
- SimpleCPU version 3: a simple CPU optimised for simple image processing, what could be simpler :)
- SimpleCPU version 4: a pipelined version of the SimpleCPU.
Computer Architecture Teaching Material
A mix of material from the past and present. Current computer architecture modules are titled: Systems and Devices 1 (SYS1). However, in the past we did a LOT more hardware teaching : electronics, analogue and digtial design, micro-controllers etc. These modules are no longer taught e.g. ICAR, DACS, FESC and PROM, but, i have include some of these past practicals as examples.
- Systems and Devices 1 (SYS1), a lecture series from AND gate to VHDL, discussing the evolution of the simpleCPU processor from version 1a to version 1d : Link.
- SimpleCPU Youtube Channel, a mix of videos, processors and other stuff : Link.
- Reflections on the simpleCPU processors, what i was thinking : Link.
- How to program the SimpleCPU Games Console : Link.
- Systems and Devices 1 (SYS1), the first bug trap lab, building simple hardwired controllers: Lab.
- Introduction to Computer Architectures (ICAR) HW Lab 02, the original bug trap lab based on 7400 TTL logic, what we used to teach before FPGAs: Lab, Answers.
- Introduction to Computer Architectures (ICAR) HW Lab 04, designing a very simple state machine: Lab, Answers.
- Introduction to Computer Architectures (ICAR) PicoBlaze Lab 12, looking at Flynn's taxonomy : Lab, Answers.
- Introduction to Computer Architectures (ICAR) VAX Lab 13, comparison of RISC and CISC instruction-sets : Lab, Answers.
- Foundations of Electronics, Signals and Circuits (FESC) TTL full adder lab 07, building and testing simple circuits on breadboards: Lab, Answers, Files.
- Digital Circuit Design (DCD) logic probe lab 06, designing and testing circuits in SPICE, then building on Veroboard : Lab, Answers, Files.
- Programming of Mico-controllers (PROM) lab 01, using a Raspberry Pi (version 1b) to control stuff, GPIO and I2C : Lab.
Networking
In addition to teaching an introductory module on basic computer architectures i now also teach an introductory module on basic networking, starting to forgot what my specialism is :). As always the only way to understand anything is to build it, get hand on experience of "real" networks, well as real as i can make them given security considerations. This module is designed around a collection of different Raspberry Pi based systems, giving students the opportunity to get hands on experience of designing and building actual networks, and the real world joys that come with networking :). Confess, when i think about networking i'm always reminded of an old nursery rhyme, to paraphrase: when it is good, its very, very good, but when it is bad it is horrid. Tracking down network faults are an adventure into the world of "but it should work", a multidimensional puzzle, but very rewarding when the pieces fall into place and it just works. Below are a series of blog type discussions on the development of this hardware, as with the SimpleCPU their aim is give an insight into the design decisions made when implementing these machines. Supporting these web pages are a series of related videos on my Youtube channel, links below.
- Systems and Devices 2 (SYS2), a lecture series discussing the joys of networking : Link.
- Systems and Devices 2 (SYS2), a practical series to support the lecture series, doing is learning :) : Link.
- Networking - Introducing the hardware: an overview the hardware used in this module.
- Networking - Base node: a mini Raspberry Pi cluster
- Networking - Time Server: a GPS NTP timer server
- Networking - Name server: a DNS name server
- Networking - 1U rack: a small Raspbery Pi cluster: mail and compute servers
- Networking - File Server : an FTP, SFTP, SCP and HTTP file server
- Networking - Ping node: something that goes beep in the night
- Networking - Sensor node: temperature, humidity and pressure sensor nodes
- Networking - New Servers: upgrading lab servers - when only quality e-waste will do :)
- Networking - Parallel Processing: what can you do with 240 Raspberry Pi?
- Networking - Play-pen: hmmmm, what to do with a pile of old networking kit?
Major Updates
UPDATE: 03/05/2026 simpleCPUv1d2 "final" ISA changes :)
UPDATE: 03/01/2026 simpleCPUv1d2 and maths routines
UPDATE: 12/12/2025 network playpen
UPDATE: 27/06/2025 added new GUI based minimalCPU and simpleCPU assembler and simulator software
UPDATE: 15/03/2025 added HDL versions of the simpleCPUv1a, VHDL and Verilog
UPDATE: 02/02/2025 And we are back, exceeded my bandwidth quota last month :(
UPDATE: 04/01/2025 PS2 keyboard interface, snake game and games console updates.
UPDATE: 24/08/2024 adding new networking lectures
UPDATE: 22/05/2024 adding new networking section
UPDATE: 26/02/2024 a general update, mostly on the assembler, simpleCPUv1a1, processor datasheets and the simpleCPU_v1e.
UPDATE: 14/02/2024 we were down, now we are back up again, sorry :(.
UPDATE: 01/01/2023 started work on a pipelined version of the SimplCPU.
UPDATE: 13/09/2022 TTL computer. Started to implement a TTL version of the SimpleCPU, however, where i work have "issues" with me using a soldering iron, so work on hold, sometimes i'm lost for words :(
UPDATE: 29/05/2022 SNES controller interface
UPDATE: 23/05/2022 added game of life
UPDATE: 12/04/2022 added a work in progress, space invaders
UPDATE: 27/11/2021 its been a while, joys of Covid, added a new simpleCPU_v1a hello-world example
Contact email: mike@simplecpudesign.com


