What is an FPGA?
So just what is an FPGA? You might have heard the word thrown about, or perhaps you don't have any clue what I am referring to. In any event, FPGAs (Field Programmable Gate Arrays) are awesome device that currently enable the average person to make their very own digital circuits. The price has come down enough that you don't need to be a massive company to get your hands dirty.
It is possible to consider an FPGA as a blank slate. By itself an FPGA does nothing. It's all up to you (the designer) to make a configuration file, often called a little file, for your FPGA. Once loaded the FPGA will act as the digital circuit you designed!
One reason FPGAs are so amazing is that unlike an ASIC (Application Specific Integrated Circuit) the circuit design isn't set and it's possible to reconfigure an FPGA as many times as you'd like! Making an ASIC also prices potentially millions of bucks and requires months or weeks to make. That isn't just hobbyist friendly.
FPGA vs Microcontroller
When I first learned about FPGAs, all I really knew about before was microcontrollers. So first it's crucial to know that they are very different device. Having a microcontroller, such as an atmel , the processor is already designed for you. You merely write some applications, normally in C or C, and then compile it into a hex file which you load on the microcontroller. The microcontroller shops the program in flash memory and will store it before it's replaced or erased. With microcontrollers you've got control over the software.
FPGAs are different. You are the sole designing the circuit. There's not any chip to run applications on, at least till you design a single! You are able to configure an FPGA to be something as straightforward as a gate, or anything as complicated as a multi-core chip. To make your own design, you write a few HDL (Hardware Description Language). The two most well-known HDLs are both Verilog and VHDL. You then synthesize your HDL to a little file that you may use to configure the FPGA. A slight drawback to FPGAs is that they keep their configuration in RAM, not flash, meaning that after they lose electricity they shed their configuration. They have to be configured each time power is used.
That's not quite as bad as it sounds as you will find flash chips you may use which can automatically configure the saved piece file on electricity. Additionally, there are some development boards that don't take a programmer whatsoever and will configure the FPGA at startup.
With FPGAs you've got control over the hardware.
Using a normal microprocessor, you've dedicated hooks for certain capabilities. For instance there'll be just two hooks on some Atmel obsolete parts which are used as a serial interface. If you'd like more than one serial interface, or you also would like to utilize a few other hooks, your sole solution besides getting another chip would be to use software to emulate a serial interface. That works well except you're wasting valuable processor time together with the very fundamental job of sending out pieces. If you would like to emulate more than one port then you find yourself using all of your processor time.