FPGA stands for Field Programmable Gate Array.
An FPGA is a collection of gates (or Logic elements) that can be freely configured at run time, bascially allowing the creation of a custom piece of hardware. The performance of algorithms implemented in an FPGA is much higher than the performance of the same algorithm in software, by a factor of approximately 10-100, assuming the same effort has been put into optimization.
Advantages of FPGAs
FPGAs can do some things that microcontrollers can not do. They can react in ns or even fractions thereof. They can do multiple things in parallel. And they can implement algorithms in hardware, much faster than a software implementation can. One example: To compute a CRC, a well optimized software will need about 15-20 cycles to process a single byte of input. A dedicated hardware, and so also an FPGA, can do the same thing in a single cycle. And not only that, in an FPGA, you could process a number of CRCs simultaneously, where in a computing system, one CPU can process only one CRC at a time. One might say: But I do not need to compute a CRC! Well, then your Embedded System probably does something else that could be optimized in hardware. Weather it is the computation of a CRC, an encryption algorithm or some other computation, a dedicated hardware is going to do it much faster and much more efficiently. This becomes even more obvious when looking at reaction times. A CPU can always be "busy"and need significant reaction time, an FPGA can do it in a single cycle! Short: There are lots of things that can be done with FPGAs that CPUs can not do or not do as fast and efficiently.