Dispositivi logici programmabili - PROM, PLA, PAL e CPLD
In questa pagina 8
Un circuito integrato per applicazioni specifiche (ASIC) permette sistemi di grande complessità ma richiede un progetto e una realizzazione lunghi e costosi (set di maschere: Processo di fabbricazione CMOS, layout e parassitiUn circuito integrato CMOS si realizza su un wafer di silicio con una sequenza di passi fotolitografici: ogni maschera ottica riporta la geometria planare di uno strato (layer) e permette di sviluppare in modo selettivo il fotoresist, che protegge le zone non da attaccare o da drogare. Ordine: regioni attive e trincee di isolamento (STI), impianto delle well, deposizione e sagomatura del polisilicio (gate), impianto di source/drain (n+ e p+, il polisilicio si droga insieme), contatti e via, piste metalliche. Il progettista descrive il circuito con il layout (una maschera per layer) nel rispetto delle regole di layout (spessore, spaziatura, sovrapposizione), verificate dal DRC. Gli elementi parassiti sono resistenze (R = R_□·L/W), capacità (area più bordo, C = C_A·A + C_b·P) e transistor bipolari; le interconnessioni lunghe hanno ritardo ≈ 0,38 R C (rete distribuita). Il package deve avere basse parassite, robustezza, smaltimento del calore e costo basso.Processo di fabbricazione CMOS, layout e parassiti →) e non è riconfigurabile. Un circuito standard a catalogo è comodo ma ha una funzione fissa. I componenti logici programmabili (PLD, programmable logic devices) colmano la lacuna: sono componenti a catalogo la cui funzione logica effettiva viene stabilita da una procedura di programmazione.
La programmazione altera la struttura del circuito: due programmazioni diverse corrispondono a due circuiti diversi. Non va confusa con la programmazione software di un microprocessore, che esegue in sequenza istruzioni su un hardware fisso (un listato VHDL non è una sequenza di istruzioni: VHDL - struttura, tipi di dato e processiVHDL è un linguaggio di descrizione dell'hardware: un listato non è una sequenza di istruzioni eseguite da un processore ma la descrizione di un circuito, che la sintesi traduce in uno schema (LUT, flip-flop, multiplexer). Ogni modulo ha una entity (interfaccia: port con modo in, out, inout e tipo; eventuali generic) e una architecture (parte dichiarativa: segnali, costanti, componenti; parte assertiva dopo begin: assegnazioni concorrenti e processi). Le istruzioni nell'architecture sono concorrenti: l'ordine in cui sono scritte non conta. Un process esegue le proprie istruzioni in modo sequenziale quando un segnale della lista di sensibilità cambia. Segnali (<=, aggiornati alla fine del delta cycle, definiti nella parte dichiarativa) e variabili (:=, immediate, solo dentro il processo) hanno semantica diversa. Tipi: bit, boolean, integer, std_logic (a 9 valori, tra cui 'Z', 'X', 'U'), std_logic_vector, unsigned e signed (numeric_std).VHDL - struttura, tipi di dato e processi →).
Storia e famiglie
- SPLD (simple PLD): primi PLD, intorno al 1970, per funzioni combinatorie semplici; poi con registri.
- CPLD (complex PLD): dal 1984, con la maturità della tecnologia CMOS che dà la densità e il basso consumo necessari.
- FPGA (field-programmable gate array): proposti da Xilinx nel 1984, CMOS con memoria di configurazione SRAM (FPGA - LUT, slice e risorse della famiglia 7Una FPGA è una matrice di blocchi logici configurabili (CLB) immersi in una griglia di interconnessioni programmabili, con risorse dedicate: block RAM, blocchi DSP, gestione del clock (MMCM, PLL), blocchi di I/O e transceiver. La memoria di configurazione è SRAM. L'elemento base è la LUT: una memoria SRAM con 2^k celle che realizza una qualsiasi funzione di k ingressi (i segnali di selezione del multiplexer sono gli ingressi della funzione). Nella famiglia 7 di Xilinx un CLB ha 2 slice; uno slice ha 4 LUT a 6 ingressi (ciascuna divisibile in due LUT a 5), multiplexer larghi F7/F8 (funzioni a 7-8 ingressi), una catena di riporto veloce, 4 flip-flop/latch più 4 flip-flop. Nei SLICEM la LUT può essere usata come RAM distribuita o registro a scorrimento (SRL32), nei SLICEL solo come logica.FPGA - LUT, slice e risorse della famiglia 7 →).
Meccanismi di programmazione
| meccanismo | reversibile | volatile | tipico |
|---|---|---|---|
| fusibile | no (si interrompe) | no | SPLD, PROM |
| antifusibile | no (si crea) | no | SPLD, CPLD |
| EPROM / EEPROM / Flash | sì | no | SPLD, CPLD |
| SRAM | sì | sì | FPGA (anche alcuni CPLD) |
- Fusibile: il collegamento è inizialmente a bassa resistenza; si programma facendo passare una corrente elevata che lo trasforma in circuito aperto.
- Antifusibile: inizialmente a resistenza elevatissima (silicio amorfo, discreto isolante); un impulso di tensione elevata trasforma una parte del silicio in policristallino, buon conduttore.
- Gate flottante (EPROM, EEPROM, Flash): l'accumulo di elettroni nel gate flottante alza la soglia del transistor e lo mantiene spento per tutte le tensioni operative; il transistor equivale a un collegamento aperto. Cancellabile (UV o elettricamente) (Memorie non volatili - gate flottante, EPROM, EEPROM e FlashLe memorie non volatili conservano il dato senza alimentazione. La PROM a fusibili (o antifusibili) si programma una volta interrompendo (o creando) un collegamento. Le memorie riprogrammabili usano il transistor a gate flottante: un gate di polisilicio isolato tra il canale e il gate di controllo; la carica (elettroni) intrappolata sul gate flottante aumenta la soglia vista dal gate di controllo, così il transistor programmato resta spento a tutte le tensioni di lettura (V_T,prog > V_DD). EPROM: programmazione per iniezione di portatori caldi, cancellazione collettiva con raggi UV. EEPROM (transistor FLOTOX, effetto tunnel Fowler-Nordheim attraverso un ossido sottile): cancellazione elettrica della singola cella, ma due transistor per cella (area quasi doppia). Flash: variante dell'EEPROM con una sola cella-transistor e cancellazione a blocchi o settori, struttura NOR o NAND.Memorie non volatili - gate flottante, EPROM, EEPROM e Flash →).
- SRAM: un transistor MOS usato come interruttore è comandato da una cella SRAM (SRAM e DRAMSRAM e DRAM sono memorie volatili ad accesso casuale. La cella SRAM a 6 transistor è un latch di due inverter (M1-M4) con due n-MOS di accesso (M5, M6) pilotati dalla word line: uscita differenziale, veloce, grande. Lettura: BL e BL̄ precaricate, l'n-MOS driver abbassa leggermente il lato che memorizza 0 (il transistor driver deve essere più forte di quello di accesso, così il nodo non supera la soglia degli inverter); scrittura: una BL forzata a 0 porta il nodo sotto la soglia logica degli inverter in retroazione positiva, che poi si ribaltano. La DRAM a 1 transistor ha un n-MOS di accesso e una capacità di storage C_S: scrittura caricando C_S dalla BL (si perde V_T: bootstrap della WL), lettura per ridistribuzione di carica con la BL precaricata, ΔV = C_S/(C_BL + C_S)(V_X − V_PRE) ≈ 100-250 mV, distruttiva: servono sense amplifier per ogni BL e refresh periodico. Celle DRAM a 3 transistor: lettura non distruttiva.SRAM e DRAM →): contenuto = connessione aperta (MOSFET spento), = chiusa. Reversibile e individuale, ma volatile: se manca l'alimentazione la configurazione si perde, perciò un PLD a SRAM va riprogrammato a ogni accensione e richiede una memoria non volatile esterna che conservi i bit di configurazione.
Funzioni combinatorie con una ROM
Una funzione combinatoria con ingressi e uscite si realizza con una ROM con indirizzi a bit e parole a bit (Memorie a semiconduttore - struttura a matrice, decoder e ROMLe memorie a semiconduttore si classificano in lettura/scrittura (SRAM, DRAM: volatili) e sola lettura (ROM a maschera, PROM, EPROM, EEPROM, Flash: non volatili); l'accesso è casuale o non casuale (FIFO, registri a scorrimento, CAM). La struttura è a matrice di celle: una word line (WL) seleziona una riga attraverso il decoder di riga (N indirizzi → 2^N WL), una bit line (BL) porta il dato alla colonna scelta dal decoder/multiplexer di colonna e dal sense amplifier. La ROM a NOR ha per ogni bit line un p-MOS di carico e n-MOS dove il bit è 0 (con WL alta tirano la BL a massa): compatta e veloce; la ROM a NAND ha serie di n-MOS ed è molto più piccola ma più lenta. Ritardo di una WL: R del polisilicio × C dei gate (Elmore); di una BL: C dei drain con la R dei transistor o del carico.Memorie a semiconduttore - struttura a matrice, decoder e ROM →). In una ROM standard il contenuto viene programmato con l'ultimo passo di processo (ultimo livello di metal); una ROM a fusibili (PROM) può essere programmata sul campo dall'utente finale (interrompere il collegamento programma un : la linea dati rimane a livello alto).
SPLD: piani AND-OR
Un SPLD è costituito da due piani di porte: un piano AND che forma prodotti degli ingressi (anche negati) e un piano OR che li somma. Poiché ogni funzione si può scrivere come somma di prodotti, con questi due piani si realizza qualunque funzione combinatoria.
| architettura | piano AND | piano OR | caratteristiche |
|---|---|---|---|
| PROM | fisso (decoder: tutti i mintermini) | programmabile | semplice; prodotti: impraticabile per molti ingressi |
| PLA | programmabile | programmabile | dimensione del piano AND indipendente dagli ingressi; più lenta (due livelli di collegamenti programmabili, più lenti dei fissi) |
| PAL | programmabile | fisso | più veloce della PLA; il piano OR fisso limita il numero di implicanti per uscita |
PROM: esempio. con : il piano AND fornisce gli mintermini ; per (cioè i mintermini ): . Si programmano nel piano OR i collegamenti dei mintermini . Con ingressi servirebbero righe nel piano AND: per questo si usano PLA e PAL.
PLA: esempio. , , : bastano tre prodotti, , , , condivisi dagli OR: , , . Una PROM con tre ingressi avrebbe prodotti.
PAL. L'OR fisso (nell'esempio due implicanti per uscita) è più veloce ma limita la complessità per uscita; le uscite possono essere collegate a registri e reazionate in ingresso, e si realizzano anche funzioni sequenziali.
CPLD
Un CPLD è in linea di principio una matrice di blocchi SPLD (di tipo PLA, relativamente grandi, con qualche decina di ingressi) collegati da una rete di interconnessioni programmabili. I primi CPLD (Mega-PAL di Monolithic Memories) furono un fallimento per l'eccessivo consumo e la bassa velocità, dovuti alla scelta di connettività completa (ogni uscita collegabile a ogni ingresso di altri blocchi). Si passò a una connettività incompleta, realizzata in CMOS con celle EPROM. Nei CPLD i tempi di propagazione sono dominati dai blocchi logici e il contributo delle interconnessioni è prevedibile con buona precisione.
FPGA e confronto con i CPLD
Le FPGA hanno un numero più elevato di blocchi logici programmabili più semplici e piccoli (2–6 ingressi, 1 o 2 registri) immersi in una griglia di interconnessioni con matrici di commutazione agli incroci. Il blocco logico è tipicamente una LUT (look-up table): una piccola memoria SRAM che realizza una qualsiasi funzione combinatoria dei suoi ingressi, con un registro opzionale in uscita (FPGA - LUT, slice e risorse della famiglia 7Una FPGA è una matrice di blocchi logici configurabili (CLB) immersi in una griglia di interconnessioni programmabili, con risorse dedicate: block RAM, blocchi DSP, gestione del clock (MMCM, PLL), blocchi di I/O e transceiver. La memoria di configurazione è SRAM. L'elemento base è la LUT: una memoria SRAM con 2^k celle che realizza una qualsiasi funzione di k ingressi (i segnali di selezione del multiplexer sono gli ingressi della funzione). Nella famiglia 7 di Xilinx un CLB ha 2 slice; uno slice ha 4 LUT a 6 ingressi (ciascuna divisibile in due LUT a 5), multiplexer larghi F7/F8 (funzioni a 7-8 ingressi), una catena di riporto veloce, 4 flip-flop/latch più 4 flip-flop. Nei SLICEM la LUT può essere usata come RAM distribuita o registro a scorrimento (SRL32), nei SLICEL solo come logica.FPGA - LUT, slice e risorse della famiglia 7 →).
| CPLD | FPGA | |
|---|---|---|
| complessità | – Kgate | Kgate– Mgate |
| granularità | pochi (–) blocchi grandi (PLA, decine di ingressi) | molti (–K) blocchi piccoli |
| ritardi | dominati dai blocchi; interconnessioni prevedibili | dominati dalle interconnessioni; dipendono dal piazzamento (non prevedibili a priori) |
| programmazione | più spesso EEPROM/Flash | SRAM o antifusibili |
Progetto e programmazione
Il flusso è in gran parte quello di un ASIC (descrizione HDL, simulazione, sintesi: 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 →); cambia il livello fisico: in un ASIC si piazzano le celle di libreria e si realizzano connessioni ad hoc, in un FPGA/CPLD il piazzamento consiste nell'allocare le risorse logiche disponibili e nel configurare la griglia di interconnessioni. Il risultato è un insieme di bit di configurazione (bitstream) che fissa lo stato aperto/chiuso degli interruttori; si carica con un programmatore o su terminali dedicati. La memoria di configurazione SRAM si può vedere come un lungo registro a scorrimento; all'accensione l'FPGA può leggere la configurazione da una PROM/Flash esterna; più dispositivi possono essere collegati in catena e configurati con un'unica memoria.
Errori comuni
- Dire che un PLD esegue istruzioni in sequenza: la programmazione cambia i collegamenti, non un programma in esecuzione.
- Confondere PLA (entrambi i piani programmabili), PAL (solo AND) e PROM (solo OR).
- Dire che una FPGA a SRAM mantiene la configurazione senza alimentazione.
- Dimenticare che nelle FPGA il ritardo dipende dal piazzamento (nei CPLD è prevedibile).
Versione ripasso
- PLD: componente a catalogo la cui funzione è fissata da una programmazione che altera i collegamenti (non software). Storia: SPLD (), CPLD (), FPGA Xilinx (, SRAM).
- Meccanismi: fusibile (apre, corrente alta), antifusibile (silicio amorfo policristallino), gate flottante EPROM/EEPROM/Flash (reversibile, non volatile), SRAM (reversibile, volatile: bitstream da PROM esterna a ogni accensione).
- ROM come logica: indirizzi, bit; PROM programmabile sul campo (interruzione ).
- SPLD: PROM (AND fisso = decoder, OR programmabile); PLA (entrambi programmabili, lenta); PAL (AND programmabile, OR fisso, veloce). ; PLA: , , con prodotti.
- CPLD: matrice di PLA con interconnessioni incomplete (Mega-PAL: connettività completa, troppo consumo/lentezza); ritardi prevedibili.
- FPGA vs CPLD: molti blocchi piccoli (LUT + registro), ritardi dominati dalle interconnessioni (dipendono dal piazzamento), SRAM; Kgate– Mgate contro – Kgate.
- Flusso: HDL sintesi piazzamento/instradamento bitstream (SRAM = lungo shift register).
- Errori: esegue istruzioni; PLA/PAL/PROM scambiate; SRAM non volatile; ritardi FPGA prevedibili.