Hello, Guest!
 
 

 
 
  Objects Tiiips Categories
FPGA
"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:

  1. Descrizione hardware in HDL (VHDL/Verilog/SystemVerilog) o tramite HLS (C/C++→RTL) dove applicabile.

  2. Sintesi: traduce la logica in una netlist di primitive (LUT, FF, BRAM, DSP).

  3. Place & route: posiziona le risorse sul chip e instrada i collegamenti.

  4. Timing closure: verifica e correzione per rispettare i vincoli di tempo (setup/hold, frequenza target).

  5. 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 

RisorsaRuolo
LUT + flip-flopLogica combinatoria e sequenziale
Routing programmabileConnessioni tra blocchi (critico per timing/power)
BRAMBuffer, FIFO, RAM/ROM interne
DSP slicesMoltiplica-accumula, filtri, FFT, aritmetica intensiva
PLL/MMCMGenerazione e distribuzione clock
I/O banksStandard elettrici configurabili, spesso con SERDES
Hard IPDDR, PCIe, Ethernet MAC, transceiver (modello-dipendente)


Tabella 2 – Confronto sintetico: FPGA vs CPU/MCU

AspettoFPGACPU/MCU
ModelloHardware riconfigurabile paralleloEsecuzione sequenziale di istruzioni
PrestazioniOttime su streaming/pipeline; dipende dal progettoOttime su controllo generale e software complesso
LatenzaMolto bassa e deterministica (se progettata)Variabile (cache, OS, interrupt)
SviluppoHDL + timing closure + debug HWSoftware + debug SW
AggiornabilitàAlta (bitstream)Alta (firmware), ma hardware fisso
Consumi/costoSpesso maggiori di soluzioni dedicateSpesso migliori a parità di funzione

Evaluate