Computer Architecture
Instructor :
Classes |
Room or Zoom |
Schedule |
Monday |
|
8:15am -- 9:30am |
Wednesday |
|
8:15am -- 9:30am |
Thursday |
|
8:15am -- 9:30am |
Office Hours |
Room or Zoom |
Time |
Monday |
|
Thursday |
|
Teaching Assistant :
Tutoring sessions |
Time |
Tuesday (zoom meeting) |
9:30am -- 11:30am |
Thursday (S745) |
9:30am -- 11:30am |
Course description :
The main ambition of this course is to teach how a modern computer works,
starting from its most elementary components (transistors, resistors, capacitors)
and then climbing up the ladder of abstraction to reach
a high-level programming language like C and its compilation in machine code.
In this excursion, we will learn (among other things)
how to turn electrons into digital logic,
how to make machine instructions execute faster through pipelining and prediction,
and how to organize memory in hierarchies in order to make it more efficient.
Since the only way to learn computer architecture is by practicing it, we will design
a register transfer level (RTL) implementation of a MIPS-like processor in Verilog,
and implement a simulator of the very same architecture in C.
Prerequisite :
Introduction to Computer Science
Textbooks :
-
Harris and Harris : Digital Design and Computer Architecture, second edition (Morgan Kaufmann, 2013)
-
Kernighan and Ritchie : The C programming language (second edition, 1988)
Course schedule :
Here follows a preliminary plan of the course, which may be marginally altered during the semester depending on the pedagogical needs.
-
General introduction to the course [slides]
-
Dataflow and parallelism [slides]
-
Number systems [slides]
-
Programming in C: basic types and control flow [slides]
-
Programming in C: arrays, strings and functions [slides]
-
Programming in C: pointers, structures and unions [slides]
-
Programming in C: explicit allocation and linked lists [slides]
-
Programming in C: the Unix System interface [slides]
-
Boolean logic and Karnaugh maps [slides]
-
Latches and flip-flops [slides]
-
Finite state machines [slides]
-
The Arithmetic Logical Unit [slides]
-
Programming and compiling in MIPS [slides]
-
Single-cycle microarchitectures [slides]
-
Multi-cycle microarchitectures [slides]
-
Pipelining and dependence hazards [slides]
A more precise syllabus including a schedule in time and detailed bibliographical reference for each lecture appears in this
page.
Extra material for understanding the recitations (not official part of the course)
Homeworks:
You are welcome to visit this page if you want to know more about the weekly homeworks (and lab assignments) of the course.
Installations
You will find here some information about how to install and/or have access to CircuitLab, Unix, Visual 6502 and other applications used in the course.
Grading:
-
10% Participation
-
10% Quizzes
-
30% Homeworks
There will be a series of assignments HWi (for i=0 to n) during the semester.
Besides the expected pencil and paper exercises, several of these assignments will include a significant amount of lab work, using either the schematic editor and simulator CircuitLab, the programming language C or the MIPS assembly language.
Some of these homeworks HWi will be complemented by an oral examination.
-
25% mid-term
-
25% final exam
A series of wonderful books which I would recommend to any enthusiastic student:
-
Hill, Jouppi and Sohi: Readings in Computer Architecture (Morgan Kaufmann, 2000)
-
Herlihy and Shahit : The Art of Multiprocessor Programming (Morgan Kaufmann, 2008)
-
Jaeger and Blalock : Microelectronic Circuit Design, fourth edition (McGraw Hill, 2011)
-
Maxfield : Bebop to the boolean boogie, third edition (Newnes, 2009).
Additional elements :
I will indicate for each lecture a number of historical or bibliographical references which I find relevant to the topic developed in the classroom.
These extra references will be found on this dedicated page.