To the Students
You have written programs. You may even have written many. Somewhere along the way,
you have probably wondered what actually happens when a program runs. Perhaps the
thought came only briefly before you returned to an assignment due at midnight. Not
the folklore answer that a compiler turns it into ones and zeros. This course goes
deeper. It asks what physical arrangement of parts takes a statement such as
x = a + b; and makes it true.
Most curricula answer this question in two halves that never quite meet. A digital
design course teaches gates, Karnaugh maps, registers, counters, and perhaps finite
state machines. Then it stops. A computer architecture course starts with an assembled
processor and asks how to make it faster. This course bridges this crucial gap.
How do a few thousand gates and flip-flops become a machine that runs a program?
The promise of no black boxes
This course makes one promise. Nothing will be hidden from you. Every box we draw
gets opened. A register becomes flip-flops with a load enable. A flip-flop becomes
two latches. A latch becomes two crossed gates. A gate becomes transistors, if you
care to look. By the final module, you will have specified and verified every component
of the processor using parts you already trust.
That processor is TARA16, a complete 16-bit computer with eight registers, a clean
instruction set, memory-mapped I/O, and a display you can draw to. It is small enough
to hold in your head and honest enough to build. It is not a toy. It runs real programs,
including sorting, recursion, and games. It also exists as a real machine in three forms
you can touch. The TARA16 Studio simulator lets you write and run TARA16 assembly from
the first week and watch every register change. You can build and probe a gate-level
version in a circuit simulator. A Verilog implementation runs on an FPGA board, where
the machine you studied on paper draws to an actual screen. All three agree with one
another, instruction for instruction. The final module shows you how that agreement is
checked. Knowing why you believe a design is correct is part of the design.
One more thing. Hardware design has a reputation for being arcane, the province of a
few. It is not. A processor is a finite, knowable object, built from a handful of ideas
used honestly and repeatedly. By the end of this course, you will not merely know how
a computer works. You will have designed one, and you will know why it is designed the
way it is. That knowledge does not expire with any particular technology. It is yours
to keep.
Welcome. Let us build a computer.