The final exam with be like two exams in one. In part it will cover the last
third of the course in roughly the same level of detail that exams 1 and 2
covered the first and second thirds of the course. It will also have a few
"greatest hits" exercises that will cover what I consider to be the most
important topics in 370. Without further ado, here are the topics that we
covered in 370, roughly in chronological order and grouped according to which
third of the course they fall in.

 Binary, octal and hexadecimal number systems
 Arithmetic in alternative number systems
 Negative numbers in computers: sign/magnitude, one's complement, two's complement
 Boolean algebra, proofs
 Basic Boolean functions; truth tables and logic gates
 2level logic (sumofproducts, productofsums), canonical forms (Σ, Π)
 Visualizing Boolean functions (Boolean cubes, Kmaps)
 2level minimization (Kmaps, QuineMcCluskey)
 Combinational Verilog
 ROMS, PLAs, PALs

 Multilevel logic
 Logic delay and glitches
 Adders, subtracters, carryselect
 FPGA essentials, Muxbased logic
 Circuit primitives with memory: latches, flipflops
 Register timing properties, clocking
 Finite state machine design; Moore and Mealey
 Sequential Verilog

 Finite state machine implementation; different encoding styles
 State minimization (rowmatching method, implicationchart method)
 Control/datapath design
 Computer organization
 FETs, CMOS
 Parallel prefix trees, carry lookahead adders
 Combinational multipliers
Here are some thoughts about which topics and concepts I consider more or less
fundamental (i.e. are more or less likely to show up on the final).
 Some of the early topics like arithmetic in different bases and using
Kmaps to do twolevel optimization are unlikely to show up as exercises on
their own. However, there may very well be exercises that require
understanding these topics.
 Similarly, it's unlikely that there will be a whole Boolean proof
exercise, but if you look at the basic Boolean theorems and have no idea why
one side of the equal sign is equivalent to the other, that's a problem that
may end up costing you points on the final.
 We looked at two different optimization problems in 370 that each have two
solution methods, one of which is easier to do by hand and one of which is
easier to automate. The problems are twolevel simplification and state
minimization, and the solution methods are Kmaps, QuineMcCluskey, the row
matching method, and the implication chart method. You will definitely not
have to do big examples of the methods that are better for automation, but
it may behoove you to understand the important properties of the algorithms
and the solutions they produce. Are the solutions produced by different
methods equivalent? How efficient are the algorithms?
 As I have said before, I consider timing diagrams, delay, and it's
sideeffect, glitches, to be some of the most important topics in 370.
Hardware is different from software in a few important ways, not least that
electricity flows through transistors causing computation to happen when the
laws of physics say it will, not when it would be convenient. Timing issues
and their related pathologies will definitely make some sort of appearance
on the final.
 Fancy arithmetic circuits: I promise that there will not be a "draw a
_____style adder/multiplier" exercise on the final. However, you should be
comfortable with thinking about how the size and delay of an arithmetic
circuit relates to the number of bits it works on, and how different styles
compare to each other.
 Just like the previous exams, you will not have to write any Verilog code.
You may have to read some relatively simple code and understand what it
means in terms of real hardware, though.
 Finite state machines will definitely make some kind of appearance on the
final, though there won't be as much writing as was involved in homework 8.
 There will most likely be some transistors, but nothing to worry about, if
the homework exercise made sense.
Some old final exams:
Autumn, 2006 (Solution)
Winter, 2005 (Solution)