TVE-E 18 009
Examensarbete 15 hp
Juni 2018
Understanding the fundamentals
of CPU architecture
Bachelor project in Electrical engineering
Christian alkzair
Altin Januzi
Andreas Blom
Abstract
Understanding the fundamentals of CPU architecture
Christian Alkzair, Altin Januzi, Andreas Blom
Teknisk- naturvetenskaplig fakultet
UTH-enheten Understanding how a computer or rather a CPU works can be a bit
tricky and hard to understand. We live today in a society full of
Besöksadress: computers and there are many who do not understand how a CPU works.
Ångströmlaboratoriet
Lägerhyddsvägen 1 This project is aimed to understand how a CPU works and the
Hus 4, Plan 0 architecture behind it. For this it is demonstrated the fundamental
theory behind it but also a practical computer that has been built
Postadress: from scratch. This computer can demonstrate the theory behind how the
Box 536
751 21 Uppsala CPU works and also how it communicates. This computer is 8-bit which
has it limitations but can show the fundamental theory behind how
Telefon: computers work.
018 – 471 30 03
Telefax:
018 – 471 30 00
Hemsida:
http://www.teknat.uu.se/student
Handledare: Stefanos Kaxiras
Ämnesgranskare: Ladislav Bardos
Examinator: Hana Barankova
ISSN: 1654-7616, TVE-E 18 009
Contents
1. Nomenclature 3
2. Introduction 4
2.1 Background 4
2.2 Goal 4
2.3 Limitations 4
3. Theory 5
3.1 Clock module 5
3.2 Registers 6
3.3 ALU 6
3.4 Output 7
3.5 Counter 7
3.6 RAM 7
3.7 Bus 9
4. Experimental Details 10
4.1 Designing the computer 10
4.2 Building the computer 10
Clock module 11
Registers 11
Output 12
Counter 13
RAM 13
BUS 14
4.3 Programming microcode 16
4.4 Running the code on the computer 17
5. Results 18
6. Discussion 19
6.1 Design of the computer 19
6.2 Troubleshooting 19
7. Conclusion 21
8. Reference list 22
1. Nomenclature
● CPU - Central Processing Unit
● TTL - Transistor-transistor logic, a type of integrated chip build with bipolar
transistors
● CMOS - Complementary metal-oxide-semiconductor, a type of integrated chip built
with mosfets.
● I/O - Input/Output, lines/pins on chips which output or reads data when bits has been
applied.
● EEPROM - electrically erasable programmable read-only memory
● ALU - Arithmetic logic unit, digital circuit which can input two binary numbers and
either add or subtract.
● BUS - A BUS is used for communications with all different modules in the
architecture of a computer.
1
2. Introduction
2.1 Background
Understanding the complexity of how computers works can be hard today. Society and
computers has advanced in the recent decades a lot in the digital circuits and processors that
many people don't even realise what is happening when they are sitting in front of their
phones or computers. The era of transistors and computers has been strongly growing with
each year and with each year passing by there is more people who do not understand this
technology.
2.2 Goal
The goal of this project is to show the theory behind how a simple computer work. For that
all the necessary theory will be gone through. On top of that a 8 bit computer will be built
which will show how the theory works and how that will respond in the practical case.
2.3 Limitations
The limitations of this project is time and practicality, since the complexity of the computer
rises exponentially with each new feature and the more practicality the computer has.
Building the computer takes time and by building it with TTL chips the size and cost can be
very high, as well as the potential of faults which manifests as time for troubleshooting which
has therefore been the fundamental limitation on this project.
2
3. Theory
To fully understand how a computer work it is needed to understand first the components of
which it is built of.
A processor will have
● Clock module
● Registers
● ALU
● Output
● Counter
● RAM
● Bus
3.1 Clock module
The clocks function in the computer is to cycle forward the data or instructions. The clock is
a crucial component and without the clock module the computer will simply not work or
rather not show any progress of the data. The clock module also determines how fast the
computer can execute instructions. This is most commonly measured in frequency (Hz), and
is the CPUs main engine on how fast it can execute the instructions. The clocks output will be
voltages driven outputted in pulses. These pulses will enter all the modules of the computer,
this will make the computer work with after the clock outputs a pulse.
For the simple case there is digital circuit such as the 555 Timer IC. This clock can be
regulated with only a capacitor and a resistor, the values of the chosen components will
determinate on how fast the clock will cycle.1
A clock can also be driven differently by outputting either in mono, astable and bistable
mode.
In the astable mode the clock will push out pulses without any condition. This means that
when the clock is in astable mode the computer will run continuously. More or less the clock
will be driven as a oscillator in the astable mode.
1
“555 timer tutorial”, https://www.electronics-tutorials.ws/waveforms/555_timer.html, retrived 17 may 2018.
3
For the monostable mode the clock will only output when a certain command or input has
been applied. This can be in the most easiest way be in a push button which will output a
voltage when the pushbutton is pressed.
The bistable mode works in a way that the clock module will be on when input has been
applied. This way the clock will work as a basic flip flop and will be always on until the
circuit or the clock has been reset.
Combining with OR and AND gates it is possible to cycle between the different modes with
the 555 timer.
3.2 Registers
Registers are the processors component which hold values (voltages). These registers contain
small amount of fast memory which hold values stored into them. This will make registers
unique in away that they will be part of the important instructions. Instructions such as
mathematical numbers (written in bits) can be stored in registers and then move these
numbers where they should belong.
In a common computer there are lots of registers, these registers can have different functions
of what they store but most commonly they store values which are intended to be input in
other modules which will do e.g. mathematical operations.
3.3 ALU
The ALU or Arithmetic logic unit is the computer’s mathematical processor. The ALU can
input bits from different registers and then do mathematical operations when the registers
values are input.
4
Source:https://www.allaboutcircuits.com/projects/how-to-build-your-own-discrete-4-bit-alu/
Looking at the picture above the ALU inputs usually two integers from the registers (A and
B) and then proceeded to do its operation and then output it. Limitations of the ALU is only
how big the bits of numbers are. For example on an 8-bit ALU, the ALU can only output a
maximum of 256, meaning that if the ALU gets two values which both are 256 will lead to it
only outputting 256.
Since the ALU can do mathematical operations the most common instruction it can do is
either add or subtract values, meaning that it can either do add register A value with register
B or subtract value B with A vice verse. More complex ALUs can do more complex
operations such as square root of values.2
3.4 Output
The output module of the computer consist of a register which holds a value intended for
output. In most cases the output also consist of some graphical component which can show
what kind of value the output register holds. Most commonly the output register is only used
for the computers final instructions or result and its intents is only to show what the computer
has calculated.
3.5 Counter
Using a counter or rather a program counter is crucial. The counter tells in most cases on
what the computer should begin with. It can also be used as a indicator on what stage the
computer is at. This way it is possible to use the counter as a indicator of exactly what stage
the computer is at, and also feed this information along for longer program chains.
3.6 RAM
The RAM or Random Access Memory is the computer's main storage of programs. There is
two kinds of memory, static and dynamic RAM. Static RAM uses flip-flops to store the data
while dynamic stores the data in a capacitor combined with other digital circuit. This will
2
Jerald A Brown. Albert P Malvino, “Digital computer electronic”, nr 3, 1999, p 79-90.
5
make the static memory lose its data when it loses power while the dynamic memory can still
hold data.3
For simple projects static RAM is usually used since its faster, easier and more reliable than
dynamic memory but can store less values and costs more. Static RAM stores data in its I/O
and this data can be accessed or output when the RAM receives data (integer) in its address
lines. The address lines is in a sense the rams locator of where the data is being stored. This
will make the RAM versatile that it can store values up depending on how big the address is.
But the memory has also limitations that it cannot store bits bigger than what it is designed
for.
Ram chips have both read and write functions. When in write mode the RAM will store the
data in the I/O pins to the selected address line while in read function the RAM will output
the data in the I/O lines from the selected address lines.
Source: https://www.allsyllabus.com/aj/note/ECE/Digital_System_Design_Using_VHDL/Unit8/index.php
In this picture the inputs which are shown are the address, CS (Chip enable), OE (Output
enable) and WE (Write enable).
Assuming an easy example of 2 bit RAM, when applying voltage for example to the write
enable pin will make the data from the I/O stored in the selected bit of the address, likewise is
on the output enable which will read the the selected address data and output it in the I/O.
The chip enable pin will activate the ram for usage. This way the enable pin can assure lower
power consumption when the data in the ram is not used.
3
Sergei Skorobogatov (June 2002). "Low temperature data remanence in static RAM". University of
Cambridge, Computer Laboratory. Retrieved 17 may 2018.
6
By having two different modes of the chip (WE and OE) there has to be some kind of
external input such as switch buttons and data enabling pins. Using a switch can make the
ram be in either “run” mode or “write” mode and using a data enabling pins can input values
to the ram when in run mode.
3.7 Bus
The bus of the computer is used for communications. This means that all of the computers
modules can output to the bus but also input from the bus. Without the bus there is no way for
the computer to work since without the communications the different modules can't show
what they are outputting or inputting. The bus is usually located in the center of all the
components, this way communication is assured to be closest to all the different components.
By an easy example it is easier to understand how the bus works. E.g. the program counter
outputs a zero, this zero can then be then output to the bus in which depending on the
program allow this zero to enter different modules. Usually this will enter the RAM’s address
which will let the ram output the data stored in the zero address line.
7
4. Experimental Details
4.1 Designing the computer
An architectural design of the computer was the first needed, where the fundamental layout of
the computer could be planned. Here, the final limitations of the scope of the project had
already been considered, since any change to the architecture of the computer at a later stage
would have implications on other parts of the computer. The underlying reason for building
the computer was not to try to build the most effective or practical computer, since that has
already been done before very effectively. But rather to showcase the essential principle of a
computer. Therefore a 8-bit computer design was used, where the step by step function of the
computer was visually available and paramount, rather than any practical functionality. Also,
the computer was chosen to be built with TTL chips on breadboards as to make the computer
easy to experiment on and also the benefit of being modular.
4.2 Building the computer
The building process of the computer consisted of building and testing of the 8 integral parts
of the computer before finally assembling everything together with final testing. The key 8
parts consisted of
● Clock module
● Registers
● ALU
● Output
● Counter
● RAM
● Bus
All of which was built as its own circuit and tested before implemented. As mentioned the
different parts were built with TTL chips and LEDs were added at key points to make the
flow of information visible.
8
Clock module
Building the clock module it was decided to go with the most used clock component, the 555
timer IC. The 555 timer is easy to use and is very simple timer IC and has three different
modes of how to clock.
Combining the timer with some regular digital circuits such as OR and AND gates it was
possible to switch to the three different modes (mono, bi and astable).
Figure 1: The clock circuit
Registers
For the registers we chose the 74LS173 which is an 4 bit D-type register, combining 2 of
them made it possible to have an 8 bit register. Thes chips were all used on the three registers,
although only the instruction register should output its four bits but should receive 8 bits of
data. This is needed since the address on the ram can only take in four bits.
Figure 2: The instruction register, as seen with the two 74LS173 chips
9
ALU
For the ALU we chose 74LS283 chips which are 4 bit address full adders. Although to make
it possible to subtract XOR gates were used to make that functionality possible.
Figure 3: The ALU with the two 74LS283 chips and XOR gates
Output
For the output we chose a 7 segment display and combining it with a EEPROM. The
EEPROM is flashed with the necessary data so that the display can output the correct
number/data. To choose the right data from the EEPROM, 2-4 line decoder (two 1-4 decoders
in series) is used to choose the right data from the EEPROM. To get a any three digit number
in the display a 555 timer IC is needed. This clock IC is needed to output e.g. 120 in a way
that it output first 1, 2 and then 0. This is done in such a way that the clock cycles through a 2
bit address that is connected to address line 9 and 10 on the EEPROM and the digits of the
numbers is output in succession to the display, which only displays one digit for each clock
cycle.
Figure 4: The output display with EEPROM and clock
10
Counter
For the program counter a regular 4 bit counter chip, the 74LS161 chip is used. The program
counter also has a jump and count enable feature that is directly controllable through
programming..
Figure 5: The program counter with the 74LS161 chip
RAM
The ram module we chose the 28c64 chip which is a 64 Kbit static RAM chip. This chip can
store 8192 words per 8-bit, which is redundant for this computer. Building the computer with
a RAM with much lower storage is possible but since it is harder to get a chip which can
store less data we went with the 28c64 chip. Since the chip is capable to output 40 mA per
pin it is very important to put some resistors on the LEDs. To program any data on the chip
one 8-dip switch and one 4-dip switch is needed. The 8 dip switch is needed to store the data
and the 4-dip switch is needed to select the correct address. Since only the first 4 address
lines were needed, the rest was tied low and was disregarded for the sake of simplicity. To be
able to switch between the program mode and run mode we used 2-1 data selectors.
Since the address will take data from the bus it is necessary to use a 4 bit register. This
register purpose is to take instructions from the bus on what address it should read from.
11
Figure 6: The 28c64 RAM chip and circuitry for switching
between run and programming mode
BUS
To build an 8 bit bus there has to be 8 separate lines, to build this we took parts of some
breadboards and lined them together. Since the bus takes care of the communication of the
different modules all the modules which do communicate has to be equipped with an octal
bus receiver (74LS245). The octal bus receiver can either send data or take data from the bus.
The modules which need this component is the RAM, Program counter, A and B register and
the instruction register
12
Figure 7: The whole computer after final assembly
13
4.3 Programming microcode
When the final product was constructed the control signals for the various parts were fed into
two 8-bit EEPROMs. This was done so that the machine language could be programmed in
the memory addresses of the EEPROM in the form of what is called an opcode. The opcode
is the direct translation of the microinstruction to be performed by computer, in the form of a
binary address. In a sense the EEPROMs are used to turn machine code into binary code.
The machine language instructions that were programmed were
ADD - ADD is the addition function of the computer, makes the machine output from the
RAM and put the data on B register and then gets added in the ALU which leads to A + B.
SUB - SUB is the subtraction function of the computer, makes the computer output from the
RAM and put the data on B register and runs the subtract command of the ALU which leads
to A - B.
LDA - LDA is the Load Data from the Address function. This code makes the RAMs address
take data from the Instruction register and then loads it into the Address register. The data
then is sent to the A register.
OUT - OUT is the function which outputs the value from the A register and then inserts the
data to the output register.
HLT - The HLT function is the halt command, this stops the computer and makes it not
possible to clock further.
To illustrate further and make it more understandable of these functions we will make a
program. The easiest is to make a program which adds two values together and then outputs it
and at last halts the computer. This code will load data stored in address number 14, then add
the value stored in address 15, output the result and at last halt the computer.
LDA 14
ADD 15
OUT
HLT
The user can then go to programming mode and put their own values in address line 14 and
15.
14
4.4 Running the code on the computer
To better understand how the computer run our code a block diagram is made with four steps
showing how each of the functions running.
Every module starts at 0, our logic works by sending 0 from the program counter (Arrow 1:
PC) to the address which then fetch the first instruction (LDA). This instruction is then sent
from the ram to the instruction register (Arrow 2: IC). Since the instruction register can only
send out its four bits those return back to the address to retrieve the stored data from the ram
(Arrow 3). The address fetches from the data of the instruction register and then output that
data to the A register (Arrow 4:A).
15
5. Results
The result of building the 8-bit computer is that we succeed with building it. Although
troubleshooting the computer took longer than building it. Much of the issues resided of low
understanding in the area of building on breadboards. Building a computer on bad
breadboards will lead to lots of issues, issues which can result in bugs in the program the
computer is to execute. These bugs include sometimes clocking twice on one pulse making
the computer just run and output wrong data. Also, the consequences of having a lot of LEDs
was the stress they put on the digital TTL-chips, resulting in low voltage over the whole
computer. To counter this optimal placement of the power supply and was tested and several
capacitors were added.
All these issues gave us an understanding and knowledge to why digital circuits can fail or do
something unpredicted.
Architecture wise the computer has made us understand how a computer or CPU works, how
everything can communicate and how each module work and why each module is vital.
16
6. Discussion
6.1 Design of the computer
The architectural design of the computer made in the start of the project had large
implications on the whole project. Since the main goal of the project was not to necessarily
build an 8-bit computer, but to design and showcase the fundamentals of a basic computer,
many different design choices could have been made. For instance, a 4-bit computer working
on the same principles could have been constructed instead. Although this would compromise
some of the different possible functions of the computer, since this was not the goal of the
computer it is still worth mentioning.
The computer was divided into 8 parts where every part was built as its own separate circuit.
Although this allowed for thorough testing of each component and a modular design as a
whole, the downside was the inevitable increased size of the computer. This lead to more
time and effort being put on cable management of the computer to ensure that the integrity of
the easy to follow and modular design aspect be kept. More emphasis on this part of the
project was put in later stages when the benefits would become clearer, and a lot of troubles
could have been avoided if this part of the design aspect would have been attended to.
6.2 Troubleshooting
Most of the time spent on the project was spent on troubleshooting. This was not entirely
unexpected, considering the scope of the project, but many of the problems encountered
could have been easily avoided. Firstly, as mentioned earlier, good cable management and
layout is essential to avoid later troubleshooting, as loose or misplaced cables could be hard
to spot when the final product is put together.
The type and specifications of all components used needs also to be considered, since
although the parts of the computer may have been working individually, several bugs were
encountered when they were assembled together. This in part because of fluctuations in the
supply voltage and current delivered. The supply drop over the whole computer was credited
with several bugs encountered throughout testing, and could be because of the various
integrated circuits having to push more current than nominal, in part because of the LEDs,
and thus lowering the voltage of the source and putting other integrated circuits outside
17
nominal voltage. Also, the breadboards used in the project gave rise to several bugs, because
of the poor quality making them either draw a lot of current, but also with cables and
components not connecting properly. More considerations for a stable supply by e.g.
reducing the number of integrated circuits, and also buying better quality products, from
cables and chips to tools for assembly, could have saved a lot of time troubleshooting.
18
7. Conclusion
The project has been very helpful for understanding several of the fundamental aspects that
define how a computer works, and a working experimental computer was also successfully
built. With the fast pace of computer development this project gave an effective introduction
to this vast field. Considerations for the future should be to invest in proper equipment, as to
not let faulty equipment deduct time from the learning process by the additional time for
troubleshooting. Lastly, further study into the field is also recommended as this seems
necessary to keep in pace with the fast development process of the computer science field.
19
8. Reference list
1. “555 timer tutorial”, https://www.electronics-tutorials.ws/waveforms/555_timer.html,
retrived 17 may 2018.
2. Jerald A Brown. Albert P Malvino, “Digital computer electronic”, nr 3, 1999.
3. Sergei Skorobogatov (June 2002). "Low temperature data remanence in static RAM".
University of Cambridge, Computer Laboratory. Retrieved 17 may 2018.
20