Course Objectives and Description

This course will introduce students to computer organization and
design. Students will be introduced to the conceptual design of a
basic microprocessor, along with assembly and C programming. We start
with an overview of trends in computer design and performance, and
then introduce fundamental concepts such as binary numbers, binary
arithmetic, and representing information as well as instructions.
Students learn to program in the C language and then in assembly
(i.e., machine) language. The second half of the course focuses on
fundamentals of computer hardware design, starting with transistors
and logic gates, progressing through basic combinational and
sequential components (including arithmetic circuits, state machines,
memories, etc.), culminating in the conceptual design of a full but
basic CPU (a mini MIPS processor). The course ends with a brief
overview of some of the more advanced topics, such as pipelining and
cache memory.

If you follow the course readings, lectures, and homeworks, you will come out of this course with the following:

An understanding of how hardware is designed using transistors and logic gates.

An understanding of the relationship between hardware and software.

Experience with low-level programming in C and assembly.

More philosophically, a computer scientist with an bachelor's degree
should not view any part of the computer as "magic,"
but should either understand how it works or have the tools to figure it out.
For instance, when one writes code to add two numbers, what is happening inside the CPU that
leads to the instruction returning the correct value?

Thus, an important part of the course will be the hands-on
experience. For that, you will complete lab assignments using low-level programming
in C and assembly.