Salta al contenuto
Note per Studenti FPGA - LUT, slice e risorse della famiglia 7

FPGA - LUT, slice e risorse della famiglia 7

In questa pagina 7

Una FPGA (Dispositivi logici programmabili - PROM, PLA, PAL e CPLDUn componente logico programmabile (PLD) è un circuito integrato a catalogo la cui funzione logica viene fissata da una programmazione che altera la struttura del circuito (non va confusa con la programmazione software di un microprocessore). I meccanismi sono fusibili, antifusibili (una volta), EPROM/EEPROM/Flash (reversibili e non volatili) e celle SRAM (reversibili ma volatili). Le architetture semplici (SPLD) sono due piani AND-OR: PROM (AND fisso, cioè un decoder di tutti i mintermini, OR programmabile), PLA (entrambi programmabili, dimensione indipendente dal numero di ingressi, più lenta) e PAL (AND programmabile, OR fisso, più veloce). I CPLD sono matrici di blocchi SPLD con interconnessioni programmabili, le FPGA hanno molti blocchi logici piccoli (LUT + registro) in una griglia di interconnessioni complessa, configurata da SRAM.Dispositivi logici programmabili - PROM, PLA, PAL e CPLD →) è un circuito integrato programmabile "sul campo" formato da una matrice di blocchi logici configurabili collegati da una rete di interconnessioni anch'essa programmabile. Si realizza in CMOS (oggi processi a 1616 nm) con memoria di configurazione SRAM, e arriva a decine di milioni di porte equivalenti e frequenze fino a circa 800 MHz800\ \mathrm{MHz}. Gli strumenti di sviluppo integrano sintesi, simulazione, piazzamento e instradamento (Simulazione, testbench, vincoli di temporizzazione e flusso su FPGAUn progetto VHDL si verifica per simulazione con un testbench: una entity senza porte che istanzia il circuito sotto test (UUT), genera il clock (process con wait for e inversione), applica gli stimoli e controlla le uscite con assert/report/severity (note, warning, error, failure) o leggendo vettori da file (textio). Il flusso su FPGA è: descrizione VHDL, simulazione funzionale, sintesi (rete di LUT e flip-flop), implementazione (piazzamento e instradamento), analisi di temporizzazione, generazione del bitstream e programmazione della scheda. I vincoli (file XDC) assegnano i pin e definiscono il clock (periodo); l'analisi di temporizzazione verifica per ogni cammino registro-registro lo slack di setup, T − (t_c-q + t_logica + t_routing + t_su), e di hold; con slack negativo la frequenza è troppo alta: f_max = 1/(T − WNS).Simulazione, testbench, vincoli di temporizzazione e flusso su FPGA →). La famiglia usata in laboratorio (scheda con un dispositivo Xilinx Artix-7) appartiene alla serie 7.

Gli elementi principali

  1. Celle logiche configurabili: logica combinatoria (LUT), funzioni di registro (latch, flip-flop D, ...) e logica aritmetica con catena di riporto dedicata.
  2. Blocchi di ingresso/uscita (SelectIO): supportano molti standard, con SERDES, ritardi regolabili e registri DDR.
  3. Block RAM (e FIFO) integrate.
  4. Gestione del clock: buffer di clock a bassa skew e blocchi MMCM/PLL.
  5. Blocchi DSP (moltiplicatori e accumulatori) e, in alcuni dispositivi, transceiver seriali (da 3,753{,}75 a oltre 13 Gb/s13\ \mathrm{Gb/s}), interfacce PCI Express e un convertitore A/D a 1212 bit (XADC). Le FPGA includono in genere moduli specifici (sommatori, moltiplicatori, unità MAC, RAM, anche microprocessori e interfacce veloci) perché implementarli in logica generale è meno efficiente.

La LUT

La look-up table (LUT) a kk ingressi è una piccola memoria di 2k2^k celle SRAM da 11 bit, indirizzata dai kk ingressi, con un multiplexer 2k→12^k\to1 in uscita: gli ingressi della funzione sono i segnali di selezione del multiplexer, e il contenuto delle celle è la tabella di verità della funzione. Qualsiasi funzione combinatoria di kk variabili si realizza riscrivendo le celle, con ritardo costante attraverso la LUT: il tempo dipende solo dal numero di ingressi, non dalla complessità della funzione. Il numero di funzioni diverse è 22k2^{2^k}: 256256 per k=3k=3, 2642^{64} per k=6k=6.

Esempio: y=(a⋅b)+c‾y=(a\cdot b)+\overline c con LUT a 33 ingressi. Tabella per abc=000,001,…,111abc=000,001,\ldots,111: y=1,0,1,0,1,0,1,1y=1,0,1,0,1,0,1,1; i bit programmati sono quindi 1010101110101011 (indirizzo abcabc). Se la funzione ha più ingressi di quelli della LUT si combinano più LUT attraverso multiplexer dedicati.

Una LUT può essere anche una ROM (con contenuto fisso, 64×164\times1 per la LUT a 66 ingressi) o, se si abilita la scrittura, una RAM.

Lo slice nella serie 7

