Micro Architecture |
|
This is the level at which we take our gates, representing tiny fragments of logic, and build them into larger units of computation. First you build circuits that can do simple arithmetic ("adders" and "multipliers") and memory cells that can hold a single "yes" or "no" (a "bit", as it's known), then you build those up into larger systems like Arithmetic Logic Units, Floating Point Units, branch predictors, caches, Load-Store units, registers and so on. Then you build those into a complete microprocessor capable (in theory) of handling any computation you might throw at it.
Universities generally teach this level over two courses: Computer Design[->], which takes you from gates up to the larger systems I mentioned, and Computer Architecture[->], which talks about how to organise your chip design to extract better performance out of it.
Microelectronics isn't the only possible substrate for this level: much of Lovelace and Babbage's work in the 1800s was at this level, only built on top of gears rather than circuits. The notations Babbage developed in some ways strikingly anticipate[->] modern hardware design notations.
Application programmers rarely need to care about what goes on at this level, but occasionally they get bitten by how branch prediction[->] or caching affects the performance of their code. Programmers working on cryptographic software need to care more, because what's going on at the microarchitectural level[->] can leak secret information to an attacker.
After this comes:
Lower level: |
Root node: |
Higher level: |