I like to pretend I know a thing about CPU design, but I have to admit, I have no idea what's going on here.
I like to pretend I know a thing about CPU design, but I have to admit, I have no idea what's going on here.
I have a friend[0] that is doing his Electronics Engineering masters in Germany (very prestigious engineering university) and they're studying a freaking Pentium 4. Even for them the cutting edge chip design is black magic.
[0] Ultimate frisbee teammate.
It's not that it's magic I would love to learn about: it's that I'd like to know what happens behind the scenes when we say that (for example) "results get reordered in the reorder buffer"!
Might enjoy this video, though it's a bit basic: https://m.youtube.com/watch?v=NGFhc8R_uO4
So chip designs are spliced into partitions. Each partition is a part of your design that you synthesized separately. For example you may setup a partition for the core, and you can instantiate it multiple time into a core_cluster partition.
Note that: synthetiser's logical optimizer cannot work on logic across partitions, so you don't want to small partitions (otherwise you will have more manual optimize to do) but you also don't want too big partitions (otherwise runtime and development iteration time increase).
The question is what the good size for a partition ?
* ALU is ~ 10 K cells (synthesis runtime range from few seconds to ~5 min)
* small core (low-end) is ~1M cells (synthesis runtime range from 1~8 hours)
In the Intel terminology: "sea of FUBs" approach is to prefer small partitions, while "sea of cells" approach prefer big partitions.
About the predominance of latch or flop, it's mainly a consequence from the level of manual optimization. (latch are smaller, but harder to manage, and it give diminishing returns with new process node). Same for process-node-specific vs process-node-agnostic.
PS: Most modern designs are "sea of cells" according the Intel terminology
It seems that they are moving from higher level (larger) building blocks to lower level (smaller) building blocks to increase efficiency.