Course Description
This unit introduces the foundational concepts, methodologies, and techniques of computer systems and hardware. It focuses on the essential elements of how computers operate, covering topics such as logic design, state machines, assembly-level representation, parallelisation, and performance evaluation. Students will explore system design both theoretically and practically, enhancing their understanding by implementing their own designs and critically analysing existing systems. By the end of the unit, students will have developed a deeper understanding of the different components of computer systems, and how they interact to perform information processing.
Course Objectives
This unit introduces the foundational concepts, methodologies, and techniques of computer systems and hardware. It focuses on the essential elements of how computers operate, covering topics such as logic design, state machines, assembly-level representation, parallelisation, and performance evaluation. Students will explore system design both theoretically and practically, enhancing their understanding by implementing their own designs and critically analysing existing systems. By the end of the unit, students will have developed a deeper understanding of the different components of computer systems, and how they interact to perform information processing.
Key Topics
- LO1: Understand the architecture and key components of computer systems.
- LO2: Understand the types and functions of memory in computing systems.
- LO3: Be able to design and implement simple state machines.
- LO4: Understand the fundamentals of logic circuits and gates.
- LO5: Understand the fundamentals of assembly language and how it relates to higher level programming languages.
Course Outline
| Week | Topics |
|---|
| 1 | Computer components: CPU, memory, buses, input/output devices and specialised processors |
| 2 | How components work together: the fetch-execute cycle, buses, clock speed and pipelining |
| 3 | Memory: the Von Neumann model, registers, cache, RAM and ROM, HDD and SSD |
| 4 | Principles of state machines: finite state machines, Mealy and Moore models, state diagrams for scenarios such as vending and washing machines |
| 5 | Implementing state machines in Python and Verilog |
| 6 | Information representation: binary, decimal and hexadecimal; logic operators |
| 7 | Logic gates and circuits: transistors as switches, half-adders and adders |
| Midterm | Midterm evaluation |
| 9 | Machine code, assembly and high-level languages: abstraction and its trade-offs |
| 10 | Assembly instruction sets compared: ARM, MIPS, x86, x86-64, PowerPC and RISC-V |
| 11 | Programming in ARM assembly: essential instructions, control flow (loops, jumps, branches) and arithmetic routines in an emulator |
| 12 | Applying Principles of Computer Systems in practice: case studies |
| 13 | Assignment workshop: research, planning and referencing |
| 14 | Assignment workshop: drafting, feedback and improvement |
| 15 | Review and coursework completion |
| Final | Final assessment and submission |
Learning Outcomes
- LO1 Understand the architecture and key components of computer systems.
- 1.1 Describe the key hardware components of a computer system and their functions.
- 1.2 Explain how data is processed and transferred within a computer.
- 1.3 Explain how different components interact to improve system performance.
- 1.4 Evaluate the benefits and impact of parallel processing on computing performance.
- LO2 Understand the types and functions of memory in computing systems.
- 2.1 Describe the Von Neumann computing paradigm.
- 2.2 Compare the different forms of memory that computers use and their roles (primary, cache, and secondary).
- 2.3 Analyse the impact of processor-memory separation on computing performance.
- 2.4 Evaluate the difference between volatile and non-volatile memory in different computing contexts.
- LO3 Be able to design and implement simple state machines.
- 3.1 Describe the principles of state machines and their role in computer systems.
- 3.2 Design state diagrams for a range of processing scenarios.
- 3.3 Implement basic state machines using programming languages and/or logic design tools.
- 3.4 Critically evaluate the performance of state machines and propose improvements.
- LO4 Understand the fundamentals of logic circuits and gates.
- 4.1 Describe the representation of information in binary in computer systems.
- 4.2 Explain the common types of logic operation and corresponding logic gates.
- 4.3 Explain how logical operations are implemented using transistors in electronic circuits.
- 4.4 Explain how complex arithmetic operations can be built up from basic logic.
- 4.5 Implement basic arithmetic operations using logic gates.
- LO5 Understand the fundamentals of assembly language and how it relates to higher level programming languages.
- 5.1 Describe the role of assembly language in performing low-level computer operations.
- 5.2 Explain the different assembly languages that exist and evaluate their differences.
- 5.3 Analyse how higher-level programming languages are abstracted from lower-level languages and the benefits of doing so.
- 5.4 Implement basic routines in ARM assembly language.