A technique for implementing the
instruction set of a processor as a sequence of microcode instructions
("microinstructions"), each of which typically consists of a
(large) number of bit fields and the address of the next
microinstruction to execute. Each bit field controls some
specific part of the processor's operation, such as a gate
which allows some
functional unit to drive a value onto the
bus or the operation to be performed by the
ALU. Several
microinstructions will usually be required to fetch, decode
and execute each
machine code instruction
("
macroinstruction"). The microcode may also be responsible
for
polling for hardware
interrupts between each
macroinstruction. Writing microcode is known as
"microprogramming".
Microcode may be classified as "horizontally encoded" or
"vertically encoded". Horizontal microcode is as described
above where there is a fairly direct correspondence between
the bit fields in a microinstruction and the control signals
sent to the various parts of the CPU. Not all combinations of
bits will be valid (e.g. two units driving the bus at once).
Vertical microcode is closer to
machine code because a bit
field value may pass through some intermediate combinatory
logic which generates the actual control signals. This allows
a few bits of a microinstruction to determine several control
signals and ensure that only valid combinations of those
signals are generated (e.g. a field may be decoded to determine
which unit drives the bus). The disadvantage with vertical
encoding is that the encoding is usually fixed and takes extra
time compared with horizontal encoding which allows any
combination of signals to be generated and takes no time to
decode.
The alternative to a microcoded processor is a
hard-wired
one where the control signals are generated directly from the
bits of the
machine code instruction. This is more common
in modern
RISC architectures because it is faster.
Microcode is usually stored in
ROM chips though some
processors (e.g. the
Orion) use fast RAM, making them
dynamically microprogrammable.