Nozioni fondamentali sugli FPGA: Una guida per principianti

Per voi che pensate in modo binario: no, non vi siete persi le parti da 1 al 4. Questa è una breve introduzione al dispositivo elettronico che preferisco: un array di porte programmabili sul campo (FPGA). Quando parlo degli FPGA, molti mi dicono: "Non so come funzionano", "Sono troppo complicati" o "Non posso programmarli in C". Poiché non mi piace vedere questi dispositivi così sorprendenti essere scherniti, cercherò di affrontare alcuni di questi problemi comuni di seguito e dissipare ogni dubbio.

Che cos'è un array di porte programmabili sul campo?

La risposta lunga: dal nome, si potrebbe dedurre che si tratta di una struttura programmabile di porte logiche. Più o meno, ma non del tutto, perché la matrice logica interna non è effettivamente implementata mediante porte. Definiamo invece i blocchi della matrice "elementi logici". Questi normalmente consistono di una tabella di ricerca (LUT) che implementa una funzione logica arbitraria e alcuni circuiti di supporto come multiplexer, sommatori e flip-flop. Spesso si parla di questa serie di elementi logici con il termine "il tessuto FPGA".

Figura 1: Esempio di un elemento logico FPGA. (Immagine per gentile concessione di Wikimedia Commons)

Per semplificare, mi piace pensare un FPGA come una scatola di elementi costitutivi colorati senza marchio per la creazione di circuiti digitali. Posso collegare i blocchi tra loro come mi pare per adattarli alla mia applicazione. Se sapete descrivere come si comporta un circuito digitale, potete crearlo all'interno di un FPGA con un numero di elementi logici sufficiente. Servono 25 uscite PWM? Nessun problema. Serve un protocollo di comunicazione speciale? Programma il codice hardware per gestirlo.

Perché dovrei avere bisogno di un FPGA?

Un FPGA viene utilizzato per implementare un sistema digitale, ma anche un semplice microcontroller può spesso date lo stesso risultato. I microcontroller sono economici e facili da inserire su una PCB. Gli FPGA sono strumenti potenti, ma potrebbero non essere adatti a tutti i casi. Hanno più requisiti di potenza, layout e di circuiti esterni e per questo possono essere proibitivi. L'uso di un FPGA sensibilmente più costoso e con molti requisiti speciali potrebbe sembrare ridicolo.

Ma potreste aver già indovinato il primo motivo per cui un FPGA è molto utile: la sua flessibilità. Avere blocchi logici configurabili significa non aver le mani legate in fatto di hardware. Non si esauriscono mai i timer o gli UART fintantoché vi sono elementi logici disponibili per crearne altri. Essere in grado di riconfigurare il progetto più avanti può anche estendere il ciclo di vita di un prodotto man mano la tecnologia e i requisiti che cambiano.

Il secondo motivo è la velocità. Un microcontroller esegue le istruzioni una alla volta, in modo sequenziale. Una struttura FPGA è intrinsecamente parallela a causa della sua natura hardware. Ciò consente che si verifichino varie cose simultaneamente, il che è utile per operazioni come FFT o l'elaborazione grafica che può essere costosa su un processore sequenziale. Gli FPGA hanno anche più opzioni I/O ad alta velocità rispetto a un tipico microcontroller come LVDS e transceiver con capacità di oltre 10 Gbps per protocolli come HDMI.

Come si programma un FPGA?

Gli FPGA usano un tipo speciale di linguaggio chiamato HDL o Hardware Description Language. È disponibile principalmente in due versioni: Verilog e VHDL. Quasi tutte le suite di sviluppo come Quartus o Vivado supporteranno entrambe per lasciarvi scegliere quella che preferite. Questi linguaggi sono quindi "sintetizzati", una procedura analoga alla compilazione per i microcontroller. Lo strumento di sintesi istruisce l'FPGA su come collegare i suoi elementi logici per creare l'effetto descritto dal codice programmato. Ricordare che il codice viene tradotto nell'hardware e non le istruzioni della CPU è molto importante all'inizio del lavoro.

Per semplificare lo sviluppo, i fornitori di FPGA offrono un catalogo di blocchi di codice di uso comune che possono essere facilmente inseriti in un progetto. Questi includono moltiplicatori, RAM, blocchi di comunicazione e molto altro che possono essere configurati e aggiunti a un progetto senza dover mai guardare il codice HDL in questione, accelerando i tempi di sviluppo.

Figura 2: Diagramma a blocchi parziale che mostra i blocchi IP dal catalogo Xilinx e HLS. (Immagine per gentile concessione di eewiki.net)

Alcuni produttori offrono anche di strumenti di High Level Synthesis (HLS) in grado di tradurre una funzione scritta in C o C++ in un blocco di codice HDL. L'utilizzo di questi strumenti riduce notevolmente la barriera all'ingresso per gli sviluppatori con competenze software, poiché isolano da alcuni dettagli di basso livello.

Non siete ancora convinti? Una delle caratteristiche che preferisco di un FPGA è la possibilità di utilizzare un processore soft. Questo è un processore completo costruito con elementi logici dell'FPGA. Con questo, è possibile creare hardware di supporto personalizzato per il processore e scrivere la propria applicazione in C. Un semplice sistema con processore soft può essere impostato e programmato in pochi minuti. Se comunque serve un processore tradizionale, date un'occhiata ai SoC che integrano un processore FPGA e un processore ARM hard in un unico pacchetto.

Riassumendo, gli FPGA sono più costosi e più difficili da gestire rispetto a un tipico microcontroller, ma possono offrire molta più potenza e flessibilità nel caso serva. Man mano che la tecnologia migliora e gli FPGA diventano meno costosi con livelli di integrazione più elevati, potrebbero addirittura sostituire i microcontroller tradizionali. Quindi, se quanto ho detto vi alletta, iniziate a usare gli FPGA oggi stesso, per essere sempre al passo con i tempi. Se cercate una scheda di sviluppo a basso costo per iniziare, provate queste di vari nostri fornitori di FPGA: DE10-Lite di Terasic, Arty di Digilent, Mobile Dev Board di Lattice o Maker Kit di Microsemi.

Informazioni su questo autore

Image of Taylor Roorda Taylor Roorda, Associate Applications Engineer presso DigiKey, è entrato a far parte dell'azienda nel 2015 e le sue principali aree di interesse sono i sistemi embedded, la logica programmabile e l'elaborazione di segnale. Ha conseguito una laurea in ingegneria elettrica presso North Dakota State University e passa il tempo libero a suonare la chitarra e a scrivere musica.
More posts by Taylor Roorda
 TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum