Arrow Electronic Components Online

Nozioni di base sugli FPGA: architettura, applicazioni e utilizzi

Field Programmable Gate Arrays - FPGA09 mag 2024
Una persona tiene in mano un tablet che visualizza dati mentre supervisiona un braccio robotico che assembla un telaio di automobile in una fabbrica moderna.
Visualizza tutti gli articoli

Il Field Programmable Gate Array (FPGA) è un circuito integrato che consiste in blocchi hardware interni con interconnessioni programmabili dall'utente per personalizzare il funzionamento per un'applicazione specifica. 

Che cos'è un FPGA?

Field Programmable Gate Array (FPGA) è un circuito integrato costituito da blocchi hardware interni con interconnessioni programmabili dall'utente per personalizzare il funzionamento per un'applicazione specifica. Le interconnessioni possono essere facilmente riprogrammate, consentendo a un FPGA di adattarsi alle modifiche di un progetto o persino di supportare una nuova applicazione durante la vita utile del componente.

L'FPGA ha le sue origini in dispositivi precedenti come le memorie di sola lettura programmabili (PROM) e i dispositivi logici programmabili (PLD). Questi dispositivi potevano essere programmati in fabbrica o sul campo, ma utilizzavano la tecnologia a fusibili (da qui l'espressione “bruciare una PROM”) e non potevano essere modificati una volta programmati. Al contrario, l'FPGA memorizza le informazioni di configurazione in un supporto riprogrammabile come la RAM statica (SRAM) o la memoria flash. I produttori di FPGA includono IntelLattice SemiconductorMicrochip Technology e Microsemi.

Architettura FPGA

Un’architettura FPGA di base (Figura 1) consiste in migliaia di elementi fondamentali denominati configurable logic blocks (CLB), circondati da un sistema di interconnessioni programmabili, denominato fabric, che instrada i segnali tra i CLB. I blocchi di input/output (I/O) fungono da interfaccia tra l’FPGA e i dispositivi esterni.

A seconda del produttore, il CLB può anche essere denominato blocco logico (LB), elemento logico (LE) o cella logica (LC).

This image displays a schematic block diagram of an FPGA architecture, highlighting its main components. The diagram features labeled sections for Logic Blocks, I/O Blocks, and Programmable Routing, each shown in detail with circuit symbols. The central grid structure is surrounded by input/output connections, illustrating the modular and reconfigurable nature of the device.

L'architettura FPGA fondamentale (Fonte immagine: National Instruments)

Figura 1

Un CLB individuale (Figura 2) è costituito da diversi blocchi logici. Una lookup table (LUT) è una caratteristica distintiva di un FPGA. Una LUT memorizza un elenco predefinito di uscite logiche per qualsiasi combinazione di ingressi: le LUT con quattro-sei bit di ingresso sono ampiamente utilizzate. Funzioni logiche standard come multiplexer (mux), full adder (FA) e flip-flop sono anch'esse comuni.

A detailed block diagram of a logic cell, featuring two 3-LUT (three-input look-up tables), a full adder (FA), and a D flip-flop (DFF). The diagram illustrates the flow of signals such as 'carry in', 'carry out', and 'clk', as well as the use of multiplexers (mux) to route signals. Key numeric concepts like '3-LUT' and 'DFF' are explicitly labeled, and the diagram is annotated with circled numbers for reference.

Un CLB semplificato: la LUT a quattro ingressi è formata da due unità a tre ingressi. (Fonte immagine: Wikipedia)

Figura 2

Il numero e la disposizione dei componenti nel CLB variano in base al dispositivo; l’esempio semplificato nella Figura 2 contiene due LUT a tre ingressi (1), un FA (3) e un flip-flop di tipo D (5), oltre a un mux standard (2) e due mux, (4) e (6), che vengono configurati durante la programmazione dell’FPGA.

Questo CLB semplificato dispone di due modalità operative. In modalità normale, le LUT sono combinate con Mux 2 per formare una LUT a quattro ingressi; in modalità aritmetica, le uscite delle LUT sono utilizzate come ingressi per il FA insieme a un ingresso di riporto proveniente da un altro CLB. Mux 4 seleziona tra l'uscita del FA o l'uscita della LUT. Mux 6 determina se l'operazione è asincrona o sincronizzata al clock dell'FPGA tramite il flip-flop D.

Gli FPGA di generazione attuale includono CLB più complessi in grado di eseguire più operazioni con un singolo blocco; i CLB possono combinarsi per operazioni più complesse come moltiplicatori, registri, contatori e persino funzioni di elaborazione del segnale digitale (DSP).

