Salta al contenuto
Note per Studenti Logica programmabile - ROM, PLA, PAL e FPGA

Logica programmabile - ROM, PLA, PAL e FPGA

In questa pagina 6

Le porte viste finora realizzano funzioni fisse. I dispositivi logici programmabili (PLD, Programmable Logic Devices) sono circuiti integrati con strutture logiche modificabili, configurate dal costruttore o dall'utente per svolgere funzioni diverse. La configurazione modifica l'hardware e realizza quella funzione logica nel dispositivo: non va confusa con la programmazione software di un microcontrollore, dove l'hardware non cambia.

Si vedono quattro famiglie: ROM, PLA, PAL e FPGA.

Come si programma

Irreversibile (una sola volta):

  • fuse / anti-fuse: i collegamenti tra elementi logici sono eliminati (fuse) o creati (anti-fuse) in modo selettivo applicando tensioni elevate;
  • mask programming: i collegamenti sono realizzati dal costruttore nell'ultima fase della fabbricazione.

Reversibile (riconfigurabile molte volte):

Simbolo compatto. Una porta con molti ingressi (fan-in alto) si disegna con una linea sola; una x all'incrocio indica che quella linea è collegata alla porta, l'assenza della x indica che non lo è.

ROM (Read Only Memory)

In una ROM i dati sono memorizzati in modo permanente, anche senza alimentazione (memoria non volatile). Si può solo leggere: si fornisce l'indirizzo e si legge la parola. Una ROM con kk ingressi di indirizzo e nn uscite dati contiene 2k2^k parole da nn bit (sigla 2k×n2^k\times n).

Struttura. Un decoder kk-to-2k2^k trasforma l'indirizzo in un segnale 1-hot (una sola linea attiva per parola, Decoder, encoder e priority encoderUn decoder $n$-to-$m$ ($m\le2^n$) converte un ingresso binario a $n$ bit in un'uscita 1-hot (un solo 1, nella posizione indicata): le sue uscite sono i mintermini degli ingressi, realizzati con $m$ AND; per decoder grandi si usa l'approccio gerarchico (costo in ingressi: 3-to-8 = 27, 6-to-64 = 182) e un enable. Ogni funzione = decoder + OR dei suoi mintermini. L'encoder fa l'operazione inversa (1-hot $\to$ binario) ma sbaglia con più ingressi a 1 o tutti a 0: il priority encoder risolve con una priorità e un'uscita V (valid).Decoder, encoder e priority encoder →); le uscite del decoder sono collegate a nn porte OR a 2k2^k ingressi con connessioni programmabili: se il collegamento tra la linea della parola e la OR del bit jj c'è, il bit jj di quella parola vale 1, altrimenti 0. Esempio 32×832\times8 (5 bit di indirizzo, 8 bit dati): se all'indirizzo 11 sono collegate le OR dei bit 7,4,1,07,4,1,0, si legge 10010011.

Una ROM è dunque una tabella di verità fisica: realizza qualunque funzione combinatoria di kk variabili con nn uscite. Esempio: la ROM 8×28\times2 del sommatore completo, indirizzo XYZXYZ, parola CSCS:

indirizzo XYZXYZ 000 001 010 011 100 101 110 111
contenuto CSCS 00 01 01 10 01 10 10 11

(il contenuto è il numero di 1 in ingresso scritto in binario: SS è la parità, CC la maggioranza, Sommatori binari - half adder, full adder e ripple carryHalf adder (2 ingressi): $S=X\oplus Y$, $C=XY$. Full adder (3 ingressi, con riporto in ingresso $Z$): $S=X\oplus Y\oplus Z$, $C=XY+XZ+YZ=G+PZ$ con $P=X\oplus Y$, $G=XY$; si realizza con due half adder e una OR. Il ripple carry adder a $n$ bit concatena $n$ full adder: il riporto "ondeggia" dal LSB al MSB, quindi il ritardo cresce linearmente con $n$. È un circuito iterativo (gerarchico e regolare). Il moltiplicatore a 2 bit usa 4 AND e 2 half adder.Sommatori binari - half adder, full adder e ripple carry →). Una ROM è una memoria combinatoria: non ha stato.

