By: RichardC (tich.delete@this.pobox.com), April 12, 2017 11:06 am
Room: Moderated Discussions
Seni (seniike.delete@this.hotmail.com) on April 11, 2017 10:27 pm wrote:
> Single-cycle instructions do not need this sequencer at all. It's a huge distinction.
>
> When anon asks "Is there a hard line between microcode and non-microcode?" The answer is yes.
> This right here is the line. Single-cycle instructions with no sequencer are absolutely not microcode.
A mathematician would say it's the trivial case of microcode :-) But more seriously,
it seems the generally accepted usage is that a "microcode" implementation is one
which disentangles the "code" implementing the state machine from the physical structure
and layout, using a ROM or PLA rather than a random layout of gates. And that
distinction is usually - but not always - correlated with the complexity of the
state machine. If you have 10 states, random logic is just fine; if you have about 40,
like ARM, it's probably a tossup (but with mid-1980s EDA tools the PLA structure is going
to be less design effort), and if you have over over 1000, you're almost always going to
use a ROM.
Whichever definition you prefer, the underlying realities are the complexity of the
state machine (number of states and number of transitions), and the physical design,
not the somewhat arbitrary label we choose to put on it. Since designers in each era
are facing roughly the same constraints, they tend to end up in fairly tight clusters
in the design space. But when technology is changing rapidly - as in the early RISC era -
we get designs like ARM1 which don't fit neatly into the previously-established
clusters.
> Single-cycle instructions do not need this sequencer at all. It's a huge distinction.
>
> When anon asks "Is there a hard line between microcode and non-microcode?" The answer is yes.
> This right here is the line. Single-cycle instructions with no sequencer are absolutely not microcode.
A mathematician would say it's the trivial case of microcode :-) But more seriously,
it seems the generally accepted usage is that a "microcode" implementation is one
which disentangles the "code" implementing the state machine from the physical structure
and layout, using a ROM or PLA rather than a random layout of gates. And that
distinction is usually - but not always - correlated with the complexity of the
state machine. If you have 10 states, random logic is just fine; if you have about 40,
like ARM, it's probably a tossup (but with mid-1980s EDA tools the PLA structure is going
to be less design effort), and if you have over over 1000, you're almost always going to
use a ROM.
Whichever definition you prefer, the underlying realities are the complexity of the
state machine (number of states and number of transitions), and the physical design,
not the somewhat arbitrary label we choose to put on it. Since designers in each era
are facing roughly the same constraints, they tend to end up in fairly tight clusters
in the design space. But when technology is changing rapidly - as in the early RISC era -
we get designs like ARM1 which don't fit neatly into the previously-established
clusters.