# CPLD

Un CPLD (del acrónimo inglés Complex Programmable Logic Device) es un dispositivo electrónico.
Los CPLD extienden el concepto de un PLD (del acrónimo inglés Programmable Logic Device) a un mayor nivel de integración ya que permite implementar sistemas más eficaces, ya que utilizan menor espacio, mejoran la fiabilidad del diseño, y reducen costos. Un CPLD se forma con múltiples bloques lógicos, cada uno similar a un PLD. Los bloques lógicos se comunican entre sí utilizando una matriz programable de interconexiones, lo cual hace más eficiente el uso del silicio, conduciendo a una mejor eficiencia a menor costo. A continuación se explican brevemente las principales características de la arquitectura de un CPLD.

## Arquitectura
### Matriz de Interconexiones Programables

La matriz de interconexiones programables (PIM) permiten unir los pines de entrada/salida a las entradas del bloque lógico, o las salidas del bloque lógico a las entradas de otro bloque lógico o inclusive a las entradas del mismo. La mayoría de los CPLDs usan una de dos configuraciones para esta matriz: interconexión mediante bloques o interconexión mediante multiplexores.
El primero se basa en una matriz de filas y columnas con una celda programable de conexión en cada intersección. Al igual que en las GAL esta celda puede ser activada para conectar/desconectar la correspondiente fila y columna. Esta configuración permite una total interconexión entre las entradas y salidas del dispositivo o bloques lógicos. Sin embargo, estas ventajas provocan que disminuya el rendimiento del dispositivo, además de aumentar el consumo de energía y el tamaño del componente.
En la interconexión mediante multiplexores, existe un multiplexor por cada entrada al bloque lógico. Las vías de interconexión programables son conectadas a las entradas de un número de multiplexores por cada bloque lógico. Las líneas de selección de estos multiplexores son programadas para permitir que sea seleccionada únicamente una vía de la matriz de interconexión por cada multiplexor la cual se propagara a hacia el bloque lógico. Cabe mencionar que no todas las vías son conectadas a las entradas de cada multiplexor. La rutabilidad se incrementa usando multiplexores de mayor tamaño, permitiendo que cualquier combinación de señales de la matriz de interconexión pueda ser enlazada hacia cualquier bloque lógico. Sin embargo, el uso de grandes multiplexores incrementa el tamaño de dispositivo y reduce su eficiencia.

### Bloques Lógicos

Un bloque lógico es similar a un PLD, cada uno posee un bloque de compuertas AND y OR en forma de suma de productos, una configuración para la distribución de estas sumas de productos, y macroceldas. El tamaño del bloque lógico es una medida de la capacidad del CPLD, ya que de esto depende el tamaño de la función booleana que pueda ser implementada dentro del bloque. Los bloques lógicos usualmente tienen de 4 a 20 macroceldas.

### Macroceldas

Las macroceldas de un CPLD son similares a las de un PLD. Estas también están provistas con registros, control de polaridad, y buffers para salidas en alta impedancia. Por lo general un CPLD tiene macroceldas de entrada/salida, macroceldas de entrada y macroceldas internas u ocultas (buried macrocells), en tanto que un 22V10 tiene solamente macroceldas de entrada/salida. Una macrocelda interna es similar a una macrocelda de entrada/salida, solo que esta no puede ser conectada directamente a un pin de salida. La salida de una macrocelda interna va directamente a la matriz de interconexión programable.

### Celda de entrada/salida

La función de una celda de entrada/salida es permitir el paso de una señal hacia dentro o hacia el exterior del dispositivo. Dependiendo del fabricante y de la arquitectura del CPLD estas celdas pueden o no ser consideradas parte del bloque lógico.

### CPLD MAX 7000

Su Arquitectura de un CPLD es la forma en que están organizados y a la disposición a los elementos internos del dispositivo. Son similares al diagrama de bloque de un CPLD genérico, Teniendo la estructura clásica PAL/GAL que nos permite generar las funciones suma de producto. Su densidad varía entre dos bloques LAB y 16 bloques LAB, dependiendo del dispositivo concreto de la serie que se vaya a utilizar.
Un bloque LAB es similar a un SPLD y que el tamaño de los encapsulados varían entre 44 y 208 pines, cabe mencionar que utilizan una tecnología de proceso basada en EEPROM. Las versiones que se pueden programar dentro del sistema para ello se utilizan la interfaz estándar JTAG.

## Fabricantes de CPLD

* Altera
* Atmel
* Cypress Semiconductor
* Lattice Semiconductor
* Xilinx