L'espressione "field programmable" si riferisce alla capacità di un FPGA di essere programmato "sul campo" o dopo che il chip è stato rilasciato dal produttore. Xilinx, un produttore di tecnologia, ha introdotto per la prima volta gli FPGA nel 1985.
Gli FPGA possono essere adattati per soddisfare molteplici casi d'uso, compresi scopi emergenti o sperimentali, senza la necessità di modificare o alterare fisicamente il loro hardware. Questa versatilità riconfigurabile è ottenuta tramite una serie di blocchi logici programmabili fissi (PLB) e interconnessioni flessibili che possono essere configurati per eseguire operazioni complesse o per fungere da semplici gate logici. Gli FPGA includono anche elementi di memoria, che vanno da flip-flop a singolo bit fino ad array di memoria molto densi, per lo storage dei dati digitali all'interno del dispositivo.
Gli FPGA sono molto apprezzati per la loro combinazione di elevate prestazioni ed estrema versatilità. Sono particolarmente utili nelle applicazioni che richiedono prestazioni elevate, bassa latenza e flessibilità in tempo reale. Per questo motivo, sono comunemente utilizzati nei settori automobilistico, aerospaziale e delle telecomunicazioni.
Gli FPGA e gli ASIC hanno scopi diversi.
Un ASIC è sviluppato e ottimizzato per un'applicazione specifica e non può essere riconfigurato. I suoi elementi circuitali interni (transistor) sono disposti in una struttura fissa con interconnessioni (cablaggio) fisse e immutabili tra di loro.
Poiché un ASIC ha un solo scopo, include solo gli elementi logici necessari per tale scopo; ad esempio, se un moltiplicatore in virgola mobile non è necessario, non viene incluso nel progetto.
Al contrario, un FPGA può essere configurato e riconfigurato per qualsiasi potenziale applicazione. Come un ASIC, i suoi elementi di circuito interni sono disposti in una struttura fissa (blocchi logici programmabili o PLB), ma con interconnessioni riconfigurabili tra loro. Gli elementi logici di un FPGA sono selezionati per supportare un'ampia varietà di applicazioni, ma risentono del fenomeno "usalo o perdilo" quando elementi logici specifici non vengono utilizzati. Se un moltiplicatore in virgola mobile non è richiesto per una particolare applicazione, ma l'FPGA ne contiene uno, allora quella risorsa non viene utilizzata e rappresenta uno "spazio sprecato" all'interno dell'FPGA.
Sebbene entrambi i dispositivi possano contenere centinaia di milioni di transistor, un ASIC può utilizzare tali transistor per fornire elevata efficienza e prestazioni a discapito della flessibilità. I costi iniziali di sviluppo di un ASIC possono essere esorbitanti, mentre i costi unitari sono relativamente bassi.
Un FPGA utilizza i suoi transistor per offrire alta efficienza e prestazioni elevate ma con un'enorme flessibilità. I costi iniziali per lo sviluppo di un FPGA possono essere estremamente bassi, mentre i costi unitari sono generalmente più elevati. È importante notare che non si tratta di regole certe. Ad esempio, nell'ambito delle prestazioni, i recenti FPGA si sono evoluti per offrire velocità di clock superiori a 500 MHz e sono generalmente realizzati con geometrie di processo al silicio all'avanguardia. In breve, il confine tra FPGA e ASIC diventa sempre più sfocato con ogni nuova generazione di FPGA.
Un FPGA diventa un dispositivo hardware personalizzato configurando i suoi PLB e le interconnessioni utilizzando un linguaggio di descrizione dell'hardware (HDL) standard come Verilog o VHDL.
Le funzioni specifiche basate su FPGA, così come le interconnessioni tra tali funzioni, sono "descritte" in un HDL. La descrizione viene compilata per produrre un file di configurazione FPGA. Utilizzando un linguaggio di descrizione dell'hardware, è possibile utilizzare risorse FPGA integrate (array di memoria, core PCI e molti altri), nonché creare circuiti logici personalizzati (sommatori, multiplexer e altre funzioni specifiche dell'applicazione) da elementi FPGA più primitivi.
In un processo noto come sintesi, il codice HDL viene tradotto in una netlist, una descrizione efficace delle porte logiche e delle interconnessioni necessarie per implementare il codice HDL. La netlist viene quindi mappata sui PLB e sulle interconnessioni che formano fisicamente il circuito unico.
Gli FPGA moderni prodotti da aziende come Intel e Altera offrono un'ampia gamma di funzionalità digitali e analogiche, inclusi notevoli densità logiche, memoria flash, processori integrati e blocchi di elaborazione dei segnali digitali (DSP). Gli FPGA possono essere configurati e riconfigurati modificando gli ingressi e le uscite elettriche, scegliendo quali risorse interne utilizzare e determinando come queste risorse siano collegate tramite risorse di instradamento configurabili. Il risultato finale è una soluzione hardware dedicata per risolvere un problema specifico.
Come per il software, lo sviluppo di progetti FPGA complessi potrebbe essere semplificato utilizzando librerie pre-progettate di varie funzioni e circuiti digitali, denominati core di proprietà intellettuale (IP). Queste librerie sono disponibili per l'acquisto o il noleggio da fornitori di FPGA e fornitori terzi che spesso sono specializzati nello sviluppo di varie funzioni.
Oltre ai tradizionali componenti circuitali come microcontrollori e convertitori, per realizzare le loro funzioni riconfigurabili, i moderni dispositivi FPGA utilizzano una combinazione di vari elementi programmabili.
Questi elementi programmabili sono principalmente blocchi logici configurabili (CLB), interconnessioni programmabili, routing programmabile, blocchi di input/output programmabili (IOB), memoria on-chip e blocchi di elaborazione del segnale digitale (DSP).
I blocchi logici configurabili (CLB) sono il componente principale degli FPGA. I CLB contengono generalmente alcuni elementi logici primitivi (porte logiche, piccole look-up table, flip-flop, multiplexer e molti altri). All'interno del CLB, un flip-flop generalmente funge da principale elemento di memorizzazione dei dati, sebbene le famiglie di dispositivi più recenti possano anche incorporare elementi di memoria superficiale all'interno del CLB.
Le connessioni costruite da segmenti di filo uniti da interruttori elettricamente programmabili forniscono percorsi di instradamento tra i blocchi logici dell'FPGA. Le scatole di commutazione contenenti più interruttori semiconduttori di base sono comunemente utilizzate per stabilire l'interconnessione programmabile dell'FPGA. Queste interconnessioni consentono di collegare le uscite di un'unità specifica o un pad di ingresso a qualsiasi altro elemento o pad all'interno del circuito.
I segmenti di filo prefabbricati vengono uniti tra loro (o lasciati scollegati) tramite interconnessioni programmabili per fornire un'infrastruttura di routing completamente programmabile all'interno di un FPGA. Le risorse di routing sono di natura gerarchica, con una combinazione di cavi lunghi, medi e corti che coprono varie "lunghezze" all'interno dell'FPGA. Questa infrastruttura di routing programmabile, abilitata dalle interconnessioni programmabili, consente agli utenti di configurare le risorse FPGA per l'implementazione di una particolare attività o applicazione.
L'interfaccia tra un FPGA e altri dispositivi esterni è abilitata da blocchi di input/output (I/O) (IOB). Gli IOB sono risorse di input e output programmabili, configurate per adattarsi ai protocolli di qualsiasi dispositivo esterno a cui si connette l'FPGA. Tutti i segnali che entrano o escono dall'FPGA lo fanno tramite pin del dispositivo e IOB associati.
I primi FPGA utilizzavano solo flip-flop (FF) per integrare la memoria nei blocchi logici FPGA. Tuttavia, con l'aumento delle capacità degli FPGA, progetti sempre più complessi hanno richiesto una memoria on-chip dedicata per il buffering e il riutilizzo dei dati. I moderni FPGA utilizzano array di memoria SRAM di grandi dimensioni, look-up table (LUT) più piccole ed elementi flip-flop tradizionali per fornire lo storage necessario per un'applicazione specifica.
Nei primi FPGA, le uniche risorse aritmetiche disponibili erano semplici sommatori; tutto ciò che era più complesso era costruito da elementi logici più primitivi. Tuttavia, con l'avanzare della tecnologia del silicio, negli FPGA sono state incorporate risorse aritmetiche più complesse, arrivando al moderno blocco DSP FPGA. I blocchi DSP forniscono risorse altamente ottimizzate (moltiplicatori, accumulatori e molti altri) per l'implementazione di funzioni aritmetiche ad alte prestazioni.
Il loro utilizzo elimina la necessità di implementare queste funzioni nei CLB per uso generico, liberando così i CLB per altri scopi. Operazioni come il filtraggio digitale, la convoluzione, le trasformate di Fourier, le operazioni trigonometriche e molte altre possono sfruttare queste risorse per ottenere prestazioni in tempo reale in applicazioni che spaziano dall'elaborazione radar, al beamforming, al riconoscimento dei pattern e molto altro.
Gli FPGA sono disponibili in diverse varianti, che offrono diversi tipi di configurabilità, consumo energetico, elementi programmabili e memoria on-chip.
Versatili per natura, gli FPGA sono adatti per molte applicazioni diverse.
Gli FPGA sono ideali per l'elaborazione del segnale e l'acquisizione di dati grazie alla loro capacità di elaborazione parallela ad alta velocità.
Gli algoritmi di elaborazione del segnale ad alta velocità rendono gli FPGA adatti per eseguire le attività di controllo del volo, elaborazione dei sensori e comunicazione utilizzate negli aerei senza pilota come i droni.
I sistemi di controllo industriale utilizzati per monitorare infrastrutture come reti elettriche, raffinerie di petrolio e impianti di trattamento delle acque utilizzano FPGA che possono essere facilmente ottimizzati per soddisfare le esigenze specifiche di vari settori. In questi settori critici, gli FPGA possono essere utilizzati per implementare varie automazioni e funzionalità di crittografia basate su hardware per una cybersecurity efficiente.
Mentre gli FPGA sono soluzioni utili per le attività che richiedono flessibilità, gli ASIC specifici per attività sono spesso più adatti alle operazioni standardizzate. Man mano che vengono sviluppati nuovi sistemi, gli FPGA sono preziosi per lo sviluppo e la prototipazione di nuovi ASIC per tecnologie emergenti.
Gli FPGA aggiungono valore ai data center facilitando server, reti e infrastrutture di storage a banda larga e bassa latenza.
IBM Storage FlashSystem offre resilienza informatica e funzionalità di archiviazione dei dati.
IBM Storage è una famiglia di hardware di data storage, storage definito dal software e software di gestione dello storage.
IBM Technology Expert Labs fornisce servizi infrastrutturali per server, mainframe e storage IBM.