Tipi di ROM:

  • ROM a maschera: connessioni fatte dal costruttore in fonderia;
  • PROM (fuse/anti-fuse): programmabile dall'utente una sola volta;
  • EPROM: gate flottante, cancellabile con raggi ultravioletti e riprogrammabile;
  • EEPROM (E²PROM): gate flottante, cancellabile e riprogrammabile elettricamente;
  • memoria Flash: evoluzione della EEPROM.

La scelta dipende da volumi, frequenza e numero di riprogrammazioni, prestazioni e costo.

PLA (Programmable Logic Array)

Un PLA è simile a una ROM, ma il decoder è sostituito da una matrice di porte AND programmabili: ciascuna genera un termine prodotto (anche con meno letterali delle variabili di ingresso, quindi in forma semplificata) a partire dagli ingressi, diretti o negati. I termini prodotto sono poi collegati in modo programmabile a porte OR, che sommano. Entrambe le matrici (AND e OR) sono programmabili. A differenza della ROM, il PLA non genera tutti i mintermini, solo un sottoinsieme programmabile, e i termini prodotto possono essere condivisi tra le uscite. Le uscite delle OR possono passare per una porta XOR programmabile, che permette di avere l'uscita diretta o negata.

Vantaggi: versatilità, utili per sistemi complessi, riconfigurabili, anche per sistemi sequenziali con feedback articolati e vari FF; di solito costano più dei PAL. I PLA commerciali contengono moltissime porte, altrimenti non sarebbero economici.

Programmazione di un circuito combinatorio. Servono: le connessioni tra ingressi (diretti o negati) e porte AND; le connessioni tra AND e OR; la forma diretta o negata di ogni uscita. Per ottenere un PLA piccolo si minimizza il numero di termini prodotto condividendoli tra le uscite; il numero di letterali in ciascun termine conta poco, perché tutte le variabili dirette e negate sono già disponibili.

Esempio. F1=AB‾+ACF_1=A\overline B+AC, F2=AC+BC‾F_2=AC+B\overline C. Termini prodotto: P1=AB‾P_1=A\overline B, P2=ACP_2=AC, P3=BC‾P_3=B\overline C. Il termine P2P_2 è condiviso:

termine AA BB CC F1F_1 F2F_2
P1=AB‾P_1=A\overline B 1 0 – x
P2=ACP_2=AC 1 – 1 x x
P3=BC‾P_3=B\overline C – 1 0 x

(In ingresso: 1 = variabile diretta, 0 = negata, – = non collegata. In uscita: x = il termine entra nella OR.) Servono 3 AND. Tabella di verità (ABC=000ABC=000 fino a 111111): F1=0,0,0,0,1,1,0,1F_1=0,0,0,0,1,1,0,1; F2=0,0,1,0,0,1,1,1F_2=0,0,1,0,0,1,1,1.

Per ottenere un PLA più piccolo a volte conviene realizzare la funzione negata (e lasciare che la XOR di uscita la riporti a quella cercata) o usare implicanti non primi che si condividono tra più uscite.

PAL (Programmable Array Logic)

Un PAL ha una matrice di AND programmabile e una matrice di OR fissa. È meno flessibile del PLA (dove entrambe le matrici sono programmabili) ma più semplice, più economico e più veloce; i PAL commerciali hanno almeno 8 ingressi e 8 uscite. Nei PAL i termini prodotto non si possono condividere tra più OR: ogni uscita ha le sue AND. Quindi si ottimizzano le funzioni a due livelli una uscita alla volta, mentre per i PLA si ottimizzano le uscite insieme.

Stesso esempio su PAL: F1F_1 usa le sue due AND (AB‾A\overline B, ACAC) e F2F_2 le sue due (ACAC, BC‾B\overline C): 4 AND in tutto invece di 3, perché ACAC va duplicato.

Vantaggi: compattezza, semplicità, velocità, basso prezzo per funzioni semplici e ripetute (aritmetiche), anche per sistemi sequenziali con pochi FF, tempi di propagazione brevi e vincoli stretti sul clock.

AND OR condivisione dei prodotti
ROM fissa (decoder) programmabile tutti i mintermini disponibili
PLA programmabile programmabile sì
PAL programmabile fissa no

La struttura tipica di una PAL è dunque: matrice programmabile di AND seguita da una matrice fissa di OR.

FPGA (Field Programmable Gate Array)

