Sunday, 19 November 2017

history - When was the concept of the FPGA invented?


I've just finished reading Charles Petzold's book, Code: The Hidden Language of Computer Hardware and Software. In it Charles explains building relays into gates, gates into logic components, and logic components into computing machines.



He talks about the book TTL Data Book for Design Engineers which first came out in 1973. (I'm assuming people had lists of TTL gate chips prior to this). This talks a lot about the Texas Instruments 7400 series of logic gate chips.


Now to me it seems you could combine TTL chips (or relays or transistors) into a CPU using the instructions in this book. But everything online says "use FPGAs instead! It's easier for that scale! [Unless you're getting the concepts and want to see the end to end view]". Fair enough - some pragmatism is good - it depends on what the outcome is.


When you look at the structure of an FGPA - it appears to only have slightly more complexity than a 4-bit adder.


enter image description here


Now I don't know when the first four-bit adder was invented. (My guess is it came out of Claude Shannon's work on boolean logic in 1948).


Now we know that the first FPGAs in chips went on sale in 1984. But people but have been building them out of TTL, transistors and vacuum tubes before that.


So somewhere between 1948 and 1984 someone must have thought of the idea of FPGAs.


My question is: When was the concept of the FPGA invented?



Answer



Before the "FPGA" with either EPROM (Altera, 1984) or SRAM (Xilinx,1985) there were families of programmable logic, where the programming was done by blowing fuses on-chip to break unwanted connections.



This was a one-way process; you can't un-blow a fuse, so these were generally "use once" devices, though sometimes you could ensure that any design changes you made were blowing additional fuses.


These were generically called PLDs - Programmable Logic Devices - though the first specific brand were known as PALs - Programmable Array Logic. I've seen claims from AMD marketing that they invented these - not technically correct, though they bought MMI (Monolithic Memories Inc) the company that did.


PALs were usually a much simpler structure than FPGAs, generally a comprehensively interconnected network of AND-OR gates, with or without registers on the outputs - you broke the connections you didn't need. Each could typically replace 4-8 TTL SSI or MSI packages, a useful saving in board space, and reduced the number of board design changes required.


AMD came along with the more complex but more flexible PAL22V10 a little later, then after a few years, went on to buy MMI.


Programming was usually with a low level HDL - usually PALASM or CUPL - to generate a programming file listing the fuses to be blown. Then insert the chip into a programmer and load the file...


I think the first PALs were available from MMI around the mid 70s, and popular by about 1980. In addition to the MMI databook (1978 onwards) there was a Systems Design Handbook (my 2nd ed was from 1984, can't find online) was a collection of application notes covering basics all the way up to audio spectrum analysers, and, like the handbook, mainly notable for a series of cheesy cartoons...


enter image description here


The schematic for an entire chip, unprogrammed, looked like this:
enter image description here


And a program (in this case, one of MMI's own examples, for a 4-bit counter), in PALASM looked like this...

enter image description here


Pretty basic, but easier than marking the fuses you wanted to destroy on the schematic above...


Note the two lines starting "CLK" ... they are names for the pins in order, numbered from 1 to 20. These correspond to the schematic above (which doesn't show pins 10 = GND or 20 = VCC, which are predetermined). Comparing this with the schematic you'll see that CLK and /OC are also predetermined, and all the other input pins are on the left, outputs (registered) on the right.


Also note that this design is for a 16R6 but it'll fit a 16R8 because pins 12 and 19 (which are unregistered in the 16R6) are unused - i.e. NC - in this design.


In practice you'd probably use an off-the-shelf counter like the 74163 instead, unless it was Saturday and Stores was closed, or someone else had goofed the polarity of the Load input.


Some more info here...


And for some perspective on work in that era, see "The Soul of a New Machine" by Tracy Kidder - the book mentions the advantages of a newly available form of programmable logic, and the timeframe pretty much means it has to be PALs.


Following on from these were mask programmable devices, much larger, but much less amenable to small scale development - notably the Ferranti ULA, which made the BBC Micro and Sinclair ZX81 possible around 1982. These offered a few hundred or a few thousand gates. Like mask programmable MCUs, you sent off your paper tape, got a thousand parts back aftel 6 weeks, and prayed that your design and testing had been thorough enough...


No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...