Introduction to the fundamentals and design of computer systems. Topics covered include computer instruction sets, assembly language programming, arithmetic circuits, CPU design (data path and control, pipelining), performance evaluation, memory devices, memory systems including caching and virtual memory, and I/O. Project using design automation tools.
This course introduces students of the organization of modern computing systems. Upon successful completion of this course,
students will be able to:
- understand the relationship between hardware and software specifically how machine organization impacts the efficiency of applications written in a high-level language;
- make use of the binary number system to translate values between the binary and decimal number systems, to perform basic arithmetic operations (i.e. addition, subtraction, multiplication, and division) and to construct machine code instructions;
- design and implement solutions for basic programs using assembly language with a focus on data storage, selection and repetition constructs, subprograms, and array allocation and processing;
- explain the fetch-execute cycle performed by the CPU and how the various components of the data path are used in this process;
- implement memory mapped I/O programming and exception/interrupt handling.
D. A. Patterson and J. L. Hennessy, Computer Organization and Design RISC-V Edition: The Hardware/Software Interface. Morgan Kaufmann, 1st edition, 2017. (Required)
Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, 2nd Edition, Prentice Hall PTR
(Soft copy HERE)
Bryant and O'Hallaron, Computer Systems: A Programmer's Perspective, 3rd Edition, Pearson. (Recommended)
The discussion sessions are run by the TAs and serve two purposes: a pre-lab and/or an
extension of the lectures. Attendance is not required, but it is strongly recommended.
Term Office Hours
- Prof. Kinsy: PHO 335 - Mondays 1:00pm - 2:00pm and Wednesdays 1:00pm - 2:00pm and by appointment.