Gli FPGA sono, dopo le memorie Flash, i PLD più diffusi. Hanno in comune:

  • blocchi logici programmabili (combinatori e sequenziali);
  • interconnessioni (routing) programmabili;
  • pin di I/O programmabili.

Possono contenere anche blocchi specializzati (memorie, blocchi aritmetici, microprocessori). Il loro vantaggio rispetto agli altri PLD è la disponibilità di blocchi logici configurabili e flip-flop e la facilità di riconfigurazione. Le informazioni sul circuito realizzato sono nella memoria di configurazione, volatile (SRAM) o non volatile (Flash, fuse/anti-fuse). Programmare un FPGA significa fissare i bit di configurazione dei blocchi logici, del routing e dei pin. Il mercato mondiale è dominato da aziende statunitensi. La descrizione VHDL di un circuito, sintetizzata, produce il file di configurazione (Introduzione al VHDL - entity, architecture, tipi e livelli di descrizioneVHDL è un linguaggio di descrizione dell'hardware (HDL), non di programmazione: le dichiarazioni sono concorrenti e descrivono blocchi di circuito; serve per documentare, simulare e sintetizzare. Un blocco ha una entity (nome e porte in/out) e almeno una architecture (cosa c'è dentro: structural con component e port map, dataflow con equazioni booleane, behavioral con comportamento). Tipi: std_logic (da 1164: '0','1','X','Z','U','-',...), std_logic_vector, bit, boolean, integer. Signal per i collegamenti interni, constant per i valori fissi.Introduzione al VHDL - entity, architecture, tipi e livelli di descrizione →).

Look-Up Table

In molte famiglie il blocco logico contiene LUT (Look-Up Table): memorie 2k×12^k\times1 che, tramite un multiplexer, realizzano la tabella di verità di una funzione di kk variabili (Multiplexer e funzioni logiche realizzate con decoder e multiplexerIl multiplexer (MUX) $2^n$-to-1 ha $2^n$ ingressi dati, $n$ ingressi di selezione e un'uscita che copia l'ingresso selezionato: $Y=\sum_i m_i(S),I_i$. Si realizza con decoder + AND di enable + OR (costo 22 per il 4-to-1) o direttamente (costo 18). Un MUX $2^n$-to-1 realizza qualunque funzione di $n$ variabili (ingressi dati = colonna della tabella di verità); con un MUX $2^{n-1}$-to-1 si usano le $n-1$ variabili come selezione e gli ingressi dati valgono $0$, $1$, $X$ o $\overline X$ (l'ultima variabile). I MUX a vettori selezionano gruppi di bit.Multiplexer e funzioni logiche realizzate con decoder e multiplexer →). I bit di configurazione fissano i valori agli ingressi dati del MUX.

  • LUT a 2 ingressi (a,ba,b): 4 bit di configurazione, possono realizzare una qualsiasi delle 222=162^{2^2}=16 funzioni booleane di aa e bb; con i bit c00,c01,c10,c11=0,1,1,0c_{00},c_{01},c_{10},c_{11}=0,1,1,0 è una XOR.
  • LUT a 3 ingressi: due LUT a 2 ingressi più un MUX 2-to-1 (selezione: cc), 223=2562^{2^3}=256 funzioni.

Un FPGA contiene migliaia o milioni di LUT, e oltre a esse flip-flop, multiplexer e blocchi aritmetici. Con altri multiplexer configurabili (bit di configurazione) la stessa cella può dare un'uscita combinatoria (di a,b,ca,b,c), un'uscita registrata (macchina di Moore: l'uscita dipende solo dallo stato nel FF) oppure un'uscita che dipende anche dagli ingressi (Mealy).

Errori comuni

  • Confondere ROM (decoder fisso + OR programmabili) con PLA (AND programmabili): la ROM genera sempre tutti i mintermini.
  • Dire che il PAL condivide i termini prodotto: è il PLA a farlo.
  • Scambiare configurazione hardware e programmazione software.
  • Dimenticare che le ROM sono combinatorie: leggere una parola non cambia stato.
  • Confondere memoria di configurazione volatile (SRAM) e non volatile (Flash): la volatile va ricaricata a ogni accensione.

Versione ripasso

Esercizi su questo argomento

Teoria collegata