To see how complex this topic is and the number of devices that are
available to perform programmable logic look at this chart.
http://i.cmpnet.com/pldesignline/2006/07/compuniverse-lg.gif
Below Source
http://www.bit7.com/whitepage/FPGA/fpgaone.htm
A programmable logic device (PLD, also referred to as a PAL, PLA, CPLD
or FPGA among others) is essentially a collection of general purpose
digital circuitry and interconnection resources. The design process for
a PLD results in a specification of how those resources are configured
and connected together to implement the desired circuit. Rather than
select different components and physically connect them to get the
desired circuit behavior, the engineer can add a PLD to the circuit and
implement all the required logic circuitry in the PLD with greater ease
and flexibility.
Applications
The spectrum of programmable logic parts runs from simple 16 pin PALs
suitable for replacing a few logic gates to multi-million gate,
thousand pin FPGAs capable of implementing complex data processing
functions or special purpose microprocessors.
A typical small application might be to replace several logic gates
spread among a few chips in a design with a single chip programmed to
perform the same functions. These include address decoding, glue logic
or simple signal generators. More involved circuits might include
sequence controllers, state machines etc.
Large applications may include interface control blocks (e.g. PCI bus,
DVI), arithmetic processing or other data processing. Microcontrollers
can also be included in FPGAs which, with the addition of controlling
software, can result in complete, highly specialized designs in a
single chip. FPGAs are also used to prototype microcontrollers,
microprocessors and other designs intended for implementation in ASICs.