Chapter 15 Subsystem design
In Section 1.2 we identified the four principle subdivisions of all digital processors:
- The datapath, consisting of:
- Memory: Where data is stored during computation
- Operations: Arithmetic and logical manipulations of the data
- The controller, which coordinates the operations of the datapath
- Input/Output (I/O), which connect the processor to the outside world via sensors and actuators.
Memory functions are handled by flip-flops, registers, and other elements we haven’t seen yet. Arithmetic and logical operations include multiplexers, decoders, and adders. Registers and incrementers are combined into counters, which are used in a variety of ways. The heart of any controller is a state machine. I/O functions, so far, are restricted to simple switch inputs and LED outputs.
We will now begin to assemble these blocks into subsystems that perform more complex operations, and finally assemble subsystems into complete system designs. The distinction between a subsystem and a full system can be a little fuzzy, but for our purposes, we will use subsystem to mean something that performs a single function as part of a larger whole. Examples include: a multi-digit seven-segment display decoder; a subsystem that displays data on a video screen; and a keypad interface that converts button presses to usable data. None of these would be regarded as a complete processor, but all could be important parts of one.
This chapter begins conceptually, with some new design principles, and ends with some new VHDL constructs that facilitate the construction of processors from subsystems.

