Is this something to do with the French Professional Golfers' Association?
Non! The acronym stands for Field Programmable Gate Arrays – that is, a very interesting class of hackable digital integrated circuits (ICs).
I'm only up to chapter three of my computer science textbook, so you'll have to remind me what a gate array is…
For the purpose of this conversation, a gate array is a rectangle of silicon containing lots of copies of the same few elementary logic gates, all lined up in rows and columns. In its simplest form, a logic gate is a basic Boolean function (OR, AND, inverter…) obtained by combining a few transistors.
Article continues below
What about the 'field programmable' part?
A single logic gate is always the same, no matter which integrated circuit it lives in. What makes your CPU a CPU and your graphics chipset a graphic chipset, and both of them unable to do what the other chip does, is the way that those millions of logic gates inside them are permanently connected to each other in the silicon foundry. The gates and the micro-wires connecting them, called nets, are drawn on special masks that are directly printed on to the silicon. Each possible mask corresponds to one and only one electrical circuit design, which cannot be changed once the chip has been printed – unless you're using an FPGA.
So you can change the makeup of a circuit yourself…
Precisely. Only the unconnected arrays of wires and basic blocks are printed on silicon in the foundry. All the connections, are made later on your kitchen table, after you've bought a blank FPGA and mounted it on your PCB board! The basic, blank FPGAs can be produced in large volumes at relatively low unit prices because the masks are always the same, but the chips can be sold as single units or in very small quantities, to whoever wants to program them as he or she pleases. This has huge consequences on lots of people, from the microelectronic industry to hobbyists and educators.
But surely chips can be reprogrammed anyway – why is this new?
Sure, the same microprocessor (an x86, for example) can run programs as different as Windows, hundreds of Linux distributions, OpenOffice.org, Apache, Photoshop and what not. However, no matter what software it runs, it's still the same microprocessor: an integrated circuit that can only execute one limited, fixed set of basic instructions in the same machine language. And it always has the same data bus of fixed width, or the same number of auxiliary pins. An FPGA can become any unique digital circuit you want it to be (within reasonable limits). What's more, it can be a totally different circuit every time you power up the board on which it's mounted.
How can this be?
The programming, or 'burning' in FPGA lingo, happens by making the FPGA read a file as soon as it is powered up. Its content describes which basic blocks (BBs) must be connected to which others and through which internal paths, as well as how each BB must be configured. Every time the host board is powered down, all those connections and configuration informations are completely erased. While the burning procedure must be repeated every time, there is no built-in limit that forces the burning file to be the same every time.
What's inside those BBs?
Generally speaking, an FPGA BB contains both combinatorial and register elements. All the blocks are placed in a rectangular grid. combinatorial circuits update their outputs as soon as possible whenever any of their inputs change, while sequential circuits recalculate their outputs only on the edge of some clock or enable signal, keeping constant the last computed value in the meantime. Things like elementary adders or decoders are combinatorial, flip-flops and other memory elements are sequential.