Systems 1: Hardware Architecture and Design—From circuits to machine code
Professor | Dr K Darcy Otto |
Title | Systems 1: Hardware Architecture and Design |
Code | CS 2114 |
Credits | 4 |
Term | Spring 2024 |
Times | M/Th 10–11:50 |
Location | Dickinson 148 |
Delivery | Fully in-person |
Contact | |
Office Hours | M/Th 3:30–4:30 (or by appointment) |
Have you ever wondered what a computer is and how it actually works? In this course, we’ll answer the hardware half of this question. In Systems 2 next term, we’ll answer the software half.
Working from the ground up, we will start with basic circuits and develop elementary logic gates. Taking these gates as our building blocks, we will construct the core components of a modern computer: the central processing unit, registers, and memory chips. We will then follow the principles of modern hardware architecture to integrate these components into a general-purpose computer. Our journey will culminate in using machine code to control the computer we have designed.
By the end of this course, you will understand what a computer is and how it actually works, from the perspective of hardware. You will be able to explain how to go from basic circuits, to a working machine that responds to code you write. You will also have completed the prerequisite for Systems 2, which explores the software architecture and design of a modern computer.
No previous experience in Computer Science is necessary to take this course, and you do not need any familiarity with programming. However, your learning will be well-supported by experience in a course that emphasizes symbolic thinking. You are encouraged to have completed (or be simultaneously enrolled in) a Computer Science or Mathematics course; but this is not a requirement for Systems 1.
Topics include: electronic circuits, combinatorial logic, sequential logic, chip design, hardware architecture, machine code, assembly language.
An overarching objective of this course is to help you develop as a student of the liberal arts. True students of the liberal arts are able to reflect on the context in which they live, and reason about what it means to live a meaningful and happy life. Thus, they are able to be more than just children of their own time. But this means we must be willing to put our ideas to the test, see our own errors, and develop intellectual courage and humility. It also helps not to take ourselves too seriously.
Exercises and Writing | 30% | Portfolio |
Final Project | 30% | Subject to approval |
Oral Examination | 40% | Comprehensive |
Exercises and Writing: Short exercises and writing assignments will be given in coördination with the current topic, and comprise your portfolio. All written submissions should be submitted as PDF, with program code attached as appropriate. Please put your last name and assignment number in the filenames, as well as in the text of the file.
Final Project: You will propose and complete a group project in coördination with the professor. A proposal must be approved in order to submit your final project. See below for details about possible projects.
Oral Examination: The examination is comprehensive and will be a series of oral questions, related to the topics covered in the course.
Portfolio Assignment #1 is due on Monday, March 25. In preparation to submit your portfolio, please submit (in groups of two) the following exercises:
Fill out the Portfolio Cover Sheet for Assignment #1, and follow the submission instructions on that sheet.
Portfolio Assignment #2 is due on Monday, May 13. In preparation to submit your portfolio, please submit (in groups of two) the following exercises:
Fill out the Portfolio Cover Sheet for Assignment #2, and follow the submission instructions on that sheet.
Your final project is an exploration of a particular topic in computer science that is connected to our course in some way. You will complete your final project in a group of two or more. The project should be a substantive piece of work that correlates with the weight given in the course. Beyond this, there are no preëstablished guidelines: you must submit a proposal for your final project before the midterm break.
Project proposals should be no more than one page in length (single spaced), and should consist of the following: (i) a list of who is going to be involved in the final project; (ii) a brief description of the final product (be it an analysis, a commentary, a program, or some other work), including the steps you will take to complete the project; (iii) a bibliography of works that you intend to consult as part of the project. Note that the bibliography need not be long, and it also does not bind you: you may go beyond these works if you choose.
You should fill out the Final Project Reflection as part of your Populi submission.
Here are some examples of final projects:
Day | Topic | Readings | Notes |
---|---|---|---|
Feb 22 | Introduction | None | — |
Feb 26 | Boolean Logic | Elements I, 1-1.4.4 | — |
Feb 29 | Abacus Machines | — | — |
Mar 4 | Circuits | — | — |
Mar 7 | Elementary Chips | Elements 1.5–1.7 | — |
Mar 11 | Boolean Arithmetic | Elements 2-2.4 | Project 01 |
Mar 14 | — | — | No class |
Mar 18 | Adders, Incrementer | Elements 2.5-2.8 | Project 02 (adders, incrementer) |
Mar 21 | ALU | — | Project 02 (ALU: ALU-nostat.hdl only) |
Mar 25 | Memory | Project 02 (ALU: ALU.hdl) | Portfolio #1 Due |
Mar 28 | Memory | Elements 3–3.5 | — |
Apr 1 | Memory | — | Elements Project 03 a/b |
Apr 4 | Machine Language | Elements 4-4.2.3 | — |
Apr 9 | — | — | Long Weekend |
Apr 11 | Machine Language | Elements 4.2.4-4.5 | — |
Apr 15 | Machine Language | — | |
Apr 18 | Machine Language | — | |
Apr 22 | Machine Language | Complete Rect.asm | |
Apr 25 | Machine Language | Complete Fill.asm | |
Apr 29 | Computer Architecture | Complete CPU.hdl | |
May 6 | Computer Architecture | Complete Computer.hdl | |
May 9 | Assembler | — | |
May 13 | Assembler | — | |
May 16 | Assembler | — | |
May 20 | Summary | Complete Assembler | |