In the beginning there was the microprocessor. A collection of logic that centered around an ALU (Arithmetic and Logic Unit) and a series of registers. It was capable of doing most tasks just fine. Simple math, and boolean logic were the key to most programming needs. As the life of the processor and its extension, the microcontroller, progressed the computing needs became larger. Programmers wanted to be able to manipulate larger numbers, and floating point ones at that. Add and Subtract were no longer sufficient, division, multiplication and a host of other mathematical functions were needed. In the 1970’s transistor counts were in the thousands, frequency in the MHz and line widths were measured in microns. It was not feasible to build these math functions, in hardware, on the same chip (or rather die) as the processor.
Several companies worked to solve this. Perhaps the most successful, and famous, was AMD. AMD in 1977 introduced the AM9511 Arithmetic Processing Unit. It is best described as a scientific calculator on a chip. It could handle 32 bit double precision math (via 16 bit stack/registers) and supported not just the basic ADD, SUB, MUL and DIV, but SIN, COS, TAN, ASIN, ACOS, ATAN, LOG, LN, EXP, and PWR. 14 floating point instructions, in hardware, on a single chip. It ran at up to 3MHz (4MHz in the ‘A’ version) and could interface with pretty much any microprocessor or microcontroller, providing much needed processing power. It was designed as a peripheral, so that the main processor could assign it a task, and then go on about its program while the AM9511 crunched the math. The AM9511 would then notify the host processor via interrupt that it was finished the the data/status was ready to be read.
AMD updated the design to support……
The second version, released in 1979 called the AM9511A added some changes to support synchronous, as well as asynchronous systems. It also allowed for a slightly higher clock of 4MHz. The design was a success, so much so that Intel licensed it from AMD as the 8231 and the 8231A.
The Intel i8080/8085 and MCS-48 were licensed to AMD, in exchange for AMD’s designs of the Am9511/12 math co-processors, plus an error-correction (EDC) chip (Am2960?). In exchange for the i8088, i8086 and future Intel processors, AMD was to design more such peripheral chips and cross-license them to Intel. This inevitably ended up in a large billion $ lawsuit in 1986 or so, which terminated the licensing agreement.
You will see an AMD copyright on Intel 8231s which in todays view, is a bit ironic considering the staunch competition the two companies now have with each other. The AMD AM9511A was used as an upgrade for the Apple II and Apple II+ (microSPEED. etc)
In 1979 IEEE was hard at work at coming up with a standard for handling floating point number, and math functions that dealt with them. This was very important, as every processor should achieve the same results when performing math. Such things as storage formats, and rounding schemes had to be standardized. It was based on Intel’s 8087 FPU, and the first FPU to be fully compliant was the i387 in 1987. This standard became IEEE 754-1985 when it was finalized.
AMD made the AM9512 to support the draft standard. It was similar to the AM9511 but only supported the 4 basic functions, ADD, SUB, MUL and DIV. They were however now 64bit rather then the 32bit of the 9511. Intel again licensed the design and produced it as the 8232. The 8232 did not sell as well as the 9511A/8231A as by now the 8087 was in production, and designers would rather use the more versatile, yet not entirely IEEE 754 compliant, 9511.
There have been other standalone APU’s over the last couple of decades, made by companies such as the less popular TI TMS1018 or Weitek WTL1032/1033 two-chip solution. Most however have been tied to a certain CPU architecture (Motorola MC68881/2, Intel 8087, National 32081 etc)
However, even today there are still times when you need a bit extra mathematical fortitude for your microcontroller application. An 8051, COP8, PIC, or Z80 just doesn’t have what it takes to truly handle stuff like SIN, COS, or these days, GPS calculations. A company called Micromega now makes a couple standalone FPUs just for this purpose.
The uM-FPU V2 handles everything the original AM9511 does with a few extras (such as Root, Floor, and Ceil) and the uM-FPU V3.1 adds FFT, GPS functionality, higher speed, and a host more. What MicroMega has done is a bit of coding genius. They have designed a program on the Cypress CY8C27143 PSoC for the V2, and the Microchip dsPIC30F3012 for the V3.1. So at their core they ARE microcontrollers, but coded in such a way as to interface as a FPU, including having their own instruction set. One of the big benefits of this is a huge cost saving. An Intel C8231A cost $140-$190. a MicroMega? $15-$20, and they do more, use less power, and take up less board space.
Lets look at the relative speeds of the 9511, 9512, and MicroMega uM-FPU V3.1 (all at max frequency)
|APU||32bit ADD||64 bit FP ADD||64 bit FP DIV||Frequency||Instructions|
|MicroMega uM-FPU V3.1||7us||14us||18us||30MHz||175+|
On the lower end of things (32 bit ADD) speed scales with frequency. Only so fast you can make an adder. However on the more complex instructions the programming and architecture of the uM-FPU yields 25-100x speed increase for only a ten time greater clock.
As long as we need math, and as long as the classic microcontroller designs live on, APU’s will be needed.