To see how complex this topic is and the number of devices that are available to perform programmable logic look at this chart.
formatting link
Below Source
formatting link
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.