# Dispositiu lògic programable complex

Un dispositiu lògic programable complex (CPLD, sigles de Complex Programmable Logic Device) és un dispositiu electrònic programable. Els CPLD estenen el concepte d'un PLD (de l'acrònim anglès Programmable Logic Device) a un major nivell d'integració, ja que permet implementar sistemes més eficaços, ja que utilitzen menor espai, milloren la fiabilitat del disseny, i redueixen costos. Un CPLD es forma amb múltiples blocs lògics, cada un semblant a un PLD. Els blocs lògics es comuniquen entre si utilitzant una matriu programable d'interconnexions, la qual cosa fa més eficient l'ús del silici, conduint a una millor eficiència a menor cost. A continuació s'expliquen breument les principals característiques de l'arquitectura d'un CPLD.

## Arquitectura
### Matriu d'interconnexions programables

La matriu d'interconnexions programables (PIM) permeten unir els pins d'entrada/sortida a les entrades del bloc de dades, o les sortides del bloc de dades a les entrades d'un altre bloc lògic o fins i tot a les entrades d'aquest. La majoria de CPLDs utilitzen una de dues configuracions per a aquesta matriu: interconnexió mitjançant blocs o interconnexió mitjançant multiplexors.
El primer es basa en una matriu de files i columnes amb una cel programable de connexió en cada intersecció. Igual que en les GAL aquesta cel pot ser activada per connectar/desconnectar la corresponent fila i columna. Aquesta configuració permet una total interconnexió entre les entrades i sortides del dispositiu o blocs lògics. No obstant això, aquests avantatges fan que disminueixi el rendiment del dispositiu, a més d'augmentar el consum d'energia i la mida del component.
A la interconnexió mitjançant multiplexors, hi ha un multiplexor per cada entrada al bloc lògic. Les vies d'interconnexió programables són connectades a les entrades d'un nombre de multiplexors per cada bloc de dades. Les línies de selecció d'aquests multiplexors són programades per permetre que sigui seleccionada únicament una via de la matriu d'interconnexió per cada multiplexor la qual es propagués a cap al bloc lògic. Cal esmentar que no totes les vies són connectades a les entrades de cada multiplexor. La rutabilidad s'incrementa utilitzant multiplexors de major grandària, permetent que qualsevol combinació de senyals de la matriu d'interconnexió pugui ser enllaçada cap a qualsevol bloc de dades. No obstant això, l'ús de grans multiplexors incrementa la mida de dispositiu i redueix la seva eficiència.

### Blocs lògics

Un bloc lògic és similar a un PLD, cada un posa un bloc de comportes AND i OR en forma de suma de productes, una configuració per a la distribució d'aquestes sumes de productes, i macrocel·les. La mida del bloc de dades és una mesura de la capacitat del CPLD, ja que d'això depèn la mida de la funció booleana que pugui ser implementada dins del bloc. Els blocs lògics normalment tenen de 4 a 20 macrocel·les.

### Macrocel·les

Les macrocel·les d'un CPLD són similars a les d'un PLD. Aquestes també estan proveïdes amb registres, control de polaritat, i buffers per a sortides a alta impedància. En general un CPLD té macrocel·les d'entrada/sortida, macrocel·les d'entrada, macrocel·les internes o ocultes (buried macrocells), mentre que un 22V10 té només macrocel·les d'entrada/sortida. Una macrocel·la interna és similar a una macrocel·la d'entrada/sortida, només que aquesta no pot ser connectada directament a un pin de sortida. La sortida d'una macrocel·la interna va directament a la matriu d'interconnexió programable.

### Cel·la d'entrada/sortida

La funció d'una cel·la d'entrada/sortida és permetre el pas d'un senyal cap a dins o cap a l'exterior del dispositiu. Depenent del fabricant i de l'arquitectura del CPLD aquestes cel poden o no ser considerades part del bloc de dades.

## Fabricants de CPLD

* Altera
* Atmel
* Xilinx

## Vegeu també

* Matriu de portes programable in situ