+1 500 000 prodotti nell’offerta
7000 pacchi giornalmente
+300 000 clienti da 150 paesi
Data di pubblicazione: 18-11-2025 🕒 10 min di lettura
I dispositivi FPGA sono disponibili commercialmente da molti anni, eppure, nonostante i numerosi vantaggi, non si può dire che siano popolari nelle applicazioni. Le principali ragioni sono l'alto costo della soluzione e la mancanza di conoscenza riguardo alle applicazioni. La prima di queste caratteristiche influisce negativamente sul progettista o su un altro decisore riguardo ai componenti, mentre la seconda colpisce più spesso il programmatore o il progettista di sistemi embedded, che è esperto in linguaggi orientati agli oggetti ma non comprende il linguaggio di descrizione dell'hardware. In questo testo, esamineremo alcune caratteristiche pratiche selezionate dei dispositivi FPGA e le confronteremo con microcontrollori molto più noti e accettati. Indicheremo anche le applicazioni in cui l'uso di FPGA è indispensabile e quelle in cui diventa "eccessivo".
FPGA è il nome di un gruppo di circuiti integrati derivati dalle prime lettere delle parole Field-Programmable Gate Array. Questi dispositivi possono essere programmati dopo la produzione. Il processo di programmazione degli FPGA è chiamato configurazione, poiché implica la creazione di connessioni tra blocchi funzionali già pronti disponibili all'interno della struttura. A differenza dei circuiti integrati digitali tipici (porte, registri, flip-flop, contatori, ecc.) che hanno funzionalità fisse, gli FPGA possono essere programmati ripetutamente, offrendo flessibilità nella progettazione e nel collaudo di diverse applicazioni.
Gli FPGA sono composti da blocchi logici programmabili e interconnessioni programmabili tra di essi. Questi dispositivi possono contenere non solo blocchi digitali ma anche convertitori analogico-digitale, convertitori digitale-analogico, core di processori (general-purpose o DSP), blocchi di interfaccia che consentono la cooperazione con dispositivi esterni, o persino unità di supporto AI collegate tramite Network-on-Chip (NoC), una rete di interconnessione integrata che trasmette pacchetti di dati tra blocchi e componenti del dispositivo. Grazie a caratteristiche ricche e connessioni flessibili, i dispositivi FPGA possono essere configurati per eseguire varie funzioni, come l'elaborazione dei segnali, il controllo dei sistemi embedded o l'accelerazione dell'elaborazione dei dati.
Uno dei vantaggi più importanti degli FPGA è la velocità di calcolo. Questi dispositivi operano in modo diverso rispetto a un microprocessore, che recupera ed esegue istruzioni in modo sequenziale. Negli FPGA, il risultato del processamento può apparire "immediatamente", ritardato solo da un piccolo tempo di propagazione. È anche significativo che molte operazioni possano essere eseguite in parallelo, a differenza di un microcontrollore, che raramente supporta l'esecuzione simultanea di molte istruzioni.
Ogni dispositivo FPGA è composto da tre gruppi di componenti:
Figura 1. Diagramma a blocchi semplificato che illustra la struttura di un dispositivo FPGA
I dispositivi CPLD (Complex Programmable Logic Device) sono stati i precursori dei dispositivi FPGA e (nonostante abbiano meno funzionalità) sono oggi offerti per applicazioni meno complesse. La maggior parte dei principali fornitori offre una vasta gamma, a partire dalle versioni più semplici designate come PAL, contenenti elementi programmabili e parti fisse predisposte per eseguire una certa funzione logica. Questo consente di utilizzare un singolo circuito integrato invece di diversi funzioni logiche, ma non offre grande flessibilità per le applicazioni.
Rispetto ai PAL, i dispositivi CPLD sono più complessi. Contengono più porte, sono dotati di memoria non volatile e RAM, rendendoli adatti per applicazioni più complesse. Ad esempio, Intel® ha collocato molti blocchi PAL chiamati macrocelle in un unico pacchetto di circuito integrato unificato, dove tutti gli ingressi sono disponibili per ogni cella e ogni macrocellula può controllare qualsiasi uscita. La struttura di connessione è memorizzata in memoria programmabile elettricamente chiamata memoria di configurazione, proprio come negli FPGA. Quindi, se i CPLD hanno macrocelle, un bus di connessione programmabile e memoria di configurazione, in cosa differiscono dagli FPGA?
Rispetto agli FPGA, i CPLD contengono significativamente meno elementi logici e non hanno array LUT (look up tables). Hanno un'architettura più integrata, con un numero molto ridotto di blocchi logici, e implementano funzioni logiche più complesse in ciascun blocco. Molte connessioni tra i blocchi nei CPLD sono predefinite nel processo di produzione e non possono essere modificate durante la configurazione del dispositivo. Non sono utilizzati per creare applicazioni così complesse come gli FPGA, che possono contenere milioni di funzioni logiche. Per illustrare, un FPGA può modellare un core di processore, mentre un CPLD è utile per implementare un decodificatore di indirizzi che collabora con esso.
Figura 2. Macrocell del dispositivo serie MAX7000 (fonte: documentazione del produttore)
Nella maggior parte dei dispositivi FPGA, la configurazione è memorizzata in memoria esterna, solitamente collegata tramite un'interfaccia seriale. I dati di configurazione vengono copiati nella RAM dell'FPGA ad ogni accensione o reset completo. Questo crea un ritardo all'avvio del dispositivo, maggiore per gli FPGA più complessi, che non è il caso dei CPLD che hanno la configurazione memorizzata in memoria EEPROM.
Uno svantaggio degli FPGA rispetto ai CPLD è il costo applicativo più elevato.
Tabella 1. Confronto di parametri selezionati dei dispositivi FPGA e CPLD
| Caratteristica/parametro | CPLD | FPGA |
|---|---|---|
| Flessibilità applicativa | Bassa | Alta |
| Prezzo | Basso | Alto o molto alto |
| Sicurezza applicativa | Alta | Susceptibile ad accessi non autorizzati |
| Velocità operativa | Alta | Alta |
| Capacità/dimensione applicativa | Bassa | Alta o molto alta |
| Applicazione hardware | Semplice | Complessa o molto complessa |
| Programmazione | In linguaggi di configurazione hardware o tramite schemi funzionali | |
I blocchi funzionali integrati negli FPGA, specialmente convertitori A/D, convertitori D/A, o moduli di interfaccia per dispositivi esterni, possono assomigliare all'ambiente di un core di microcontrollore. Un FPGA può avere RAM integrata e memoria Flash, ma questa somiglianza è ingannevole.
I moderni dispositivi FPGA avanzati sono funzionalmente più complessi rispetto ai microcontrollori avanzati e complessi. Ad esempio, il collegamento dei blocchi funzionali all'interno di un FPGA può utilizzare la tecnologia NoC (Network on Chip), dove all'interno della struttura del circuito integrato, i pacchetti di dati vengono trasmessi utilizzando bus gestiti da switch integrati. Questo è utile per l'elaborazione e la condizionamento dei segnali e per algoritmi che impiegano l'apprendimento automatico e l'intelligenza artificiale.
La velocità di funzionamento degli FPGA rispetto a un microcontrollore è davvero sorprendente. Questo perché un tipico core di microcontrollore recupera ed esegue istruzioni una alla volta. Per accelerare l'elaborazione dei dati, scarica alcune operazioni a unità periferiche (ad es., trasmissione di dati da e verso la memoria tramite DMA), ma questo non cambia il suo ritmo operativo. Negli FPGA, a seconda della configurazione, l'FPGA solitamente trasmette la risposta immediatamente dopo aver ricevuto i dati e può inoltre eseguire molti thread simultaneamente. Ricorda, ad esempio, che la valutazione di un segnale non implica prendere un campione e poi valutarlo nel passo successivo, ma si riferisce a uno schema di valutazione disponibile come rete di funzioni logiche collegate, quindi può essere disponibile con precisione fino al tempo di propagazione del dispositivo.
Un microcontrollore contiene un core di processore, RAM, ROM, Flash e periferiche, come porte di input/output, timer, convertitori A/D e D/A su un singolo circuito integrato. È progettato per eseguire compiti specifici. Anche se alcuni moduli possono essere abilitati/disabilitati per risparmiare energia, la loro funzionalità non può essere ridefinita. È fissa durante la produzione, inclusi il funzionamento e il collegamento dei blocchi. Un microcontrollore è in qualche modo simile a un microcomputer montato su una piccola scheda a circuito stampato all'interno di un unico pacchetto. Cambiare la sua configurazione richiede di modificare la scheda, comprese le tracce del circuito, il posizionamento dei componenti e le loro interconnessioni.
Un dispositivo FPGA è costruito da blocchi logici programmabili collegati da interconnessioni configurabili. Le funzioni possono essere combinate in vari blocchi funzionali capaci di eseguire diverse operazioni logiche, e i moderni dispositivi FPGA avanzati utilizzano tecnologie di connessione molto avanzate come NoC.
La programmazione degli FPGA (e CPLD) consiste nel definire connessioni logiche e funzioni utilizzando linguaggi di descrizione hardware (HDL) come VHDL o Verilog. La configurazione, specialmente per dispositivi più semplici, può essere effettuata anche utilizzando uno schema logico, posizionando e collegando componenti logici tipici. Configurare un FPGA richiede conoscenze di progettazione di circuiti digitali. La programmazione di un microcontrollore utilizza linguaggi di programmazione strutturati o orientati agli oggetti. Oggi, la maggior parte delle applicazioni si allontana dall'assembler di basso livello verso linguaggi di alto livello come C, C++, Java e altri. La programmazione di un microcontrollore assomiglia alla programmazione di computer "grandi", rendendola più facile per la maggior parte dei programmatori, che spesso mancano di conoscenze sul funzionamento e sull'ottimizzazione dei blocchi logici. La memoria di programma dell'FPGA memorizza la configurazione, mentre la memoria del microcontrollore memorizza comandi e parametri.
Tabella 2. Confronto di parametri selezionati di microcontrollori e FPGA
| Caratteristica/parametro | Microcontrollore | FPGA |
|---|---|---|
| Flessibilità applicativa | Alta | Alta |
| Prezzo | Basso o medio | Alto o molto alto |
| Sicurezza applicativa | Susceptibile ad accessi non autorizzati | Susceptibile ad accessi non autorizzati |
| Velocità operativa | Bassa rispetto agli FPGA | Alta |
| Capacità di memoria / dimensione applicativa | Da molto piccola a molto grande | Alta o molto alta |
| Applicazione hardware | Semplice | Complessa o molto complessa |
| Possibilità di funzionamento analogico | Nessuna o limitata | |
| Programmazione | In assembler o linguaggi di alto livello | In linguaggi di configurazione hardware |
La caratteristica più importante dei dispositivi ASIC, come indicato dal loro nome, è che sono progettati per eseguire un compito specifico. Questo potrebbe essere, ad esempio, ricevere e decodificare un segnale radio, controllare un modello di display specifico, o altro. Si noti che un ASIC non deve necessariamente essere programmabile, anche se ne esistono alcuni disponibili commercialmente contenenti un core di processore per i quali possono essere create applicazioni.
Il confine tra un circuito integrato tipico e un dispositivo ASIC è molto sottile. Sono principalmente separati dal volume di produzione; gli ASIC sono prodotti in numeri più piccoli rispetto ai circuiti integrati prodotti in massa. Molti produttori offrono circuiti integrati senza indicare se sono prodotti in massa o ASIC.
L'architettura di un ASIC è definita dal progettista e non può essere modificata dopo la produzione. Di solito, quando gli ASIC hanno un core di processore, non è necessario sviluppare programmi, ma solo impostare alcuni parametri specifici. Allo stesso modo, il tipo di comunicazione con l'ambiente e i formati dei dati sono definiti durante la progettazione, e anche se è possibile passare tra diversi tipi, non possono essere introdotte modifiche.
Rispetto alla configurazione degli FPGA, il processo di progettazione degli ASIC è più complesso e costoso, richiedendo possibilmente conoscenze specialistiche oltre alla progettazione di circuiti digitali, ma il prodotto finale è più ottimizzato per applicazioni specifiche, prestazioni ed efficienza energetica.
Gli ASIC sono utilizzati in applicazioni che richiedono alte prestazioni con basso consumo energetico e dimensioni miniature. La specializzazione consente loro di offrire eccellenti parametri pratici. Inoltre, gli ASIC sono solitamente pronti all'uso immediatamente dopo la saldatura o il posizionamento in un socket e non necessitano di caricare configurazioni da memoria esterna. Possono anche avere funzionalità miste o essere puramente analogici. Questo non è possibile con gli FPGA, che forniscono prestazioni molto elevate mediante l'elaborazione parallela di dati digitali, dopo la conversione da analogico a digitale e viceversa.
Gli ASIC pronti all'uso possono costare molte volte meno degli FPGA. Sono molto più costosi e richiedono più tempo per la progettazione, ma questi costi si ammortizzano su volumi tipicamente grandi. Questo avviene a scapito della mancanza di capacità di riconfigurazione, ma non è sempre necessaria. Analogamente ai microcontrollori, gli FPGA possono essere utilizzati per prototipare ASIC, ma gli ASIC non possono modellare il funzionamento degli FPGA. Ovviamente, qui ci riferiamo a una modellazione che consente di registrare una configurazione utile per FPGA, non solo a raggiungere funzionalità simili.
Tabella 3. Confronto di parametri selezionati di ASIC e FPGA
| Caratteristica/parametro | ASIC | FPGA |
|---|---|---|
| Flessibilità applicativa | Molto bassa | Alta |
| Prezzo | Basso o medio | Alto o molto alto |
| Sicurezza applicativa | Alta | Susceptibile ad accessi non autorizzati |
| Velocità operativa | Alta | Alta |
| Capacità/dimensione applicativa | Bassa o nessuna | Alta o molto alta |
| Applicazione hardware | Semplice | Complessa o molto complessa |
| Possibilità di funzionamento analogico | Dipende dal design | Nessuna o limitata |
| Programmazione | Capacità limitata o non richiesta | In linguaggi di configurazione hardware |
Bibliografia:
Transfer Multisort Elektronik (TME) è uno dei maggiori distributori mondiali di componenti elettronici, parti elettrotecniche, attrezzature da laboratorio e automazione industriale. Il catalogo include oltre 1.500.000 di prodotti di 1.300 produttori leader. I moderni centri logistici di TME a Łódź e Rzgów (Polonia), con una superficie complessiva di oltre 40.000 m², spediscono quasi 6.000 pacchi al giorno a clienti in più di 150 paesi.
TME investe anche nello sviluppo delle conoscenze e competenze di giovani ingegneri e appassionati di elettronica attraverso il progetto TME Education e supporta la comunità tecnologica organizzando la serie di eventi TechMasterEvent, promuovendo l’innovazione e lo scambio di esperienze.