An FPGA is a Field Programmable Gate Array, a type of gate array that is programmable after assembly. Usually, FPGAs are also reprogrammable, meaning they can be upgraded.
Most FPGAs have combinatorial blocks followed by sequential elements. A combinatorial block can be used to implement boolean logic such as AND, OR, NAND, NOR, and other combinations. A sequential element is a flip flop, a single bit memory, most often a D flip-flop. Some FPGAs also have more complex memories organized as RAM. The most complex FPGAs have processors, multi-giga bit tranceivers, DSP and other high-order functions built in.
FPGAs can be used for a variety of embedded system applications, from specialized network packet processors (e.g., VoIP firewalls) to systems on a chip (processor, memory, peripheral devices). For example, Internet core routers often use FPGAs on media cards for packet processing and routing functions.