Salta al contenuto
Note per Studenti Dispositivi logici programmabili - PROM, PLA, PAL e CPLD

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

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)

Funzioni combinatorie con una ROM

Una funzione combinatoria con NN ingressi e MM uscite si realizza con una ROM con indirizzi a NN bit e parole a MM 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 11: 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; 2N2^N 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. y=(a⋅b)⊕cy=(a\cdot b)\oplus c con N=3N=3: il piano AND fornisce gli 88 mintermini m0…m7m_0\ldots m_7; y=1y=1 per abc=001,011,101,110abc=001,011,101,110 (cioè i mintermini 1,3,5,61,3,5,6): y=a‾ b‾ c+a‾ b c+ab‾ c+abc‾y=\overline a\,\overline b\,c+\overline a\,b\,c+a\overline b\,c+ab\overline c. Si programmano nel piano OR i collegamenti dei mintermini 1,3,5,61,3,5,6. Con 1616 ingressi servirebbero 65 53665\,536 righe nel piano AND: per questo si usano PLA e PAL.

PLA: esempio. w=a c+b‾ c‾w=a\,c+\overline b\,\overline c, x=a b c+b‾ c‾x=a\,b\,c+\overline b\,\overline c, y=a b cy=a\,b\,c: bastano tre prodotti, P1=acP_1=ac, P2=b‾c‾P_2=\overline b\overline c, P3=abcP_3=abc, condivisi dagli OR: w=P1+P2w=P_1+P_2, x=P3+P2x=P_3+P_2, y=P3y=P_3. Una PROM con tre ingressi avrebbe 88 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à 11–100100 Kgate 1010 Kgate–1010 Mgate
granularità pochi (11–100100) blocchi grandi (PLA, decine di ingressi) molti (100100–100100K) 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 (∼1970\sim1970), CPLD (19841984), FPGA Xilinx (19841984, SRAM).
  • Meccanismi: fusibile (apre, corrente alta), antifusibile (silicio amorfo →\to policristallino), gate flottante EPROM/EEPROM/Flash (reversibile, non volatile), SRAM (reversibile, volatile: bitstream da PROM esterna a ogni accensione).
  • ROM come logica: NN indirizzi, MM bit; PROM programmabile sul campo (interruzione =1=1).
  • SPLD: PROM (AND fisso = decoder, OR programmabile); PLA (entrambi programmabili, lenta); PAL (AND programmabile, OR fisso, veloce). y=ab⊕c=∑m(1,3,5,6)y=ab\oplus c=\sum m(1,3,5,6); PLA: w=ac+b‾c‾w=ac+\overline b\overline c, x=abc+b‾c‾x=abc+\overline b\overline c, y=abcy=abc con 33 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; 1010 Kgate–1010 Mgate contro 11–100100 Kgate.
  • Flusso: HDL →\to sintesi →\to piazzamento/instradamento →\to bitstream (SRAM = lungo shift register).
  • Errori: esegue istruzioni; PLA/PAL/PROM scambiate; SRAM non volatile; ritardi FPGA prevedibili.

Esercizi su questo argomento

Teoria collegata