Che cos'è un CPLD?
I CPLD, acronimo di dispositivi logici programmabili complessi, mantengono pienamente le loro promesse. In sostanza, sono progettati per emulare più PAL (logiche a matrice programmabile) combinati in un unico chip e interconnessi tramite un interruttore a punti incrociati. Essendo basati sulla stessa tecnologia, utilizzando gli stessi metodi di programmazione e gli strumenti di sviluppo familiari, possono gestire efficacemente operazioni logiche più estese e complesse.
Sebbene gli FPGA e gli SPLD (dispositivi logici programmabili semplici) siano più avanzati rispetto ai CPLD, funzionano in modo simile a questi ultimi. I CPLD sono più articolati degli SPLD, ma meno complessi degli FPGA. Gli SPLD comunemente utilizzati, come PAL (logica a matrice programmabile), PLA (array logico programmabile) e GAL (logica ad array generico), condividono alcune analogie con i CPLD.

Che cos'è un FPGA?
Gli array di porte programmabili sul campo (FPGA) sono dispositivi a semiconduttore dotati di una matrice di blocchi logici configurabili (CLB) interconnessi tramite collegamenti programmabili. Ciò che distingue gli FPGA è la possibilità di riprogrammarli dopo la fabbricazione, consentendo loro di adattarsi a requisiti specifici dell'applicazione o delle funzionalità.
I chip FPGA si distinguono dagli ASIC (circuiti integrati per applicazioni specifiche), progettati su misura per requisiti progettuali specifici. L'elemento distintivo è la riprogrammabilità degli FPGA. A differenza degli ASIC, che hanno un design fisso, gli FPGA possono essere riconfigurati o aggiornati secondo necessità, risultando così più flessibili nell'adattarsi a requisiti progettuali mutevoli.
Tra gli FPGA, le schede di sviluppo FPGA basate su SRAM sono più diffuse di quelle FPGA programmabili una sola volta (OTP), grazie alla possibilità di aggiornarle più volte.
Gli FPGA sono strutturati in modo simile agli ASIC a matrice di porte, non ai PAL o ad altri dispositivi programmabili tradizionali. Vengono spesso utilizzati in situazioni in cui alla fine verrà implementato un ASIC, fungendo da strumento per prototipare e testare la funzionalità dell'ASIC prima della produzione finale. Ciò consente di validare e perfezionare il progetto prima di sostenere i costi più elevati associati alla fabbricazione dell'ASIC.
Architettura dei CPLD
Un CPLD (dispositivo logico programmabile complesso) è realizzato utilizzando molteplici strutture PAL (logica a matrice programmabile), chiamate macrocelle. È un'evoluzione della tecnologia PAL. In un CPLD, ogni pin di ingresso all'interno del package è accessibile da ogni macrocella, ma ciascuna macrocella ha un solo pin di uscita. Il diagramma a blocchi di un CPLD ne illustra la struttura interna.
Il diagramma a blocchi sottolinea che un CPLD è costituito da numerose macrocelle o blocchi funzionali. Queste macrocelle sono interconnesse tramite una matrice di interconnessione globale (GIM) programmabile. La riconfigurazione della GIM consente di creare vari circuiti logici. I CPLD utilizzano pin di ingresso e uscita digitali per interfacciarsi con l'hardware esterno. Questa architettura offre flessibilità e riconfigurabilità per implementare diverse funzioni logiche in base ai requisiti specifici del progetto.
Struttura del CPLD
Viene introdotta la struttura di base di un CPLD, utilizzando come esempio il chip della serie Xilinx XC9500XL. L'architettura del CPLD si basa sul concetto di termini di prodotto (Product-Term). Comprende tre componenti chiave: il blocco funzionale, la matrice di commutazione FastCONNECT II e il modulo di controllo I/O.
L'immagine illustra la composizione di ciascun blocco funzionale, che comprende un array programmabile, un allocatore dei termini di prodotto e 18 macrocelle. Queste macrocelle sono unità fondamentali per l'esecuzione delle operazioni logiche di base.
Il modulo di controllo I/O è responsabile della configurazione di varie proprietà elettriche dei pin di ingresso e di uscita, come le uscite a collettore aperto e le uscite tri-state. Inoltre, gestisce le funzioni relative all'ingresso e all'uscita.
Inoltre, sono presenti segnali globali per il clock (I/O/GCK), il reset (I/O/GSR) e l'abilitazione dell'uscita (I/O/GTS), collegati a ciascun modulo funzionale all'interno del CPLD tramite linee dedicate. Questi segnali globali forniscono coordinamento e sincronizzazione per il funzionamento del CPLD.
La macrocella, che è un componente fondamentale del CPLD, è responsabile dell'esecuzione delle operazioni logiche di base. La struttura di base di una macrocella è illustrata nell'immagine seguente. Sul lato sinistro dell'immagine è visibile un array di termini di prodotto, che può essere presente o meno a seconda della configurazione specifica.
Ogni punto di incrocio all'interno dell'array dei termini di prodotto è programmabile e, quando attivato, esegue operazioni logiche "contribuendo" alla logica combinatoria insieme all'allocatore dei termini di prodotto che opera in background. Questa flessibilità consente di creare diverse funzioni logiche all'interno della macrocella.
Il flip-flop programmabile sul lato destro dell'immagine può essere configurato come flip-flop D o flip-flop T, a seconda dei requisiti di progettazione. Se la funzione di trigger non è necessaria, può essere bypassata e il segnale può essere indirizzato al pin I/O o alla matrice di connessione, offrendo flessibilità nella progettazione e nell'implementazione di diverse funzioni logiche all'interno del CPLD.

