The adder at the heart of Intel's 8087 floating-point chip
Posted by pwg 4 days ago
Comments
Comment by kens 4 days ago
Comment by sebgan 4 days ago
Comment by mitthrowaway2 3 days ago
I've been curious about transistor counts for floating point units for a while, but it's hard to find information about them.
Comment by kens 3 days ago
Comment by Aardwolf 3 days ago
Comment by bsder 3 days ago
The reason you don't use prefix adders in 1980 is that you can't possibly route them because you don't have enough metal. So instead, you use chunks of Manchester carry chain because the "tapping internal nodes" that everybody cites allows you to route nodes in diffusion and polysilicon instead of having to use metal.
Of course, THAT only works because you have 5V (or more) and can connect lots of transistors in series and still have them work. As your voltage falls you can't connect as many transistors in series, so you switch to architectures that prefer active gates over passthroughs and long chains.
So, as your available metal layers, supply voltage, transistor speed, threshold voltages, capacitive load and power dissipation all shift over the engineering landscape, your "optimization" shifts with it.
Comment by kens 3 days ago
Comment by B1FF_PSUVM 3 days ago
Comment by rcxdude 3 days ago
Comment by B1FF_PSUVM 3 days ago
But if you duplicate all your slices, you can have the results for both carry = 0 and carry = 1 inputs. Then just switch which one is correct - total time 1 add plus N-1 switches.
Just for double (and change) the hardware. Cheap.
Comment by m1333 3 days ago
How does the clocking work exactly? The circuit is fed A and B and up down up down clock and then the output appears? How does the consumer (circuit) know when to read the result? Is there a "result is ready" flag? How long does the result stay stable? One full clock cycle? So many questions...
Comment by JdeBP 3 days ago
Comment by kens 3 days ago
There is some complicated timing within a clock cycle with slightly delayed clocks and whatnot, for instance, to precharge the carry lines at the beginning of the operation. The 8087 is mostly synchronous with the clock, but they "cheat" in many places.
Comment by throwaway152321 3 days ago
Thanks for the great article.
Comment by kens 3 days ago
The die photo at the start of the article shows some of the power distribution (the thick white lines around the edge and through the die). I have a close-up shot of the adder's metal layer in the article, showing the thick power and ground metal lines that run next to the adder.
As far as capacitors, there are some capacitors for specific things, but no decoupling capacitors. I think the capacitors are mostly to tweak the timing, if a signal needs to be delayed slightly.
Comment by JdeBP 3 days ago
Comment by colejohnson66 3 days ago
Comment by JdeBP 3 days ago
Comment by userbinator 3 days ago
Comment by jcranmer 3 days ago
Comment by JdeBP 3 days ago
My educated guess is that primarily simply no-one has needed this, and secondarily it's hard. They're running softwares that can do all of their floating point in software anyway and they just don't need an 8087 on an FPGA. And floating point on an FPGA uses a lot of area, if one is taking the easy route of just emulating the external behaviour rather than the much harder task of emulating the clever microarchitecture that reduces it all to just 1 adder.
Comment by nine_k 3 days ago
Comment by ErroneousBosh 3 days ago
Turns out what he needed to do was saw up some tree trunks to make rough platforms for them, and they bred like crazy.
Adders can multiply really efficiently with log tables.
Comment by librasteve 3 days ago
personally I would like to see a compare and contrast between the Intel 8087 (built around an full width adder), 287 and the Weitek 1167 (built around a full width mac and barrel shifter)
as you note, all these parts were pushing the transistor limits of their day
PS. and the Inmos T800 had a log shifter … so a compromise between those extremes
Comment by albert_e 3 days ago
"Adder" is also a name for a snake.
Wonder if this was one of the inspirations for naming "Python" language too.
One of the first implementations of the interpreter must have tackled the "add" operation, so maybe the interpreter was just an adder in a prototype version.
I know that Monty Python is officially cited as the inspiration behind the name.
Comment by ryanshrott 3 days ago
Comment by oakinnagbe 4 days ago