CPLD vs FPGA

In origine, gli FPGA includevano i blocchi nella Figura 1 e poco altro, ma ora i progettisti possono scegliere tra prodotti con un’ampia gamma di funzionalità. Dispositivi meno complessi come i dispositivi logici programmabili semplici (SPLD) e i dispositivi logici programmabili complessi (CPLD) colmano il divario tra i dispositivi logici discreti e gli FPGA di livello base.

Gli FPGA entry-level enfatizzano il basso consumo energetico, la bassa densità logica e la bassa complessità per chip. I dispositivi con funzionalità più avanzate aggiungono blocchi funzionali dedicati a funzioni specifiche: esempi includono componenti per la gestione del clock, loop ad aggancio di fase (PLL), serializzatori e deserializzatori ad alta velocità, MAC Ethernet, controller PCI express e transceiver ad alta velocità. Questi blocchi possono essere implementati con CLB—detti IP soft—oppure progettati come circuiti separati; ossia, IP hard. I blocchi IP hard offrono prestazioni migliori a scapito della riconfigurabilità.

Nella fascia alta, la famiglia di prodotti FPGA include complessi componenti system-on-chip (SoC) che integrano l’architettura FPGA, hard IP e un core CPU di microprocessore in un singolo componente. Rispetto a dispositivi separati, un SoC FPGA offre una maggiore integrazione, minore consumo energetico, dimensioni della scheda più ridotte e comunicazione a larghezza di banda maggiore tra il core e gli altri blocchi.

FPGA SoC

Gli FPGA SoC includono un’ampia gamma di capacità di elaborazione per adattarsi a diverse applicazioni. Un FPGA SoC a basso costo e a basso consumo, come Intel’s Cyclone V, ad esempio, è destinato ad applicazioni ad alto volume quali azionamenti di controllo motori industriali, bridging di protocolli, schede di elaborazione video e dispositivi portatili. Il dispositivo (Figura 3) è costituito da due parti distinte: la porzione FPGA e un hard processor system (HPS) basato su un Arm Cortex-A9 MPCORE a 32 bit single- o dual-core, con frequenza di 925 MHz. Ciascuna parte contiene un proprio set di periferiche, che include hard IP di fornitori terzi.

This diagram illustrates the architecture of the Intel Cyclone V SoC FPGA, divided into HPS and FPGA portions. The HPS portion includes components such as Flash Controllers, SDRAM Controller Subsystem, Cortex-A9 MPU Subsystem, and more. The FPGA portion features elements like Control Block, User I/O, HSSI Transceivers, FPGA Fabric, and Hard PCIe. The diagram visually separates the two main sections and highlights their respective subsystems and interfaces.

Il diagramma a blocchi interno del SoC Cyclone V (Fonte immagine: Cornell University)

Figura 3

All'altro estremo della gamma, Stratix 10 SX è destinato ad applicazioni ad alte prestazioni nelle comunicazioni, nell'accelerazione dei data center, nel calcolo ad alte prestazioni (HPC), nell'elaborazione radar e nella prototipazione ASIC; tale FPGA include un Arm Cortex-A53 quad-core a 64 bit con frequenza fino a 1,5 GHz.

Progettazione FPGA

Come trasformiamo questa raccolta di migliaia di blocchi hardware nella configurazione corretta per eseguire l'applicazione? Un progetto basato su FPGA inizia definendo i compiti di elaborazione richiesti nello strumento di sviluppo, quindi compilandoli in un file di configurazione che contiene informazioni su come collegare i CLB e gli altri moduli. Il processo è simile a un ciclo di sviluppo software, con la differenza che l'obiettivo è progettare l'hardware stesso piuttosto che un insieme di istruzioni da eseguire su una piattaforma hardware predefinita.

I progettisti hanno tradizionalmente utilizzato un linguaggio di descrizione hardware (HDL) come VHDL (Figure 4) o Verilog per progettare la configurazione FPGA.

VHDL code implementing a signed adder entity and architecture. The code includes ports for aclr, clk, a, b, and q, with signal processing and assertion for vector length. Numeric values such as '1164' and '35' are visible in the code lines and library references. Syntax highlighting distinguishes keywords, variables, and comments.

Codice VHDL di esempio per un sommatore con segno (Fonte immagine: Wikipedia)

Figura 4

