An alternative and flexible way of implementing the control subsystem is to use a microprogrammed controller. Such a controller implementation may use a general purpose system or a specially designed one, and the algorithm can be modified by changing the microprogram - a sequence of microinstructions.
Figure 92 shows the organisation of a microprogrammed controller.
This microprogrammed controller consists of the following modules:
Microinstruction formats vary, but a format system must include a control field for the values of the control signals, and a sequencing field which specifies the address of the next microinstruction.
The control field may be organised horizontally, where each bit corresponds to a control signal, or vertically, where the bits are encoded for compactness.
The sequencing field may be explicit, where possible next addresses are listed, or implicit, where microinstructions are executed in the order they are stored. Microinstructions with no sequencing information are called control microinstructions. When branching is needed, special branch microinstructions are used.
Figure 93 shows 8-bit control and branch microinstruction formats suitable for the incdec example. The most significant bit I7 is used to distinguish between the two types of microinstruction.
The control microinstruction is horizontally organised, where the five least significant bits I4-I0 are directly associated with the five control signal bits.
The branch microinstruction includes fields for the branch address, condition, and condition value. The two condition bits I6 I5 are coded as follows:
I6 I5 | |
start | 00 |
k | 01 |
unconditional |
A microprogram using these microinstructions implementing the incdec algorithm is as follows (states shown):
(state) | address | microinstruction |
(wait) | 0000 | 0000 0000 |
0001 | 1000 0000 | |
(setup) | 0010 | 0001 1000 |
(abs val) | 0011 | 0000 1001 |
(chk iter) | 0100 | 0000 0000 |
0101 | 1011 0111 | |
0110 | 1010 1001 | |
(iterate) | 0111 | 0001 1110 |
1000 | 1100 0100 | |
(mult) | 1001 | 0000 0000 |
1010 | 1100 0000 |
Microprogramming is a widely used technique in the design of complex digital systems such as microprocessors.
ANU Engineering - ENGN3213