Il CLB (configurable logic block) è la risorsa principale per la logica combinatoria e sequenziale: contiene due slice, collegati a una matrice di commutazione per l'instradamento. Ogni slice contiene:

  • quattro LUT a 6 ingressi: ciascuna può essere usata come una LUT a 6 ingressi con un'uscita (qualsiasi funzione di 66 variabili) oppure come due LUT a 5 ingressi indipendenti (con ingressi comuni e due uscite); impatto sulla velocità minimo;
  • multiplexer larghi F7MUX (combina due LUT: funzione arbitraria a 77 ingressi o mux 8→18\to1) e F8MUX (combina due F7MUX: funzione a 88 ingressi o mux 16→116\to1): sono dedicati, quindi il ritardo è piccolo;
  • catena di riporto (carry chain): realizza somme e sottrazioni veloci; il riporto si propaga verticalmente attraverso le quattro LUT dello slice e poi allo slice nella stessa colonna del CLB sopra (con carry look-ahead sulle quattro LUT);
  • quattro flip-flop/latch (FF/L) più altri quattro flip-flop: tutti di tipo D, con un solo ingresso di clock (invertibile al confine dello slice), un enable e un reset/set (sincrono o asincrono secondo il bitstream); il dato DD può venire dalla LUT, dalla carry chain, dai multiplexer larghi o dall'ingresso dello slice.

Esistono due tipi di slice:

  • SLICEM: slice completo; le LUT si possono usare anche come RAM distribuita e come registri a scorrimento;
  • SLICEL: solo logica e aritmetica (le LUT non sono memorie). Gli strumenti di implementazione assegnano la logica agli slice (packing).

Dispositivo della scheda di laboratorio (Artix-7 100T): circa 15 85015\,850 slice, quindi 63 40063\,400 LUT a 66 ingressi e 126 800126\,800 flip-flop (88 per slice), 135135 block RAM da 36 kb36\ \mathrm{kb} e 240240 blocchi DSP (valori del dispositivo, non delle dispense; coerenti con 44 LUT e 88 flip-flop per slice).

RAM distribuita e registro a scorrimento (SRL)

Nello SLICEM la memoria della LUT può essere usata come dato:

  • RAM distribuita: una LUT a 66 ingressi è una RAM 64×164\times1 (o 32×232\times2); scrittura sincrona, lettura asincrona (si può rendere sincrona con i flip-flop dello slice); porte: singola, doppia (una di lettura/scrittura più una di sola lettura), quadrupla; fino a 256×1256\times1 componendo più LUT.
  • Registro a scorrimento a 32 bit (SRL32): la LUT è un registro a scorrimento in cui la lunghezza effettiva è scelta dall'indirizzo: dato in ingresso ritardato di (indirizzo+1)(\text{indirizzo}+1) cicli; più LUT in cascata arrivano a 128128 bit per slice. Servono per linee di ritardo, FIFO sincrone, memorie associative, generatori di sequenze e compensazione di latenza. Esempio: una pipeline di 1717 stadi da 6464 bit richiederebbe 17⋅64=108817\cdot64=1088 flip-flop, cioè 136136 slice, oppure 6464 SRL (uno per bit, lunghezza 1717 regolata dall'indirizzo): solo 1616 slice.

Block RAM, DSP, clock e I/O

Instradamento

I collegamenti tra CLB e altre risorse usano le risorse di routing: segmenti di diversa lunghezza (orizzontali singoli, doppi, quad; verticali singoli, doppi, hex; diagonali) che si collegano a matrici di commutazione adiacenti alle risorse. Nelle FPGA il ritardo delle interconnessioni domina quello della logica e dipende dal piazzamento.

Errori comuni

  • Dire che le block RAM sono costruite con LUT o sono esterne: sono blocchi dedicati integrati.
  • Contare il ritardo di una LUT dipendente dalla funzione: è costante.
  • Dimenticare che la configurazione SRAM è volatile e va ricaricata.
  • Confondere SLICEM e SLICEL: solo il primo può essere RAM o SRL.

Versione ripasso

  • FPGA: matrice di CLB + interconnessioni programmabili; SRAM di configurazione; risorse dedicate: block RAM, DSP, clock (MMCM, PLL), I/O (SelectIO), transceiver.
  • LUT: 2k2^k celle SRAM + mux 2k→12^k\to1 (gli ingressi sono le selezioni); qualsiasi funzione di kk variabili, ritardo costante; y=ab+c‾y=ab+\overline c (3 ingressi): 1010101110101011; ROM 64×164\times1 o RAM.
  • Slice (serie 7): CLB = 2 slice; slice = 4 LUT6 (o 2 LUT5 ciascuna), F7MUX/F8MUX (7-8 ingressi, mux 8→18\to1/16→116\to1), carry chain (verticale), 4 FF/L + 4 FF (tipo D, clock, enable, set/reset sincrono o asincrono).
  • SLICEM/SLICEL: SLICEM: LUT come RAM distribuita (64×164\times1) o SRL32; SLICEL: solo logica. Esempio SRL: 17×6417\times64 bit: 136136 slice di FF contro 1616 di SRL.
  • Block RAM: blocchi dedicati integrati, 3636 kb (32k×1…512×7232\mathrm k\times1\ldots512\times72), dual-port, FIFO, ECC. DSP: 25×1825\times18, ALU 4848 bit, MAC.
  • Routing: segmenti di varie lunghezze; ritardi dominati dalle interconnessioni.
  • Errori: block RAM = LUT/esterna; ritardo LUT dipendente dalla funzione; SRAM non volatile; SLICEM/SLICEL.

Esercizi su questo argomento

Teoria collegata