CPLD steht für Complex Programmable Logic Device. Die Technologie eigenspezifischer ICs ist seit den 60er Jahren bekannt, als Harris Semiconductor einen Baustein herausbrachte, dessen wesentlicher Bestandteil eine programmierbare Diodenmatrix (Fuse Configurable Diode Matrix) war. 1978 kamen die ersten vollständig konfigurierbaren Logikbausteine namens PAL (Programmable Array Logic) mitsamt Programmiersprache PALASM auf den Markt.

CPLDs bestehen im wesentlichen aus folgenden Elementen:
- programmierbare AND/OR-Matrix
- programmierbare Rückkopplung
- Eingabeblock
- Ausgabeblock
Ein-/Ausgabeblöcke können schnelle Speicher, wie Latches, D-Flipflops oder Register, sein. In vielen modernen PLDs stehen programmierbare Ausgänge, denen man definierte Zustände (active low, active high, tristate) zuweisen kann. Der AND/OR-Matrix als Kern kann jede beliebige kombinatorische Verknüpfung zugewiesen werden.
Ein CPLD setzt sich aus vielen SPLDs zusammen. Diese werden Makrozellen genannt. Die einzelnen SPLDs werden wiederum über Busse miteinander verbunden. Der homogene Aufbau ermöglicht eine exakte Bestimmung der Durchlaufzeiten, was den wesentlichen Unterschied zu den FPGAs ausmacht. Ein weiterer, allerdings nicht grundlegend notwendiger Unterschied ist die Konfiguration: Durch Fertigung in EECMOS electronically erasable complementary metal oxide semiconductor bleibt nach der Konfiguration das Programm im CPLD und muss nicht bei jedem Start neu geladen werden. Dieses Kriterium der Konfiguration ist kein wesentliches Unterscheidungsmerkmal zwischen CPLDs und FPGAs: So gibt es bereits FPGA-Bausteine am Markt welche ebenfalls wie CPLDs EEPROM-Zellen zur Speicherung ihrer Konfiguration beinhalten und keinen externen Speicher benötigen.
Durch die hohe Anzahl von Eingängen / Logikblock bieten sich CPLDs vor allem für die Lösung komplexer, paralleler kombinatorischer AND/OR-Logik an wo viele Ein- bzw. Ausgänge vorhanden sind. Gleichzeitig sollte die Anzahl der notwendigen Speicher (Flipflops) bei der Anwendung von CPLDs minimal sein, da pro Ein- bzw. Ausgabepins meist nur einziges Flipflop als Register zur Verfügung steht. Digitale Schaltungen welche viele Register erfordern, wie beispielsweise Schieberegister oder digitale Zähler, lassen sich daher nur bis zu einem gewissen Grad in CPLDs effizient realisieren.
Bei steigender Zahl der Zellen werden die Makrozellen mit lokalen Leitungen zu übergeordneten Strukturen wie Logic Array Blocks, LABs zusammengefasst. Diese Bezeichnungen variieren allerdings je nach Hersteller.
Hersteller sind beispielsweise Xilinx, Altera, Lattice, Actel, Lucent, Cypress, Atmel oder Quicklogic.