| "Descrizione" by RS232 (2002 pt) | 2026-Jan-29 17:42 |
FPGA (FIELD PROGRAMMABLE GATE ARRAY)
Definizione
Una FPGA è un circuito integrato digitale riconfigurabile che consente di implementare, dopo la produzione, logiche hardware personalizzate: reti combinatorie, macchine a stati, pipeline, interfacce, acceleratori e persino intere CPU “soft-core”. A differenza di una CPU o di una MCU, che eseguono istruzioni in sequenza su un’architettura fissa, una FPGA permette di “scrivere hardware” definendo direttamente connessioni e temporizzazioni a livello di blocchi logici e routing interno.

Il termine “field programmable” indica che la programmazione avviene “sul campo”, cioè dall’utente o dal costruttore del sistema, tramite un file di configurazione (bitstream) caricato all’avvio o memorizzato in una memoria non volatile esterna/integrata (dipende dalla famiglia).
Concetto chiave: hardware riconfigurabile
In una FPGA non si programma un flusso di istruzioni come su una CPU: si descrive una struttura logica che opera in parallelo. Il risultato è che:
Molte operazioni avvengono simultaneamente (parallelismo hardware).
Le latenze possono essere molto basse e controllabili (pipeline e timing).
Le prestazioni dipendono dalla qualità del progetto (architettura, floorplan, vincoli di timing), non solo dalla frequenza di clock.
Struttura interna tipica
Una FPGA è composta da più classi di risorse interconnesse:
Blocchi logici configurabili (CLB/LE): unità base che contengono LUT (lookup table) per logica combinatoria, flip-flop per logica sequenziale e mux locali.
Rete di interconnessione (routing): matrice di collegamenti programmabili che unisce blocchi logici e periferiche interne; è cruciale per prestazioni e consumo.
RAM a blocchi (BRAM): memorie interne dedicate, usabili come RAM dual-port, FIFO, buffer, ROM di coefficienti, ecc.
DSP slices: blocchi aritmetici ottimizzati (moltiplicatori, MAC, adders) per filtri, FFT, AI “classica”, controllo motori.
PLL/MMCM e clock network: gestione clock, moltiplica/divide, distribuzione a bassa skew.
I/O programmabili: banchi I/O con standard selezionabili (LVTTL, LVCMOS, LVDS, ecc.), spesso con SERDES per segnali veloci.
Hard IP (dipende dal modello): elementi fissi come transceiver multi-gigabit, controller DDR, PCIe, Ethernet MAC, e talvolta core CPU integrati (SoC FPGA).
Flusso di sviluppo (toolchain)
Progettare per FPGA significa passare da una descrizione logica a una configurazione fisica:
Descrizione hardware in HDL (VHDL/Verilog/SystemVerilog) o tramite HLS (C/C++→RTL) dove applicabile.
Sintesi: traduce la logica in una netlist di primitive (LUT, FF, BRAM, DSP).
Place & route: posiziona le risorse sul chip e instrada i collegamenti.
Timing closure: verifica e correzione per rispettare i vincoli di tempo (setup/hold, frequenza target).
Generazione bitstream e programmazione/configurazione del dispositivo.
La parte critica, soprattutto su design complessi, è la TIMING CLOSURE: ottenere che tutte le path rispettino il clock richiesto, gestendo anche le path multi-clock e i vincoli di false path/multicycle.
Clocking e temporizzazione (perché è diverso dal software)
In una FPGA è normale avere più domini di clock e pipeline profonde. Concetti pratici:
FMAX: frequenza massima ottenibile dal progetto dopo place&route.
Latenza: numero di cicli tra input e output (spesso deterministico).
Throughput: quante operazioni per ciclo si possono sostenere (spesso 1/ciclo in pipeline).
CDC (clock domain crossing): attraversamenti tra clock diversi che richiedono sincronizzatori, FIFO asincrone o handshake.
Configurazione e persistenza
Molte FPGA sono basate su configurazione SRAM interna: al power-on devono caricare il bitstream da una memoria esterna (SPI FLASH, QSPI, ecc.) o da un host. Altre famiglie hanno memorie non volatili integrate. Questo impatta:
Tempo di boot/configurazione.
Protezione del bitstream (crittografia/autenticazione dove supportata).
Strategie di aggiornamento sul campo (dual image, fallback).
Vantaggi tipici
Flessibilità: l’hardware può essere aggiornato e ottimizzato nel tempo.
Parallelismo: accelera compiti streaming e a pipeline (DSP, video, networking).
Latenza bassa: utile per controllo real-time e protocolli deterministici.
Integrazione: molte interfacce e acceleratori possono convivere nello stesso chip.
Prototipazione: valida architetture hardware prima di un ASIC.
Limiti tipici
Costo per unità spesso superiore a MCU/MPU a parità di funzione su volumi bassi/medi.
Consumi: routing e risorse riconfigurabili possono consumare più di un ASIC equivalente.
Complessità di progetto: richiede competenze di architettura digitale, timing, CDC, e debug hardware.
Boot/configurazione: se basata su SRAM, serve infrastruttura di caricamento bitstream.
Schizzo dei collegamenti più importanti
┌──────────────────────────────┐ │ HOST CPU/MCU │ │ configurazione + controllo │ └──────────────┬───────────────┘ │ (SPI/QSPI/JTAG o bus) ▼ ┌──────────────────┐ │ FPGA │ │ LUT/FF + BRAM │ │ DSP + routing │ │ PLL + I/O banks │ └───┬───────────┬──┘ │ │ I/O digitali Link veloci* (GPIO, LVDS) (SERDES, PCIe, ETH) │ │ ▼ ▼ Sensori/attuatori Rete / DDR / periferiche * Dipende dalla famiglia e dal modello.
Tabella 1 – Risorse tipiche di una FPGA
| Risorsa | Ruolo |
|---|---|
| LUT + flip-flop | Logica combinatoria e sequenziale |
| Routing programmabile | Connessioni tra blocchi (critico per timing/power) |
| BRAM | Buffer, FIFO, RAM/ROM interne |
| DSP slices | Moltiplica-accumula, filtri, FFT, aritmetica intensiva |
| PLL/MMCM | Generazione e distribuzione clock |
| I/O banks | Standard elettrici configurabili, spesso con SERDES |
| Hard IP | DDR, PCIe, Ethernet MAC, transceiver (modello-dipendente) |
Tabella 2 – Confronto sintetico: FPGA vs CPU/MCU
| Aspetto | FPGA | CPU/MCU |
|---|---|---|
| Modello | Hardware riconfigurabile parallelo | Esecuzione sequenziale di istruzioni |
| Prestazioni | Ottime su streaming/pipeline; dipende dal progetto | Ottime su controllo generale e software complesso |
| Latenza | Molto bassa e deterministica (se progettata) | Variabile (cache, OS, interrupt) |
| Sviluppo | HDL + timing closure + debug HW | Software + debug SW |
| Aggiornabilità | Alta (bitstream) | Alta (firmware), ma hardware fisso |
| Consumi/costo | Spesso maggiori di soluzioni dedicate | Spesso migliori a parità di funzione |
| Evaluate |