Componenti del CPLD
I componenti di un CPLD sono costituiti da vari elementi che, nel loro insieme, formano l'architettura del dispositivo. Ecco una descrizione dettagliata di questi componenti:
- Componenti programmabili: i CPLD utilizzano componenti programmabili come EPROM flash (memoria a sola lettura programmabile e cancellabile), EEPROM (memoria a sola lettura programmabile e cancellabile elettricamente), PROM (memoria a sola lettura programmabile) e ROM (memoria a sola lettura). Questi componenti memorizzano i dati di configurazione e possono essere modificati per definire le funzioni logiche del dispositivo.
- Blocco funzionale: un blocco funzionale all’interno di un CPLD comprende un piano AND, che riceve gli ingressi dai blocchi di I/O, da altri blocchi funzionali o persino dalle uscite dello stesso blocco funzionale. Gli ingressi vengono sottoposti a operazioni logiche e quindi selezionati mediante un multiplexer di grandi dimensioni prima di essere aggiunti all’array OR. Questo processo consente di creare funzioni logiche complesse all’interno del CPLD.
- Interconnessione: l’interconnessione all’interno di un CPLD è una matrice di interruttori programmabili che controlla il percorso dei segnali da una parte all’altra del dispositivo. Consente di stabilire connessioni tra vari elementi, inclusi i blocchi funzionali e i blocchi di I/O, per configurare la logica desiderata.
- Blocchi di ingresso/uscita: i blocchi di ingresso/uscita (I/O) sono responsabili dell’interfacciamento con l’hardware esterno. Garantiscono il trasferimento dei segnali da e verso i pin del CPLD ai livelli appropriati di tensione e corrente. I blocchi di I/O contribuiscono a ridurre i ritardi, minimizzare il tempo in cui il dispositivo deve rimanere inattivo e migliorare l’utilizzo complessivo delle risorse del CPLD.
Questi componenti collaborano per offrire flessibilità e versatilità nella configurazione di complesse funzioni logiche digitali all’interno di un CPLD, facilitando al contempo la comunicazione efficiente con i dispositivi esterni.
Vantaggi dei CPLD
- È semplice da progettare.
- È stato sviluppato a costi contenuti.
- Il CPLD contribuisce a ridurre le dimensioni della scheda.
- Offre un’elevata affidabilità.
Svantaggi dei CPLD
- Un CPLD è un dispositivo logico programmabile più avanzato rispetto a un SPLD.
- È un dispositivo logico programmabile più complesso.
Come funziona un CPLD?
I CPLD (dispositivi logici programmabili complessi) utilizzano diverse tecnologie di programmazione, tra cui EPROM CMOS, EEPROM, memoria flash e SRAM, per creare dispositivi logici programmabili estremamente compatti, veloci ed efficienti dal punto di vista energetico. Questi dispositivi rientrano nella categoria dei circuiti integrati ad alta scala di integrazione, caratterizzati da strutture relativamente complesse e dimensioni fisiche considerevoli. I CPLD sono circuiti integrati digitali che consentono agli utenti di progettare e implementare circuiti logici personalizzati in base alle proprie esigenze specifiche.
L’approccio principale alla progettazione con i CPLD prevede i seguenti passaggi:
- Sviluppare il sistema digitale desiderato utilizzando una piattaforma software di sviluppo integrata.
- Esprimere il progetto utilizzando un linguaggio di descrizione dell’hardware.
- Trasferire il codice di progettazione al chip CPLD di destinazione tramite un cavo di download, in un processo noto come programmazione «in-system».
- Generare il file di destinazione corrispondente che definisce le funzioni logiche da implementare nel CPLD.
Architettura FPGA
Nella struttura di base di un FPGA (Field-Programmable Gate Array) vengono impiegati quattro tipi principali di moduli: blocchi o pad di I/O, linee di interconnessione, matrici di commutazione e blocchi logici programmabili (CLB). Gli utenti possono interconnettere questi componenti in varie configurazioni per creare la struttura architetturale di base di un FPGA.
Le funzioni di questi moduli architetturali FPGA:
- CLB (Configurable Logic Block): il CLB è l'unità centrale responsabile dell'esecuzione delle operazioni logiche. È costituito da elementi logici e connessioni di ingresso e uscita digitali. Gli utenti possono configurare i CLB per implementare funzioni logiche personalizzate secondo le necessità delle loro applicazioni specifiche.
- Interconnessioni: le interconnessioni fungono da percorsi che trasmettono istruzioni e dati tra i vari blocchi logici all'interno dell'FPGA. Questi percorsi consentono ai CLB di collaborare all'esecuzione della logica definita dall'utente.
- Matrice di commutazione: la matrice di commutazione fornisce le connessioni e l'instradamento basati sulla logica necessari tra i componenti all'interno dell'FPGA. Facilita la configurazione dinamica delle connessioni, consentendo all'FPGA di adattarsi a diversi progetti logici.
- Piazzole I/O: le piazzole I/O fungono da interfacce tra l'FPGA e i dispositivi esterni o il mondo esterno. Consentono di stabilire connessioni con l'hardware esterno, permettendo la trasmissione di dati da e verso l'FPGA.
La possibilità di collegare questi moduli in matrici bidimensionali e configurarli in base a requisiti specifici è una caratteristica fondamentale degli FPGA. Questa flessibilità e programmabilità rende gli FPGA adatti a un'ampia gamma di applicazioni, dall'elaborazione del segnale digitale alle implementazioni hardware personalizzabili.
Nozioni di base sulle FPGA
Un singolo CLB (Configurable Logic Block) all'interno di un FPGA è composto da più blocchi logici, ognuno dei quali contribuisce alle funzionalità del CLB. Una caratteristica importante di un FPGA è la sua tabella di ricerca (LUT), distintiva di questa tecnologia. Le LUT sono in grado di contenere un elenco predefinito di uscite logiche per ogni possibile combinazione degli ingressi. In genere, le LUT sono disponibili in versioni con quattro-sei bit di ingresso. Tra le operazioni logiche comuni implementabili tramite LUT vi sono flip-flop, sommatori completi e multiplexer.
Il numero e la configurazione dei componenti all'interno di un CLB possono variare a seconda dello specifico dispositivo FPGA. In una versione semplificata, un CLB può essere costituito da due LUT a tre ingressi (1), un sommatore completo (3), un flip-flop di tipo D (5), un multiplexer normale (2) e due multiplexer programmabili all'interno dell'FPGA.
Un CLB compatto può funzionare in due modi diversi. In modalità aritmetica, il sommatore completo riceve gli ingressi dalle uscite delle LUT e un ingresso di riporto da un altro CLB. In modalità normale, le LUT e il Multiplexer 2 collaborano per creare una LUT a quattro ingressi. Il Multiplexer 4 determina se utilizzare l'uscita del sommatore completo o quella della LUT. La scelta tra un'operazione asincrona o sincronizzata con il clock dell'FPGA è determinata dal flip-flop D tramite il Multiplexer 6.
Negli FPGA di generazione attuale, i CLB più avanzati sono in grado di eseguire più operazioni all'interno di un singolo blocco. Questi CLB avanzati possono essere combinati per eseguire attività più complesse, come moltiplicatori, registri, contatori e persino attività di elaborazione del segnale digitale (DSP), rendendo gli FPGA versatili per un'ampia gamma di applicazioni.

Componenti delle FPGA
- Il blocco I/O viene utilizzato per collegare i chip.
- L’utilizzo di un routing programmabile consente di implementare le funzioni.
- Le funzioni logiche possono essere implementate utilizzando blocchi logici programmabili.
Vantaggi delle FPGA
- Lo sviluppo di FPGA è meno costoso di quello di ASIC perché non comporta NRE (costi non ricorrenti) e utilizza strumenti meno costosi.
- Le FPGA sono sempre programmabili a livello software. L’IC FPGA può quindi essere riconfigurato o riutilizzato indefinitamente. Le FPGA possono anche essere programmate da remoto.
- Con il codice HDL, i circuiti integrati FPGA possono essere programmati facilmente e sono ampiamente disponibili. Ne consegue un rilascio più rapido della soluzione sul mercato.
- Il routing, il posizionamento e il timing vengono gestiti dal software nella progettazione delle FPGA. Ciò richiede meno lavoro manuale. Il flusso di progettazione elimina le attività di place and route, la pianificazione del floorplan e le problematiche di timing, che sono dispendiose in termini di tempo e difficili da gestire.
- Le FPGA consentono la programmazione a livello logico. Di conseguenza, possono utilizzare un’elaborazione dei segnali più parallela e rapida. L’esecuzione da parte della CPU è difficile.
Svantaggi delle FPGA
- Per programmare le FPGA sono necessarie conoscenze di base dei sistemi digitali e dei linguaggi di programmazione VHDL/Verilog. La programmazione è più complessa di quella utilizzata nelle apparecchiature dotate di processori. Inoltre, gli ingegneri devono comprendere come utilizzare i software di simulazione.
- Le dimensioni e le caratteristiche del progetto sono vincolate dalle risorse disponibili sul circuito integrato FPGA una volta che questo è stato selezionato e utilizzato nel progetto. Per evitare questo problema, è necessario scegliere un’FPGA adatta fin dall’inizio.
- L’FPGA ha un consumo energetico maggiore e i programmatori hanno poco controllo sull’ottimizzazione dei consumi.
- Gli FPGA hanno guadagnato popolarità grazie alla loro versatilità in diverse applicazioni.
- Tra le applicazioni specifiche degli FPGA figurano il riconoscimento vocale, la crittografia, il filtraggio dei segnali, la codifica delle comunicazioni, i controllori per dispositivi, la radio definita dal software, la logica casuale, la prototipazione di ASIC, l'imaging medico, l'emulazione dell'hardware informatico e i controllori per dispositivi.
- Le FPGA sono spesso utilizzate in applicazioni specializzate e a basso volume, dove le dinamiche di prestazioni e costi le rendono una scelta vantaggiosa. La prototipazione e la produzione a basso volume si adattano bene alle FPGA. Anche il costo per unità cresce all’aumentare del numero di FPGA da produrre.
- Le FPGA (Field-Programmable Gate Array) fanno parte della famiglia dei dispositivi logici programmabili, spesso definiti hardware programmabile. Non hanno una funzionalità intrinseca propria, ma possono essere programmate per comportarsi praticamente come qualsiasi circuito digitale desiderato. Questa caratteristica è notevole perché consente una configurazione rapida senza bisogno di saldature o cablaggi estesi.
Ecco come funzionano le FPGA:
- Configurazione: le FPGA vengono configurate caricando sul dispositivo uno specifico file di configurazione bitstream. Questa configurazione definisce le interconnessioni e il comportamento degli elementi logici all’interno dell’FPGA.
- Versatilità: una volta configurata, l’FPGA funzionerà come il circuito digitale desiderato. Può essere facilmente riprogrammata per svolgere attività diverse caricando una nuova configurazione, risultando così altamente versatile per un’ampia gamma di applicazioni.
- Basati sulla RAM: gli FPGA utilizzano una configurazione basata sulla RAM, che consente la riconfigurazione dinamica. Ciò significa che il dispositivo può essere aggiornato e modificato secondo necessità senza richiedere modifiche fisiche.
- Progettazione basata sulla descrizione: la progettazione per gli FPGA consiste generalmente nel descrivere il comportamento desiderato anziché creare i tradizionali schemi circuitali. Per specificare le funzionalità si usano comunemente i linguaggi di descrizione dell'hardware (HDL), dopodiché gli strumenti generano la configurazione hardware corrispondente.
Applicazioni dei CPLD:
- I circuiti logici programmabili complessi sono adatti alle applicazioni di controllo ad alte prestazioni e impegnative.
- I CPLD possono essere utilizzati nei progetti digitali per gestire le funzioni del bootloader.
- Svolgono un ruolo nel caricamento dei dati di configurazione dalla memoria non volatile agli array di porte programmabili sul campo.
- I CPLD sono comunemente utilizzati per attività di progettazione semplici, come la decodifica degli indirizzi.
- Le dimensioni compatte e il basso consumo energetico rendono i CPLD adatti ai dispositivi portatili sensibili al prezzo e alimentati a batteria.
Applicazioni degli FPGA:
- Gli FPGA hanno guadagnato popolarità grazie alla loro versatilità in diverse applicazioni.
- Tra le applicazioni specifiche degli FPGA figurano il riconoscimento vocale, la crittografia, il filtraggio dei segnali, la codifica delle comunicazioni, i controllori per dispositivi, la radio definita dal software, la logica casuale, la prototipazione di ASIC, l'imaging medico, l'emulazione dell'hardware informatico e i controllori per dispositivi.
- Gli FPGA sono spesso utilizzati in applicazioni specializzate e a basso volume, dove le prestazioni e il rapporto costo-prestazioni li rendono una scelta vantaggiosa.
FPGA vs. CPLD
| FPGA | CPLD |
| FPGA, invece, è l'acronimo di field-programmable gate arrays. | CPLD è l'acronimo di Complex Programmable Logic Devices. |
| Un FPGA è un chip di logica digitale basato sulla RAM. | Al contrario, i CPLD sono basati su EEPROM. |
| I ritardi del CPLD sono molto più prevedibili di quelli dell'FPGA. | Poiché il CPLD dispone di memoria non volatile, è più sicuro dell'FPGA. |
| L'FPGA rientra nella categoria a grana fine. | Al contrario, il CPLD è di tipo a grana grossa. |
| Un array di porte e un FPGA sono comparabili. | Il CPLD, tuttavia, è l'equivalente del PAL. |
| L'instradamento interno è affidabile, poiché incide poco sulle prestazioni dell'FPGA. | D'altra parte, le prestazioni del CPLD variano e dipendono dall'instradamento. |
| L'FPGA consuma più energia. | Al contrario, il CPLD ha un consumo energetico inferiore. |
| L'FPGA è adatto alle applicazioni complesse. | Tuttavia, il CPLD offre prestazioni migliori nelle applicazioni più semplici. |
| Un FPGA contiene fino a 100.000 piccoli blocchi logici. | I CPLD, invece, possono contenere solo alcune migliaia di blocchi logici. |
| Al contrario, un FPGA è un tipo di circuito integrato progettato principalmente per essere modificato dal cliente o dallo sviluppatore dopo la produzione. | Il funzionamento di un sistema digitale è supportato da un circuito integrato CPLD. |
La maggior parte delle applicazioni verticali per gli FPGA è costituita da applicazioni specializzate e a basso volume. Le aziende migliori sostengono i costi hardware per unità di queste applicazioni a basso volume. Il numero di applicazioni pratiche è ora aumentato grazie alle migliori prestazioni e al rapporto costo-prestazioni.
