FPGA: tutto ciò che avreste sempre voluto sapere sui Field Programmable Gate Array

FPGA guida

Tutto ciò che avreste sempre voluto sapere sul mondo dei Field Programmable Gate Array verrà svelato in questo articolo: come nasce questo fantastico dispositivo, quali sono i suoi antenati, la storia della sua evoluzione e, soprattutto, lo stato attuale della tecnologia. Vedrete cosa può nascondersi all'interno di un chip e quali innovazioni hanno portato i grandi vendor negli ultimi tempi: l'alta velocità di comunicazione, l'elevatissimo grado di integrazione, la possibilità di ridurre il numero di componenti su una scheda elettronica digitale. Nei prossimi articoli vedremo anche come fare per programmarli: il VHDL, il Verilog, i software messi a disposizione dai vendor. L'FPGA non avrà più segreti per noi!

Da sempre l'uomo è affascinato dall'ignoto, da ciò che non può comprendere perchè non visibile a occhio nudo, e quello che si propone questo articolo è di farvi conoscere l'affascinante mondo che si nasconde all'interno di un circuito integrato chiamato FPGA. Immaginate una scheda elettronica, con un microcontrollore che funga da cervello, con un DSP per l'elaborazione dei segnali digitali, con degli oscillatori al quarzo, con dei convertitori ADC per ricevere segnali analogici dal mondo esterno, con delle memorie RAM...

Tutto ciò ora si trova all'interno di un piccolo oggettino nero che non ci mostra nulla all'esterno, ma riesce a compiere prodigi. Per chi già conosce la tecnologia dei Field Programmable Gate Array, non me ne vogliate, ma partirò da molto lontano (non troppo comunque, per non essere noioso), in modo da riuscire a coinvolgere anche chi non ha mai avuto il piacere di avvicinarsi a questo mondo in continua evoluzione. Field Programmable Gate Array vuol dire proprio: Array di porte logiche programmabile sul campo.

Importantissimo: programmabile non vuol dire che abbiamo a che fare con un microprocessore, o un microcontrollore, da far funzionare con un linguaggio C-like e tante istruzioni e routine che girano a piacimento. In passato i sistemi digitali erano progettati disegnando porte logiche, macchine a stati finiti, e poi i disegni erano inviati alle fonderie che producevano il silicio. Il processo era davvero macchinoso, lungo, costoso e, soprattutto, per pochi eletti! Con l'evoluzione della tecnologia, con il miniaturizzarsi dei circuiti, è nato un circuito integrato che contiene milioni di porte logiche, milioni di Flip-Flop, numerosi banchi di memorie a cui basta dire quali usare e quali no, e come connetterli tra di loro, e ciò che vogliamo realizzare è pronto sul campo. In molti diranno: ma cosa devo farci, io uso Arduino e programmo in modo semplice e veloce. In realtà l'FPGA è un oggetto altamente professionale, e se qualcuno pensa di utilizzarlo per togliersi qualche sfizio divertente, probabilmente si accorgerà che esistono modi migliori per spendere soldi. Innanzitutto deve esser chiaro che la sua fondamentale caratteristica è quella di essere Hardware, e di funzionare da Hardware, quindi per funzionare non ha bisogno dei tempi di attesa delle funzioni software, ma solo dei tempi di percorrenza delle piste interne. Ma allo stesso tempo, al contrario di tutto ciò che finora avete creduto sull'Hardware, è riprogrammabile sul campo. Di nuovo il termine “programmare” entra in gioco... Prima di entrare nel merito della riprogrammazione, è necessario rispondere alla seguente domanda:

Come nasce l'FPGA?