Once the FPGA design has been created and verified using HDL, the compiler takes the text-based file and generates a configuration file that contains information on how the components should be wired together. Even if the HDL code has no errors, choosing the wrong FPGA may still cause the compilation to fail—for example, the FPGA runs out of a specific resource type or the compiler cannot create the required routes between components.

Una sfida dell'approccio HDL è che la configurazione di un FPGA richiede sia competenze di programmazione sia una conoscenza dettagliata dell'hardware sottostante, e le competenze richieste non sono ampiamente disponibili.

Di conseguenza, i vendor offrono kit di sviluppo software (SDK) che consentono ai progettisti di sviluppare soluzioni FPGA nei più diffusi linguaggi di alto livello come C/C++, Python e OpenCL. Sono inoltre disponibili strumenti di progettazione per la sintesi di alto livello (HLS); questi vengono eseguiti su un framework come LabVIEW di National Instrument e presentano diagrammi a blocchi grafici invece di righe di codice.

Utilizzi degli FPGA: una scelta interessante per determinate applicazioni

La capacità di configurare l'hardware dell'FPGA, riconfigurarlo quando necessario e ottimizzarlo per un particolare insieme di funzioni rende l'FPGA un'opzione interessante in molte applicazioni.

Gli FPGA sono spesso utilizzati per fornire una soluzione personalizzata in situazioni in cui lo sviluppo di un ASIC sarebbe troppo costoso o richiederebbe troppo tempo. Un'applicazione FPGA può essere configurata in ore o giorni invece che in mesi. Naturalmente, la flessibilità dell'FPGA ha un prezzo: è probabile che un FPGA sia più lento, richieda una maggiore area del PCB e consumi più energia rispetto a un ASIC equivalente.

Anche quando un ASIC viene progettato per la produzione in grandi volumi, gli FPGA sono ampiamente utilizzati per la validazione del sistema, inclusa la validazione pre-silicon, la validazione post-silicon e lo sviluppo del firmware. Ciò consente ai produttori di validare il proprio progetto prima che il chip venga prodotto in fabbrica.

Applicazioni FPGA

Molte applicazioni si basano sull'esecuzione parallela di operazioni identiche; la capacità di configurare i CLB dell'FPGA in centinaia o migliaia di blocchi di elaborazione identici trova applicazione nell'elaborazione delle immagini, nell'intelligenza artificiale (AI), negli acceleratori hardware per data center, nel networking enterprise e nei sistemi avanzati di assistenza alla guida (ADAS) per il settore automotive.

Molte di queste aree applicative stanno cambiando molto rapidamente man mano che i requisiti evolvono e vengono adottati nuovi protocolli e standard. Gli FPGA consentono ai produttori di implementare sistemi che possono essere aggiornati quando necessario.

Un buon esempio di utilizzo degli FPGA è la ricerca ad alta velocità: Microsoft utilizza FPGA nei propri data center per eseguire gli algoritmi di ricerca di Bing. L'FPGA può essere modificato per supportare nuovi algoritmi man mano che vengono creati. Se le esigenze cambiano, il progetto può essere riutilizzato per eseguire routine di simulazione o modellazione in un'applicazione HPC. Questa flessibilità è difficile o impossibile da ottenere con un ASIC.

Altri utilizzi degli FPGA includono il settore aerospaziale e della difesa, l'elettronica medicale, la televisione digitale, l'elettronica di consumo, il controllo dei motori industriali, gli strumenti scientifici, i sistemi di cybersecurity e le comunicazioni wireless.

Storia degli FPGA: cosa viene dopo?

Con queste applicazioni emergenti, il mercato degli FPGA sta crescendo a un ritmo sostenuto: nel 2016 era valutato 5,34 miliardi di dollari e si prevede che cresca fino a 9,50 miliardi di dollari nel 2023, secondo i ricercatori di settore MarketsandMarkets. Si tratta di un tasso di crescita annuale composto (CAGR) dell'8,5%, rispetto a un CAGR di circa il 2% per il mercato dei microprocessori generici, molto più ampio (74 miliardi di dollari).

La crescita esponenziale dei dati e l'emergere di settori in rapida evoluzione come AI, machine learning, HPC e la genomica richiedono architetture rapide, flessibili e adattabili. Gli FPGA sono ben posizionati per sfruttare queste nuove opportunità.

Tag articolo

Dispositivi Programmabili
Array di gate programmabili sul campo - FPGAs
Intelligenza Artificiale (AI)
Apprendimento Automatico