FPGA (field-programmable gate array)
This is a reprogrammable COTS Instruction set Processor (IP). It consists of a re-programmable ("FP") Gate Array (GA), i.e. a FET (Field-Effect Transistor) array where the transistors can be set by the FET Gate to "conduct" or "resist". This can flexibly simulate many different logical ICs.
You know what a "truth table" is ? Here a example :
XOR truth table :
A B | C 0 0 | 0 0 1 | 1 1 0 | 1 1 1 | 0
In a truth table you have got eg. 2 input wires, and 1 output wires.
A FPGA is programmed by a LUT (Look-Up Table) that has to be loaded into volatile memory at power-up. In a FPGA LUT you have got 10,000,000,000,000,000 input/output wires.
As it is complex to feed the table values, special languages (HDL - Hardware Description Language) are used to feed them : VHDL (and -blech!!!- verilog)
The Gate Array (GA) in Amstrad graphics is an ASIC.
CPLD are re-programmable IPs that are faster and non-volatile; however, they are not as versatile as FPGAs, so FPGAs offer more possibilities closed to CPLDs. They consist of AND- and OR-matrices that can be connected to a signal or the inverted signal (NOT); those minterms can construct all other logical equasions (to the boundaries of the chip).
Common CPLDs are made by Atheros (now part of Intel) and Altera.