Per risalire alla nascita dell'FPGA bisogna seguire due filoni temporali paralleli: l'evoluzione di dispositivi a logica programmabile e la storia delle ROM. I più semplici dispositivi a logica programmabile sono senz'altro i PLA (Programmable Logic Array). Si tratta di semplici sistemi basati sul fatto che ogni funzione può essere ricondotta a somme di prodotti logici. Senza entrare troppo nel dettaglio, basti sapere che un PLA è composto da una matrice d'ingresso di porte logiche AND programmabili, collegate con una serie di OR programmabili. Successivamente vi sono stati introdotti dei FLIP-FLOP per fornire anche delle funzioni sequenziali. La prima evoluzione ha portato alla nascita dei PAL (Programmable Array Logic). Il filone storico delle ROM invece vede la prima evoluzione nelle PROM, memorie ROM programmabili attraverso una struttura di porte logiche AND e OR, che opportunamente programmate fornivano la funzione desiderata. Ma i primi circuiti programmabili potevano essere scritti una sola volta, dato che la programmazione avveniva tramite fusibile, annullando fisicamente il collegamento tra porte logiche attraverso una sovracorrente, bruciando quindi il fusibile, oppure tramite antifusibile, cioè trasformando un collegamento di silicio amorfo in collegamento in silicio policristallino. La svolta è avvenuta grazie ai dispositivi riprogrammabili sul campo, quali le GAL e CPLD, e le EPROM. GAL (Generic Array Logic) della Lattice Semiconductor sono i primi dispositivi riprogrammabili. Nati grazie all'avvento dei MOSFET, hanno raggiunto una maggiore integrazione dei predecessori e soprattutto la possibilità di riprogrammare elettricamente il dispositivo. In seguito si è giunti alle CPLD (Complex Programmable Logic Device), circuiti in grado di svolgere, sempre previa programmazione, semplici funzioni combinatorie, e che si distinguono dai predecessori soprattutto per la taglia. I GAL contenengono centinaia di porte logiche, con le CPLD si sale di ordine di grandezza. Le EPROM (Erasable Programmable Read Only Memory) rappresentano l'evoluzione delle PROM. Caratteristica principale è la riprogrammabilità, attraverso raggi UV, in modo da avere un ulteriore grado di libertà. Altra evoluzione è rappresentata dalle EEPROM, che a differenza della precedente è riprogrammabile elettricamente, attraverso dei transistor di controllo. In figura 1 vediamo come sono composti i transistor di controllo di queste ultime 2 evoluzioni delle PROM :

 

Figura 1: Struttura dei transistor di controllo
Figura 1: Struttura dei transistor di controllo

 

La programmazione avviene comandando i Floating Gate, in modo da ottenere il comportamento desiderato. Eliminando le cariche della programmazione attraverso raggi UV per le EPROM, elettricamente per le EEPROM, si rende il transistor di nuovo programmabile. L'FPGA unisce la riprogrammabilità delle EEPROM con le caratteristiche funzionali delle CPLD. Aggiunge un più alto grado di integrazione e nelle sue evoluzioni aggiunge un numero sempre maggiore di feature, realizzando al suo interno un mondo sempre più indipendente ed autonomo. Le più recenti evoluzioni parlano di un numero di registri e di elementi logici dell'ordine del milione. Con questo nuovo dispositivo si possono raggiungere risultati degni degli attuali ASIC, ma certamente con il vantaggio della ripogrammabilità. Inizialmente usati soprattutto in fase di prototipazione, con l'efficienza raggiunta si prestano ora benissimo, dati anche i costi decisamente ridotti, a sostituire gli ASIC in molti progetti.

A questo punto il concetto di riprogrammazione dovrebbe essere più chiaro. Clickando sul seguente link si può avere un ulteriore approfondimento su come sia fatta un'FPGA.

Ora la domanda da porsi è:

come faccio a programmare e riprogrammare un'FPGA?

In questa marea di porte logiche e flip flop, potete certamente divertirvi a disegnare le varie porte and e or, multiplexer, flip flop, ma i sistemi complessi per cui l'FPGA è nata non possono certamente essere progettati in questo modo, non più oramai. Esistono infatti dei linguaggi di descrizione Hardware, chiamati HDL (Hardware Description Language) che hanno il compito di rendere più semplice la realizzazione di sistemi complessi. I più comuni sono senz'altro VHDL e Verilog. In molti casi si ha a che fare con istruzioni comuni, if-then-else, ciclo for, case, ma in tal caso queste istruzioni non gireranno su routine, bensì serviranno solo al tool di compilazione per essere tradotte in sistemi di porte logiche. Come piccolo esempio, possiamo scrivere:

if a = '1' then

           b<= '0';

      else 

           b<='1';

       end if;

questo vuol dire che b è il negato di a. Equivale, ovviamente, a dire:

b <= not(a);

In hardware queste 2 istruzioni vengono entrambe tradotte inserendo semplicemente una porta not (un transistor invertente) tra i segnali a e b. Stessa cosa si può dire di un costrutto case, che, se bene impostato, con buona probabilità oserei dire che verrà tradotto con un Multiplexer.

Ma per molte feature i vendor mettono a disposizione, attraverso i loro potenti software di sviluppo, delle Macro che rendono molto semplice l'inserimento, ad esempio, di memorie, di interfacce verso altri dispositivi, etc.

Sempre questi software permettono poi, una volta realizzato il sistema, di programmare l'FPGA in modo che esegua i comandi che desideriamo, ma come questo può esser fatto sarà oggetto di un articolo successivo.

...più in generale

Essendo questo articolo introduttivo, però, vorrei non entrare troppo nel merito del singolo bit, bensì vorrei anticiparvi che le ultime evoluzioni hanno consentito di inserire all'interno di un'FPGA dei processori di tipo ARM Cortex A8, ad esempio, dei convertitori ADC, delle memorie Flash, dei SERDES per comunicazioni seriali ad alta velocità. Tutto ciò ha come impatto incredibile una riduzione decisamente interessante dello spazio utilizzato. Per inserire un microprocessore c'è bisogno, oltre che del componente Microprocessore esterno, di un'interfaccia che consenta la comunicazione con gli altri dispositivi, con eventuali schede esterne, il tutto contornato da resistenze e condensatori che ora vedono una drastica riduzione. E vi ricordo di nuovo che, tutto ciò che viene realizzato al suo interno, può essere rivisto, corretto, ampliato successivamente, senza dover ricorre a metodi costosi, quali la realizzazione di una nuova scheda. Altra cosa importantissima, i vendor mettono a disposizione dei tool potentissimi, che semplificano l'utilizzo di tante feature che in tempi neppure troppo lontani avrebbero richiesto mesi e mesi di ricerca e sviluppo. Xilinx ed Altera detengono senz'altro gran parte del mercato, grazie a prodotti che si inseriscono in varie fasce di mercato (dai più economici Altera Cyclone e Xilinx Spartan, ai più onerosi Altera Stratix e Xilinx Virtex e Zynq). Ma certamente non sono le uniche: La Microsemi, che produce sistemi adatti a tecnologie spaziali grazie alla sua garantita robustezza contro le radiazioni elettromagnetiche (e a tal proposito vi consiglio di leggere l'articolo al seguente link, davvero interessante!!!); la Lattice Semiconductor, che aggredisce piuttosto le fasce medio basse di mercato, etc. Ciò che più impressiona è senza dubbio la velocità con cui evolvono queste tecnologie. Nella nuova generazione di FPGA, che utilizza tecnologie molto spinte (14nm), abbiamo interi System on Chip completi di tutto ciò di cui si ha bisogno ad accompagnare le innumerevoli celle programmabili. Nelle immagini seguenti possiamo vedere come i maggiori competitors del settore si siano affacciati a questo nuovo modo di intendere l'FPGA, con la Altera Stratix 10 e la Xilinx Zynq:

Figura 2: Schema a blocchi di una Stratix 10

 

Figura 3: Schema a blocchi di una Zynq

Un punto saliente su cui le nuove famiglie stanno cercando di ottenere risultati strepitosi sono le interfacce seriali ad alta velocità. Di anno in anno si raggiungono risultati davvero incredibili, fino a raggiungere una capacità di trasmissione dell'ordine del Terabit/sec attraverso un elevato numero di trasceivers, ognuno capace di trasmettere anche decine di Gbit per secondo di dati seriali.

Sono convinto che questa panoramica generale vi abbia incuriosito a tal punto da non vedere l'ora che escano i prossimi articoli, dove vedremo i maggiori vendor di FPGA a confronto, evidenziando le differenze tra dispositivi, tool di sviluppo e strategie di mercato.

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

12 Comments

  1. GianlucaAngelone Gianluca Angelone 10 settembre 2013
  2. Andres Reyes Andres Reyes 10 settembre 2013
  3. GianlucaAngelone Gianluca Angelone 10 settembre 2013
  4. Tiziano.Pigliacelli Tiziano.Pigliacelli 10 settembre 2013
  5. Tiziano.Pigliacelli Tiziano.Pigliacelli 10 settembre 2013
  6. Giorgio B. Giorgio B. 11 settembre 2013
  7. Tiziano.Pigliacelli Tiziano.Pigliacelli 12 settembre 2013
  8. Giorgio B. Giorgio B. 13 settembre 2013
  9. Mino_73 Mino_73 24 gennaio 2015
  10. Mino_73 Mino_73 31 gennaio 2015
    • Tiziano.Pigliacelli Tiziano.Pigliacelli 31 gennaio 2015

Leave a Reply

Flip&Click Arduino e Python compatibile

Fai un abbonamento Platinum (EOS-Book + Firmware), ricevi in OMAGGIO la nuova Flip&Click, inviaci il tuo progetto e OTTIENI IL RIMBORSO