Capitolo IV - Università degli Studi di Trieste

Capitolo IV
Memorie e logiche programmabili
Capitolo IV
Memorie e logiche programmabili.
4.1) Introduzione.
Un peso notevolissimo nel campo dell’integrazione a larga scala e’ ricoperto al giorno d’oggi
dalle memorie, che rappresentano attualmente circa i due terzi della totalita’ dei circuiti integrati
prodotti. Ancora oggi si assiste ad un continuo aumento del numero di bit disponibili sul singolo
chip, che approssimativamente quadruplica ogni tre anni.
Stranamente sulle memorie a semiconduttore non esiste quell’ampiezza di informazione che
ci si potrebbe aspettare per componenti che rivestono una cosi’ grande importanza. Probabilmente
tale situazione prende origine, a differenza dei circuiti SSI e MSI, da considerazioni di
competitivita’ tra le industrie produttrici, che non hanno alcun interesse a divulgare informazioni
troppo dettagliate sui loro prodotti.
4.2) Classificazione delle memorie.
Le memorie a semiconduttore sono dispositivi elettronici costituiti da un insieme di celle
elementari, ciascuna delle quali e’ in grado di immagazzinare un’informazione binaria. Questo
insieme di celle elementari e’ dotato di apposite linee di comunicazione che permettono di accedere
al singolo dato.
Le memorie possono essere classificate sotto diversi punti di vista. Ad esempio esse possono
venire identificate a livello di sistema a seconda del tipo di accesso che consentono. Si parla allora
di memorie ad accesso sequenziale o di memorie ad accesso diretto (dette spesso in modo improprio
ad accesso casuale). Nel primo caso i dati vengono accodati l’uno rispetto all’altro in fase di
scrittura, mentre in fase di lettura l’organizzazione della memoria e’ tale che il primo dato leggibile
sia quello che e’ stato scritto per primo (in questo caso si parla di memorie first in – first out o
FIFO). Oppure puo’ avvenire che il primo dato leggibile sia l’ultimo scritto e in tal caso si parla di
organizzazione a pila (o a stack). Vi possono essere poi ancora altre organizzazioni, ma, comunque
sia, nelle memorie ad accesso sequenziale per recuperare un dato e’ necessario scorrere tutti i dati
che in fase di lettura precedono quello voluto.
Molto spesso tuttavia risulta necessario poter accedere direttamente ad un particolare dato;
tale operazione e’ appunto possibile nelle memorie ad accesso diretto, nelle quali attraverso un
indirizzo si puo’ direttamente individuare l’informazione desiderata. Nelle memorie ad accesso
sequenziale l’indirizzo non e’ necessario, o meglio e’ implicito.
E’ opportuno tuttavia notare che esistono metodi di accesso piu’ complessi di quelli citati. Ad
esempio esistono le memorie ad accesso multiplo (il piu’ delle volte doppio), in cui esistono piu’
canali di accesso in modo da renderle disponibili a piu’ processi contemporaneamente, rendendo la
memoria una risorsa condivisa.
Rimanendo nell’ambito delle memorie ad accesso casuale una prima grande suddivisione e’
quella che divide le memorie in quelle di lettura e scrittura (RAM – random access memory) e in
quelle a prevalente lettura (ROM – read only memory). Nelle prime un dato puo’ essere scritto e
letto in qualsiasi cella, con un tempo di accesso che e’ praticamente lo stesso sia che l’operazione
sia di scrittura che quando l’operazione e’ di lettura. Nelle seconde l’operazione normale e’ solo
quella di lettura poiché quella di scrittura o non e’ permessa o richiede un tempo molto piu’ lungo
che non quella di lettura. Un vantaggio delle ROM tuttavia risiede nel fatto che l’informazione si
conserva anche quando l’alimentazione viene a mancare, a differenza delle RAM in cui
l’informazione viene persa. Per tale motivo le ROM vengono anche chiamate memorie non volatili.
Per la verita’ esistono anche RAM non volatili, ottenute con opportuni espedienti; ad esempio
le ZRAM (zero power RAM) utilizzano batterie tampone per mantenere alimentati i dispositivi
151
Capitolo IV
Memorie e logiche programmabili
anche in fase di assenza dell’alimentazione primaria, o ancora le informazioni vengono duplicate su
una memoria non volatile in modo da poterle ripristinare quando necessario oppure si sfruttano
opportuni fenomeni quali l’isteresi ferroelettrica per ottenere una memorizzazione permanente.
In ogni caso una suddivisione di massima delle memorie ad accesso diretto e’ riportata in
tabella 4.1, nella quale, a titolo orientativo e’ riportata anche la tecnologia con cui ciascun tipo di
memoria viene realizzato.
TABELLA 4.1
------- dinamiche
MOS
RAM
------- statiche
MOS e bipolari
------- a maschera
------- PROM
MOS
bipolari
------- EPROM
------- EEPROM
MOS
MOS
ROM
• E’ opportuno tuttavia accennare ad alcune delle caratteristiche piu’ importanti dei vari tipi di
ROM.
• ROM a maschera. Sono memorie a sola lettura nelle quali i dati vengono immagazzinati
mediante un opportuno processo di mascheratura durante la fabbricazione. L’utente all’atto
dell’ordinazione deve specificare con un’opportuna codifica tutta l’informazione che deve
venir scritta nella memoria. La struttura fisica del componente e’ particolarmente semplice
e l’organizzazione di tale tipo di memoria e’ sempre a matrice. In commercio si possono
trovare ROM a maschera con diversi gradi di parallelismo, di cui i piu’ comuni sono
comunque 4 e 8.
• PROM o ROM programmabili. Sono anch’esse memorie a sola lettura in cui tuttavia i dati
vengono inseriti dall’utente finale. La scrittura di un dato avviene o per fusione di opportuni
collegamenti o con la perforazione di una giunzione. Il dato, una volta scritto, non puo’
essere un alcun modo cancellato. Vantaggio sostanziale rispetto alle ROM a maschera e’
l’eliminazione dei tempi di attesa tra ordinazione e consegna della ROM, malgrado che il
loro costo unitario sia superiore. E’ tuttavia necessario tenere presente che la produzione di
ROM a maschera non e’ economicamente conveniente per quantitativi inferiori al migliaio
di pezzi.
• EPROM. Sono memorie a prevalente lettura, utilizzate quando siano necessarie memorie
non volatili, ma in cui i dati memorizzati possano venire di volta in volta modificati. In
questo casi i dati, scritti con mezzi elettrici, possono venire cancellati, rendendo la memoria
nuovamente disponibile, con l’esposizione del chip a radiazione ultravioletta attraverso
un’apposita finestra in vetro di quarzo.
• EEPROM. Sono memorie molto simili alle EPROM, ma la cancellazione di un dato viene
effettuata elettricamente, permettendo di mantenere il dispositivo nel sistema in cui e’
installato. Le operazioni di scrittura tuttavia sono normalmente molto piu’ lente che non
quelle di lettura. Dal punto di vista dell’impiego e delle terminazione EPROM e EEPROM
152
Capitolo IV
Memorie e logiche programmabili
sono del tutto analoghe alle ROM e alle PROM. Per alcuni modelli addirittura esiste con
queste ultime una completa compatibilita’ sia elettrica che meccanica (compatibilita’ pin to
pin).
4.3) Struttura base di una memoria.
Una memoria e’ essenzialmente costituita delle seguenti parti:
ƒ
una matrice di celle;
ƒ
un decodificatore di indirizzo
ƒ
un circuito di controllo di ingresso e di uscita.
In memorie di piccole dimensioni, ad esempio in memorie da 16 celle, il circuito di
indirizzamento puo’ essere realizzato con un semplice selettore (linear select), come illustrato in
figura 4.1.
M
M
1
4
1
16
M
16
figura 4.1
E’ opportuno notare in questa struttura circuitale la complessita’ dovuta alla presenza dei 2n
collegamenti elettrici necessari all’abilitazione delle singole celle. Tale complessita’ inoltre
aumenta esponenzialmente al crescere del numero n di bit di indirizzo.
Una valida alternativa e’ l’indirizzamento a matrice illustrato in figura 4.2 (coincident select).
153
Capitolo IV
Memorie e logiche programmabili
M1
1
Selettore
di
riga
M4
4
1
4
Selettore di colonna
figura 4.2
Si ottiene in tal modo una notevole semplificazione della rete dei collegamenti. Si puo’
ritenere pertanto che, tranne per memorie di minime dimensioni, la struttura di base sia quella di
figura 4.3.
indirizzo di
riga
D
e
c
o
d
r
i
f d i
i i g
c
a
a
t
o
r
e
Din
cella di memoria
linea di parola
linea
dei dati
matrice di
celle
Circuito di controllo I/O
Dout
Decodificatore di colonna
indirizzo di colonna
figura 4.3
Il decodificatore di riga seleziona un’intera riga di celle. I dati immagazzinati nelle celle
connesse con la riga selezionata sono trasferiti al circuito di controllo di ingresso e uscita. A questo
punto il dato che interessa viene trasferito all’uscita selezionandolo con il decodificatore di colonna.
154
Capitolo IV
Memorie e logiche programmabili
Ogni dispositivo di memoria possiede almeno i seguenti segnali:
ƒ
Indirizzo (address) composto dai segnali da applicare ai decodificatori. All’utente non e’
normalmente possibile distinguere tra i bit di selezione di riga e di colonna. L’indirizzo
deve pertanto essere considerato come un tutto unico.
ƒ
Lettura/scrittura (read/write). E’ presente ovviamente solo quando necessario e permette
di scegliere tra un’operazione di scrittura o una di lettura in o da una determinata cella.
Selezione di chip (chip select) che permette o no di abilitare la memoria in questione.
Tale segnale si rende indispensabile quando si vogliano realizzare memorie di grandi
dimensioni, superiori a quelle del singolo chip, oppure quando memorie accedono assieme
ad altri dispositivi allo stesso bus per il trasferimento dei dati.
ƒ
ƒ
Segnali di ingresso e di uscita (I/O). In certe realizzazioni le linee su cui viaggiano tali
segnali possono coincidere.
ƒ
Alimentazione (supply). Alcune realizzazioni, quali EPROM e EEPROM possono
richiedere piu’ di una tensione di alimentazione, tuttavia nella maggior parte dei casi e’
sufficiente un’unica tensione.
La combinazione di tutti questi segnali organizza il dispositivo di memoria. Piu’ matrici del
tipo descritto possono poi essere utilizzate per accedere ad informazioni di lunghezza superiore al
bit. Si avranno ovviamente tante linee di I/O quanti sono i bit di informazione cui si vuol accedere
contemporaneamente. Si parla in tal caso di parallelismo della memoria, intendendo con tale
termine il numero di bit per parola, dove parola e’ l’insieme di bit cui si accede
contemporaneamente con un unico indirizzo. Nelle memorie standard il grado di parallelismo e’ di
solito una potenza di 2.
4.4) Struttura della cella di memoria RAM.
Prima di descrivere i principi di funzionamento di una memoria RAM e’ opportuno accennare
alle regole fondamentali cui bisogna attenersi nel progetto di una cella di memoria.
1)
2)
3)
4)
Una cella di memoria deve occupare sul chip la minima superficie possibile.
I processi di fabbricazione per la sua realizzazione devono essere i piu’ semplici possibile.
Le operazioni di lettura e scrittura devono essere le piu’ rapide possibile.
La potenza dissipata va minimizzata
I primi due punti sono di carattere prevalentemente economico, mentre gli ultimi due
riguardano le prestazioni del dispositivo.
Le memorie RAM si suddividono poi in memorie bipolari e MOS, statiche e dinamiche. Le
memorie bipolari sono piuttosto rare, di capacita’ ridotta, e vengono utilizzate solo in quelle
applicazioni in cui sono richieste elevate velocita’ di accesso. La distinzione tra dispositivi statici e
dinamici e’ gia’ stata illustrata in precedenza, tuttavia nel caso delle memorie tale distinzione si
riflette anche in profonde modificazioni strutturali e di impiego.
4.4.1) Struttura di una cella RAM statica.
Una possibile configurazione di una cella RAM statica e’ riportata in figura 4.4. Il cuore della
cella e’ un semplice circuito bistabile che comunica con le linee dati attraverso buffer 3-state. Tali
buffer, rispettivamente di lettura e di scrittura sono controllati da due porte AND al cui ingresso
sono applicati i segnali di selezione di riga e di colonna e quello di read/wite (R/W).
155
Capitolo IV
Memorie e logiche programmabili
Quando sia X che Y sono a livello basso ambedue le uscite degli AND si trovano a livello
basso e pertanto i quattro buffer 3-state risultano disabilitati.
DATA
write buffer
read buffer
connessione wired OR
read buffer
write buffer
Y
DATA
R/W
X
figura 4.4
Quando invece X, Y e R/W passano allo stato alto risultano abilitati i write buffer
permettendo un’operazione di scrittura nella cella; cambiando lo stato della linea R/W si
disabilitano i write buffer mentre vengono abilitati i buffer di lettura. Il valore contenuto nella cella
viene in tal caso trasferito alle linee dati.
Realizzare una memoria RAM utilizzando la cella appena descritta risulta molto semplice. In
figura 4.5 e’ riportato lo schema di interconnessione per una memoria da quattro celle (4 bit), per la
quale sono necessarie solo quattro porte in piu’ rispetto a quelle necessarie alla realizzazione delle
singolo celle.
data out buffer
data in buffer
DATA IN
DATA OUT
DATA
R/W
DATA
R/W
D
Y
0
X
X
D
R/W
D
Y1
0
X
D
R/W
0
0
D
Y
0
D
R/W
X
D
Y1
1
X1
D
R/W
X1
Y0
Y1
figura 4.5
Un’osservazione piu’ attenta della cella proposta fa tuttavia osservare che le esigenze di
progetto enunciate all’inizio del presente paragrafo non sono sufficientemente rispettate. Infatti, un
156
Capitolo IV
Memorie e logiche programmabili
circuito costituito da otto porte (escludendo le connessioni “wired-or” che non occupano spazio
significativo), da cinque linee di segnale e da almeno due linee di alimentazione non puo’ certo
considerarsi efficiente in termini di superficie di silicio occupata.
Un primo miglioramento si puo’ ottenere eliminando la necessita’ di una linea di R/W per
ogni cella secondo quanto illustrato in figura 4.6. Le due porte AND a tre ingressi delle cella
originaria si riducono ad un’unica porta AND a due ingressi che controlla sia il buffer di lettura che
quello di scrittura.
DATA
write buffer
read buffer
connessione wired OR
read buffer
write buffer
DATA
X
Y
figura 4.6
La lettura viene eseguita connettendo le linee DATA e DATA alle linee di uscita della cella,
mentre la scrittura si esegue forzando sulle medesime linee i valori voluti.
La cella che cosi’ si ricava potrebbe gia’ essere accettabile, ma un ulteriore livello di
semplificazione puo’ essere raggiunto eliminando la porta AND e riorganizzando la configurazione
della memoria in modo tale che tutte le celle di una riga siano parzialmente accessibili, mentre solo
la cella della colonna selezionata lo sia totalmente. La nuova configurazione circuitale e’ riportata
in figura 4.7, mentre in figura 4.8 e’ riportato lo schema completo di una RAM da quattro bit.
V dd
X
BIT (Y)
Vss
figura 4.7
157
BIT (Y)
Capitolo IV
Memorie e logiche programmabili
La cella cosi’ ottenuta e’ realizzata con soli sei transistori e le linee di segnale si sono ridotte a
tre. E’ questa la struttura tipo utilizzata nella maggior parte dei casi per realizzare memorie RAM
statiche.
D
D
D
X
D
X
X0
D
D
D
D
X
X
R.W=0
X1
BIT
BIT
BIT
Y0
Data in
R/W
CS
BIT
Y1
Data bus
Amplificatore
differenziale
+
Data out
Data bus
DB
DB
figura 4.8
La costruzione di una memoria completa, che utilizzi la cella a sei transistori, introduce alcuni
nuovi concetti e terminologie. Significativa e’ la sostituzione delle linee dati con le cosiddette “bit
line” che alimentano tutte un bus dati comune. Le “bit line” sono isolate dal bus dati da interruttori
MOS comandati dall’indirizzo di colonna.
Il bus dati a sua volta e’ pilotato de una coppia di buffer 3-state durante la fase di scrittura,
mentre in fase di lettura comunica con l’esterno tramite un amplificatore differenziale e un ulteriore
buffer 3-state. Il controllo della RAM e’ poi modificato dalla presenza di un segnale di “chip select”
(CS), che negli esempi fatti in precedenza non era presente. Tale segnale si rende necessario poiche’
le RAM sono disposte in un sistema di memoria in maniera matriciale come le celle che
costituiscono la singola RAM e i vari chip condividono lo stesso bus dati per trasmettere le
informazioni. Ovviamente ad un dato istante deve venire selezionato un unico chip, mentre gli altri
devono essere completamente ininfluenti sia per quanto riguarda i dati in ingresso che quelli in
uscita.
Si supponga, a titolo di esempio, di voler modificare il contenuto della cella X0, Y1 da “0” a
“1”.I segnali da applicare alla memoria saranno allora X0, Y1 e CS alti, mentre X1 e Y0 dovranno
essere tenuti bassi. Con questa combinazione di valori vengono attivati i buffer di ingresso con DB
a livello alto e DB a livello basso. Y1 chiude poi gli interruttori MOS della relativa colonna, mentre
X0 chiude gli interruttori MOS della riga relativa, rendendo accessibile la cella X0, Y1.
Le “bit line” a questo punto si trovano in una situazione di conflitto per effetto del dato
memorizzato in precedenza nella cella. Tuttavia un opportuno dimensionamento delle parti
componenti permette di far si’ che il nuovo dato prevalga, forzando la cella nella nuova situazione.
Durante le operazioni descritte il segnale R/W, tenuto a livello basso, mantiene il buffer di
uscita disattivato, in modo che durante il ciclo di scrittura il dato presente sul bus dati non venga
trasferito in uscita.
158
Capitolo IV
Memorie e logiche programmabili
Si noti che gli interruttori MOS della cella X0, Y0 sono anch’essi chiusi e quindi il contenuto
della cella viene trasferito sulle “bit line” della colonna Y0. Tuttavia il valore basso di X1 impedisce
un’interazione con la cella X1, Y0, mentre il livello basso di Y0 impedisce il trasferimento del dato
dalle “bit line” al bus dati.
In modo del tutto analogo puo’ essere compiuta l’operazione di lettura.
4.4.2) Struttura di una cella RAM dinamica.
Una cella RAM dinamica si puo’ considerare derivata da quella statica di figura 4.7, in cui
tuttavia sono stati eliminati i transistori di carico. Il dato viene in questo caso memorizzato nelle
capacita’ parassite di gate, come e’ illustrato in figura 4.9 ( a ). In questa situazione circuitale si
tende pertanto a perdere l’informazione se non si interviene con un’operazione di riscrittura prima
che la tensione ai capi della capacita’ sia scesa al di sotto di un determinato livello.
Quest’operazione e’ detta rinfresco (refresh) del dato.
linea dei dati (W)
T
3
T1
linea dei dati (R)
linea di parola (R)
linea di parola
T4
T2
T2
T3
T1
linea di parola
T1
linea di parola (W)
linea dei dati (D)
linea dei dati
linea dei dati (D)
(a) Cella a 4 transistori
(b) Cella a 3 transistori
(c) Cella a 1 transistore
figura 4.9
Nella cella a quattro transistori di figura 4.9 (a) tuttavia i transistori T1 e T2 lavorano in modo
complementare e si e’ quindi in presenza di una ridondanza di informazione.
Una cella ottenuta eliminando uno di questi transistori e’ la cella a tre transistori di figura 4.9
( b ). In fase di lettura il dato e’ decodificato dallo stato del transistore T1, in conduzione o meno in
base alla carica immagazzinata nelle capacita’ parassita gate-source. Pertanto quanto T3 passa a
condurre T1 controlla il passaggio di corrente sulla linea dei dati ( R ) e funge quindi da convertitore
tensione-corrente.
Si puo’ tuttavia giungere ad una cella ancora piu’ semplice, realizzata con un unico
transistore, come illustrato in figura 4.9 (c). L’operazione di lettura avviene in tal caso come segue:
ƒ
ƒ
In un primo tempo la tensione della linea dei dati viene portata allo stato alto.
Successivamente, quando T3 viene passa in conduzione, alzando il livello di tensione della
linea di parola, un amplificatore a soglia (sense amplifier) legge uno “0” o un “1” in
funzione della variazione di tensione che viene a verificarsi o meno sulla linea dei dati,
come illustrato in figura 4.10.
159
Capitolo IV
Memorie e logiche programmabili
Tensione della linea dei dati
lettura di un "1"
T1 ON
lettura di uno "0"
attivazione del
sense amplifier
tempo
figura 4.10
ƒ
A queste operazioni segue evidentemente un refresh.
Ogni linea dei dati e’ collegata a un “sense amplifier” che entra a far parte del circuito di
controllo di figura 4.3. Per ottenere elevate sensibilita’ e per questioni di stabilita’ il “sense
amplifier” e’ spesso realizzato in configurazione differenziale.
4.4.3) Struttura di una memoria RAM dinamica.
A titolo di esempio in questo paragrafo verranno illustrati i principi secondo i quali funziona
una semplice memoria RAM dinamica da 4 bit, il cui schema e’ riportato in figura 4.11. Le forma
d’onda dei segnali che controllano questo circuito sono illustrate in figura 4.12.
linee dei dati
V
V rif
rif
Precarica
Precarica
X
0
C
X
b
C
s
C
C
C
C
C
b
s
1
V
b
s
V
rif
Tristate sense
amplifier
C
b
refresh
read
s
rif
Tristate sense
amplifier
refresh
read
write
read
Y
Y
data bus
uscita
dati
ingresso
dati
figura 4.11
Si osservi che un ciclo, sia esso di lettura che di scrittura, puo’ essere suddiviso in due periodi
distinti, detti rispettivamente periodo attivo e periodo di precarica. Durante il periodo attivo
vengono eseguite le operazioni richieste, mentre durante il periodo di precarica la memoria viene
preparata per le operazioni successive. Durante quest’ultimo periodo, con riferimento alla figura
160
Capitolo IV
Memorie e logiche programmabili
4.11, non si fa altro che connettere le linee dei dati, tramite i rispettivi interruttori MOS controllati
dall’impulso di precarica, alla tensione di riferimento Vrif, di valore intermedio tra i livelli di
tensione corrispondenti allo “0” e all’”1” logici. Alla fine del periodo di precarica la linea dei dati si
trovera’ ad una tensione che in pratica coincide con Vrif, poiche’ l’amplificatore di refresh si trova
nel suo stato ad alta impedenza.
CICLO DI LETTURA - Ingresso WRITE basso
indirizzi
precarica
READ
refresh
Uscita dati
dato valido
CICLO DI SCRITTURA - Ingresso READ basso
WRITE
Ingresso dati
periodo attivo
precarica
figura 4.12
Appena terminato il periodo di precarica, le linee di indirizzo selezionate si portano a livello
alto. La linea X fara’ condurre i MOS delle due celle situate sulla medesima riga, connettendo le
corrispondenti capacita Cs alle linee dati. Di conseguenza le cariche della capacita’ Cs e della
capacita’ Cb si ridistribuiscono in modo che sulla linea dei dati si abbia una tensione pari a:
VR =
(CS .VS + C b .Vrif )
(CS + C b )
Tale tensione vie confrontata dal “sense amplifier” con Vrif e quindi la rivelazione del dato
memorizzato in ciascuna cella avviene senza difficolta’. Il dato della colonna selezionata passa poi
sul bus dati e, tramite il “data bus buffer”, passa al terminale di uscita.
Se a questo punto il ciclo terminasse, i dati presenti nelle celle lette risulterebbero fortemente
degradati. La lettura cioe’ sarebbe di tipo distruttivo. Gli amplificatori di refresh ovviano a tele
inconveniente, ripristinando i corretti valori di tensione nelle celle. E’ ovvio che tutte le celle
accessibili della stessa linea devono venire rinfrescate contemporaneamente.
Si noti che nel ciclo di lettura, durante il periodo attivo, l’indirizzamento termina prima di
qualsiasi altro segnale, allo scopo di proteggere i dati memorizzati, che potrebbero deteriorarsi se
161
Capitolo IV
Memorie e logiche programmabili
piu’ segnali commutassero contemporaneamente prima che le celle vengano isolate dal resto del
sistema.
L’operazione di scrittura e’ relativamente piu’ semplice. Il segnale “write” abilita il buffer di
ingresso e il relativo dato, attraverso l’amplificatore di refresh viene trasferito sulla linea dati
selezionata.
Si noti che ciascuna cella richiede solo due componenti, due linee di segnale e una linea di
alimentazione (quella di massa). Inoltre in condizioni di riposo la cella non dissipa potenza. A
fronte di questi vantaggi si ha un aumento del tempo di accesso, determinato dal periodo di
precarica e dalla necessita’ di assicurare che ciascuna riga sia periodicamente indirizzata per
assicurare il refresh dai dati.
Oltre alla necessita’ di refresh e’ di considerevole importanza l’istante di inizio del
funzionamento del “sense amplifier”. RAM dinamiche veloci richiedono che il “sense amplifier”
inizi a funzionare il piu’ presto possibile; tuttavia anticipare troppo l’inizio del funzionamento
riduce eccessivamente la distanza tra le tensioni corrispondenti ai due stati logici sulle linee dati e
puo’ dar luogo a fenomeni di instabilita’. La relazione ricavata per VR vale, infatti, solo a regime.
La miglior temporizzazione e’ funzione di diversi fattori, quali il rapporto tra la capacita’
delle linee dati e quelle delle celle di memoria., la sensibilita’ del “sense amplifier”, la generazione
interna di rumori e altre condizioni.
Le considerazioni sul rumore, molto importanti in quanto il “sense amplifier” deve operare su
livelli di tensione abbastanza bassi, portano a particolari geometrie nella disposizione delle celle di
memoria, che tendono ad ottimizzare la velocita’ di funzionamento e l’immunita’ al rumore. Non si
ritiene tuttavia utile in questa sede approfondire l’argomento.
4.5) Esempio di utilizzazione di memorie ROM.
Nel presente paragrafo verra' esaminato l'impiego di memorie ROM al fine di utilizzare un
monitor televisivo come display alfanumerico. Il principio di funzionamento di tale sistema, capace
di visualizzare 16 righe, ciascuna contenente un massimo di 64 caratteri, puo' essere visto con
l'ausilio dello schema a blocchi di fig. 4.13.
impulso di riga
impulso
di quadro
reset
Clock
2
load
reset
Contatore modulo 64
Clock
1
P6
Q
5
Shift
register
P
0
C
A4
Generatore
di
caratteri
C0
5
M0
M5
Memoria RAM
da 64 x 16 parole
da 6 bit
Q
1
A0
M9
M
D
D0
6
Uscita video
B
B0
3
Contatore modulo 11
3
Contatore modulo 16
reset
reset
figura 4.13
Ogni carattere sia separato da quello successivo da due spazi, e ogni linea di caratteri sia
separata dalla successiva da quattro spazi, come illustrato in fig. 4.14.
162
Capitolo IV
Memorie e logiche programmabili
In tal modo, supponendo che ciascun carattere sia realizzato con una matrice 5 x 7, l'effettivo
spazio riservato ad ogni carattere, comprensivo dell'area di separazione tra caratteri e tra righe,
risulta essere di 7 x 11.
7
11
figura 4.14
L'intera pagina alfanumerica visualizzata venga poi prelevata da una memoria RAM da 64 x
16 = 1024 parole da 6 bit, in ciascuna delle quali e' contenuto il codice del carattere da visualizzare.
I bit di indirizzo di questa memoria saranno pertanto 10 (M0-M9) di cui i primi 6 (M0-M5)
individuano la posizione sulla riga in cui visualizzare il carattere, gli ultimi quattro (M6-M9) una
delle 16 righe costituenti la pagina. I 6 bit del dato (A0-A5), uscita della parola indirizzata, vengono
inviati all'ingresso del generatore di caratteri.
Il funzionamento puo' essere descritto nel modo seguente. L'impulso di quadro azzera:
ƒ Il contatore modulo 64, necessario a indirizzare i 64 caratteri che formano ciascuna riga.
ƒ Il contatore modulo 16 necessario ad indirizzare ciascuna riga della pagina.
ƒ Il contatore modulo 11 utilizzato per la scansione delle sette righe che costituiscono ciascun
carattere (ingressi R0, R1, R2 del generatore di caratteri) e le quattro righe che costituiscono
la spaziatura verticale.
L'impulso di riga e' inviato al contatore modulo 11 e al generatore di clock (clock1) che
fornisce un treno di 64 impulsi all'ingresso del contatore modulo 64. Un secondo generatore di
clock (clock2), sincronizzato con il clock1, permette di serializzare, utilizzando uno shift-register,
l'uscita parallela (Q1,..,Q5) del generatore di caratteri. Q1-Q5 sono i cinque bit che formano una
linea del carattere e vengono inviati ai primi cinque ingressi paralleli (P0, .., P4) dello shift-register,
mentre gli ultimi due ingressi paralleli (P5 e P6) vengono mantenuti costantemente a zero in modo
da realizzare la spaziatura orizzontale tra i diversi caratteri della stessa riga. Pertanto per ogni
impulso fornito dal clock1 si hanno 7 impulsi di clock2.
I sette bit presenti agli ingressi paralleli dello shift-register vengono caricati nel registro stesso
con un opportuno ritardo in modo da evitare errori di caricamento per mezzo di un segnale di "load"
ricavato dal clock1.
Il contatore modulo 11 effettua il conteggio degli impulsi di riga e fornisce i tre bit di
indirizzamento B0, B1 e B2 agli ingressi R0, R1 e R2 del generatore di caratteri, in modo da
163
Capitolo IV
Memorie e logiche programmabili
individuare in sequenza, durante i primi 7 impulsi di ciascun gruppo di 11 impulsi, le sette righe che
costituiscono il carattere, mentre durante i successivi quattro impulsi e' necessario azzerare
totalmente lo shift-register, in modo da realizzare la spaziatura verticale. E' necessario pertanto
realizzare la semplice funzione logica illustrata in fig. 4.15.
Stato del contatore
B3 B 2 B 1 B 0
Reset
0
0000
0
1
0001
0
2
0010
0
3
0011
0
4
0100
0
5
0101
0
6
0110
0
7
0111
1
8
1000
1
9
1001
1
10
1010
1
Reset = B 3 + B 0 . B1 . B 2
figura 4.15
Il contatore modulo 16 totalizza i gruppi di 11 linee video, cioe' incrementa il suo stato ogni
11 impulsi di riga. Le sue uscite (D0, ..., D3) vengono inviate alla memoria RAM (M6-M9) in modo
da indirizzare successivamente le 16 righe che costituiscono la pagina.
Infine i sei bit di uscita del contatore modulo 64 (C0-C5 ) sono connessi ai primi sei bit di
indirizzo della RAM, per individuare in successione la locazione che contiene il codice di ciascuno
dei 64 caratteri che costituiscono la riga.
4.6) Le ROM a maschera.
La realizzazione di una cella di memoria ROM non programmabile e’ molto semplice.
Quando infatti si vuol ottenere in uscita una tensione bassa e’ sufficiente connettere tra la linea di
bit e il potenziale di riferimento un MOS secondo quanto illustrato in figura 4.16. Quando la linea
di riga viene portata a potenziale alto il MOS passa in conduzione portando a potenziale di massa la
relativa linea di bit.
In sede di fabbricazione pertanto devono essere selettivamente realizzati dei MOS in
corrispondenza agli “0” logici che si vogliono ottenere in uscita, mentre quando si vuole ottenere un
“1” logico le rispettive linee vanno lasciate sconnesse.
164
Capitolo IV
Memorie e logiche programmabili
bit y1
bit y
o
linea di riga
linea di riga
linea di riga
figura 4.16
4.7) La cella di memoria EPROM ed EEPROM.
La struttura di una cella EPROM o EEPROM de’ del tutto simile a quella di una ROM a
maschera. La differenza sostanziale tuttavia risiede nel tipo di MOS utilizzato, che funziona come
un elemento programmabile. In sostanza il MOS utilizzato ha la struttura illustrata in figura 4.17.
gate 2
G
gate 1
S
n+
SiO2
p
D
n+
figura 4.17
Oltre il normale gate presente in tutti i transistori MOS viene realizzato, all’interno dello
strato di biossido di silicio un secondo gate (indicato in figura con gate 1), che tuttavia e’
completamente isolato. Questa realizzazione permette di modificare selettivamente la tensione di
soglia del dispositivo, portandola al di sopra delle normali tensioni di funzionamento (di solito
comprese tra i 3 e i 5 volt).
Quando infatti al gate 2 e al drain viene applicata una tensione positiva elevata (15 ÷ 25 V)
l’elevato campo elettrico presente nella regione di svuotamento drain-substrato provoca una scarica
a valanga. In tale condizione elettroni ad alta energia possono penetrare nello strato di ossido ed
accumularsi sul gate 1. Questa carica, quando drain e gate 2 vengono riportati a potenziale zero,
forza il potenziale del gate 1 a valori negativi e tale potenziale impedisce la formazione del canale
alle normali tensioni di funzionamento.
Le elevate proprieta’ dielettriche del biossido di silicio consentono di mantenere la carica
intrappolata per periodi di tempo estremamente lunghi, che si stimano essere dell’ordine delle
decine di anni.
165
Capitolo IV
Memorie e logiche programmabili
La carica intrappolata puo’ poi essere rimossa per effetto fotoelettrico con l’esposizione a luce
ultravioletta, permettendo in tal modo la cancellazione del dato memorizzato e rendendo il
dispositivo nuovamente atto ad essere utilizzato. I tempi di cancellazione sono tuttavia
notevolmente lunghi e richiedono lo smontaggio delle EPROM dal circuito in cui sono montate.
Questi inconvenienti possono essere superati ricorrendo alle EEPROM in cui sia la lettura che
la scrittura avvengono con mezzi elettrici. La struttura del MOS e’ ancora quella a gate flottante, ma
lo spessore tra gate 1 e substrato e’ molto sottile (dell’ordine di 100 c). In queste condizioni la
carica intrappolata puo’ venire rimossa per effetto tunnel, quando tra gate 2 e substrato viene
applicata una tensione dell’ordine dei 10 V, che comunque e’ ancora notevolmente superiore alle
normali condizioni operative.
In ambedue le tecnologie tuttavia il numero di riprogrammazioni non e’ illimitato. In
particolare nelle EEPROM le caratteristiche dei transistori “floating gate” decadono con il numero
di programmazioni effettuate a causa degli elettroni che comunque rimangono intrappolati
nell’ossido.
4.8) Le ROM programmabili (PROM).
La maggior parte dei costruttori di semiconduttori offrono, oltre ai dispositivi che sono gia’
stati descritti, anche ROM programmabili dall’utente finale (programmable ROM) dette PROM.
Questi circuiti, come gia’ e’ stato accennato offrono un’elevata flessibilita’ e riducono i costi,
soprattutto quando la quantita’ necessaria e’ modesta.
Una PROM contiene una matrice di codifica in cui sono realizzate tutte le possibili
connessioni, come e’ illustrato in figura 4.18.
Xo
X1
XM-1
Wo
D
e
c
o
d
i
f
i
c
a
W1
Wµ
codice di ingresso
a M bit
µ = 2M
Yo Y1
YN-2 YN-1
codice di uscita a N bit
figura 4.18
Le connessioni sono normalmente realizzate con una striscia di silicio policristallino il cui
comportamento e’ simile a quello di un fusibile; quando cioe’ tale striscia viene percorsa da una
corrente superiore a un certo valore la connessione si interrompe. L’utente puo’ quindi facilmente
bruciare i fusibili di ogni elemento di memoria, realizzando la desiderata funzione ingresso-uscita.
Un modo alternativo e sotto certi aspetti piu’ comodo di vedere una ROM di questo tipo e’
quello di immaginarla costituita da un due piani detti rispettivamente piano AND e piano OR, con
riferimento a una relazione funzionale ingresso-uscita del tipo somma di prodotti. In altre parole
una memoria a sola lettura programmabile sara' costituita da un piano AND fiso, che realizza tutti i
termini minimi della variabili di ingresso, mentre il piano OR sara’ programmabile fondendo gli
opportuni collegamenti. In figura 4.19 e’ rappresentata la struttura di una PROM da 4 variabili di
ingresso e parallelismo 4 in uscita.
166
Capitolo IV
Memorie e logiche programmabili
Indirizzo
X3
X2
X1
X0
Collegamenti del piano OR
Collegamenti del piano AND
Y
3
Y
2
Y
1
Y
0
Uscita
figura 4.19
4.9) I dispositivi logici programmabili.
Nell’ambito della realizzazione di circuiti logici digitali un progettista puo’ scegliere tra
dispositivi discreti di tipo standard e dispositivi dedicati realizzati ad hoc per una specifica
applicazione (si parla in tal caso di ASIC Application Specific Integrated Circuit). Esistono tuttavia
dispositivi, i cosiddetti PLD (Programmable Logic Device) che si collocano a meta’ strada tra le
due precedenti categorie e sono adatti per applicazioni specifiche essendo completamente
personalizzabili dall’utente a seconda delle funzionalita’ richieste, ma conservano una struttura
regolare e di volta in volta sempre uguale.
Le stesse PROM possono esser fatte rientrare tra i PLD e sono state molto spesso usate come
array logici configurabili. Il piu’ grosso inconveniente che esse presentano, al di la’ della loro
limitata velocita’, risiede tuttavia nella eccessiva complessita’, che aumenta esponenzialmente con
il numero degli ingressi, e nel limitato numero delle linee di uscita.
Per superare queste limitazioni gia’ verso la meta’ degli anni ’70 sono state introdotte le prime
vere logiche programmabili chiamate rispettivamente PAL (Programmable Array Logic) e la PLA
(Programmable Logic Array), cui a breve termine hanno fatto seguito le GAL (Generic Logic
Array). Per le prime due la struttura interna e’ simile a quella di una PROM, con i due piani AND e
OR gia’ descritti, mentre nelle GAL vengono integrati anche flip-flop, porte XOR e altri dispositivi,
con un’organizzazione in sottoinsiemi detti macrocelle configurabili, tra le quali si possono
effettuare connessioni e realizzare anche loop di reazione. La disponibilita’ di sistemi di calcolo a
basso costo e di software in grado di trasformare le equazioni booleane in “mappe di fusibili” ha
favorito un ampio utilizzo di questi dispositivi.
167
Capitolo IV
Memorie e logiche programmabili
Non si vuole in questa trattazione, di necessita’ di tipo qualitativo e di primo approccio
all’argomento, analizzare nel dettaglio i diversi tipi di dispositivo prodotti. Sara’ sufficiente dire che
la densita’, cioe’ il numero di funzioni integrabile sul singolo chip, e’ andata via via aumentando;
che accanto alle tecniche a “fusibile” sono state introdotte quelle ad “antifusibile” con le quali la
programmazione crea un cortocircuito anziche’ un circuito aperto; che esistono dispositivi basati sia
sulla tecnologia EPROM a ultravioletti che su quella EEPROM; che esistono dispositivi in cui la
logica viene controllata attraverso opportuni bit caricati in apposite celle RAM statiche localizzate
sul chip stesso e cosi’ via.
4.9.1) La logica a matrice programmabile (PAL).
La logica a matrice programmabile e’ molto simile ad una PROM in quanto e’ costituita
anch’essa da un piano AND e uno OR. Tuttavia a differenza di quest’ultima il piano OR e’ fisso
mentre e’ programmabile quella AND. Le PAL sono utilmente impiegate per realizzare equazioni
Booleane in luogo delle piu’ ingombranti e complesse PROM. Sono ovviamente disponibili solo
collegamenti OR specifici, mentre tutti quelli AND sono realizzabili. La programmazione consiste
nel bruciare le connessioni AND indesiderate.
In figura 4.20 e’ riportata la struttura di una PAL da 16 parole per 4 bit. Le connessioni
fusibili sono rappresentate con una X.
Ingresso
X3
X2
X1
X0
Collegamenti del piano OR
Collegamenti del piano AND
Y
3
Y
2
Uscita
figura 4.20
168
Y
1
Y
0
Capitolo IV
Memorie e logiche programmabili
4.9.2) Le matrici logiche programmabili (PLA).
Tra i dispositivi programmabili di tipo AND-OR le PLA sono i piu’ flessibili in quanto in esse
esistono tutti i possibili collegamenti sia sul piano AND che su quello OR, come mostrato in figura
4.21. La programmazione anche in questo caso consiste nel bruciare le connessioni indesiderate.
Ingresso
X3
X2
X1
X0
Collegamenti del piano OR
Collegamenti del piano AND
Y
3
Y
2
Y
1
Y
0
Uscita
figura 4.21
La flessibilita’ e la convenienza di una PLA rispetto una PROM emerge chiaramente dal
seguente esempio. Si supponga di dover lavorare con 16 ingressi e 8 uscite. In una PROM in tal
caso si dovrebbero avere 216 = 65535 parole da 8 bit per un totale di 524288 bit e con questo
sistema si potrebbero realizzare 8 funzioni logiche combinatorie da 16 variabili, esprimendo
ciascuna funzione logica nella forma canonica somma di prodotti.
Si consideri allora un sottoinsieme della ROM appena descritta. Si abbiano sempre 16 ingressi
e 8 uscite, ma anziche’ 65535 parole se ne abbiano a disposizione ad esempio solamente 48.
Ciascuna di queste parole prende il nome di prodotto parziale. Il termine diviene autoesplicativo
considerando che il piano AND e’ completamente programmabile e ciascun prodotto non contiene
tutte le variabili di ingresso. Si parla in questo caso di una PLA 16 x 48 x 8. Il piano AND e’ detto
matrice di decodifica ed e’ formato da 48 AND con un numero massimo di ingressi pari a quello
delle variabili di ingresso al dispositivo.
Il piano OR, detto matrice di codifica, e’ anch’esso completamente programmabile e consiste
di 8 gate OR le cui uscite sono le uscite del dispositivo. Gli ingressi possibili di ciascun OR sono in
numero pari a quello dei prodotti parziali, ma quelli non necessari possono venire esclusi per
fusione del relativo collegamento.
169
Capitolo IV
Memorie e logiche programmabili
In sostanza si vede che con una PLA non e’ piu’ necessario esprimere una funzione booleana
in forma canonica, ma e' possibile implementarla in una qualsiasi forma semplificata, purche’
somma di prodotti. E’ evidente il risparmio circuitale che se ne puo’ ricavare. Da un altro punto di
vista si puo’ affermare che mentre una PROM memorizza dati binari, una PLA memorizza funzioni
booleane.
Si considerino ad esempio le due seguenti funzioni.
y1 = A 3 .A 0 + A 9 .A 4 .A1 + A11 .A10 .A 7 .A 3 + A13 + A15 .A14
y 2 = A 5 .A 4 .A 0 + A 9 .A 4 .A1 + A12 .A 6
Per realizzare queste due funzioni sono necessari solo sette prodotti parziali (e non otto in
quanto il prodotto A 9 .A 4 .A e’ comune ad ambedue le funzioni. Facendo quindi riferimento ad una
PLA 16 x 48 x 8 i rimanenti 41 prodotti parziali rimangono disponibili per le altre sei uscite da y3 a
y8.
La programmazione della PLA avviene creando una mappa dei fusibili (o delle connessioni
desiderate quando la PLA viene programmata dal fabbricante con una maschera di metallizzazione).
Per l’esempio che e’ stato preso in considerazione la mappa avra’ l’aspetto riportato in tabella 4.2.
Nella zona ingresso un simbolo X sta ad indicare che vengono bruciati ambedue i collegamenti con
la relativa variabile, uno “0” che rimane integro il collegamento con A i , un “1” quello con A i .
Nella zona uscite uno “0” indica la bruciatura del collegamento con il relativo prodotto parziale.
Prodotto
Parziale
TABELLA 4.2
INGRESSI
USCITE
15 14 13 12 11 10 9
X X X X X X X
8
X
7
X
6
X
5
X
4
X
3
0
2
X
1
X
0
1
Y1
1
Y2
0
X
X
X
X
X
X
0
X
X
X
X
1
X
X
0
X
1
1
A11 .A10 .A 7 .A 3 X
X
X
X
1
0
X
X
0
X
X
X
1
X
X
X
1
0
A13
X
X
1
X
X
X
X
X
X
X
X
X
X
X
X
X
1
0
A15 .A14
0
1
X
X
X
X
X
X
X
X
X
X
X
X
X
X
1
0
A 5 .A 4 .A 0
X
X
X
X
X
X
X
X
X
X
1
0
X
X
X
1
0
1
A12 .A 6
X
X
X
1
X
X
X
X
X
1
X
X
X
X
X
X
0
1
A 3 .A 0
A 9 .A 4 .A1
In sostanza una PLA puo’ gestire, a parita’ di complessita’, un maggior numero di ingressi ed
e’ piu’ economica di una PROM. E’ evidente tuttavia che puo’ venire vantaggiosamente utilizzata
solo se i prodotti parziali necessari sono una piccola frazione delle possibili combinazioni di
ingresso.
4.9.3) I gate array programmabili (PGA) e i dispositivi ad elevata complessita’.
Sotto tale dizione vengono annoverati tutta una serie di dispositivi ad elevata densita’ di
integrazione. L’architettura e’ normalmente basata su una struttura regolare di blocchi di logica
configurabile interconnettibili tramite opportune linee circondati da blocchi di circuiti che
provvedono all’input e all’output.
170
Capitolo IV
Memorie e logiche programmabili
A rigore i gate array dovrebbero contenere solamente un gran numero di dispositivi logici
elementari, la cui programmazione consiste semplicemente nello stabilire le volute interconnessioni.
Esistono tuttavia elementi logici piu’ complessi, al cui interno si trovano anche dispositivi
sequenziali, che piu’ propriamente dovrebbero essere chiamati dispositivi logici programmabili
ad elevata complessita’; tuttavia non e’ ben chiaro dove possa essere fissato il confine tra i due tipi
di dispositivo e pertanto nel seguito non se ne terra’ conto.
La personalizzazione da parte dell’utente puo’ venire fatta in diversi modi: con una
metallizzazione, con la tecnica a fusibile o a antifusibile, ma molto spesso avviene caricando in
modo seriale o parallelo i dati di configurazione in una EPROM o una EEPROM o ancora
prelevando tali dati dall’esterno e memorizzandoli in apposite celle di RAM appartenenti al
dispositivo. Si parla in tal caso di dispositivi programmabili in campo (ad esempio di FPGA – Field
Programmable Gate Array). Con l’ultima modalita’ di programmazione citata non vi e’ alcuna
limitazione sul numero delle possibili riprogrammazioni e i dispositivi possono venire utilizzati in
progetti in cui l’hardware cambi dinamicamente o quando sia necessario adattare l’hardware a
diverse applicazioni. Una volta testato e consolidato il progetto si puo’ poi passare a versioni del
dispositivo a maschere in cui le celle di RAM e la logica di connessione vengono rimpiazzate da
metallizzazioni, conservando tuttavia la compatibilita’ con i componenti programmabili che
sostituiscono.
Gli elementi fondamentali dei dispositivi programmabili sono i blocchi di logica configurabile
(Configurable Logic Block – CLB) e i blocchi di ingresso-uscita (Input Output Block – IOB). I
primi costituiscono il supporto su cui verranno realizzate le funzioni logiche relative
all’applicazione, i secondi le interfacce tra gli ingressi e le uscite del circuito integrato e le linee
interne di segnale. Molto spesso sono poi disponibili anche altri elementi, quali buffer 3-state
associati a ciascun CLB, decodificatori di indirizzi, oscillatori, ecc. La complessita’ e’ mediamente
compresa tra 10.000 e 25.000 porte equivalenti, ma si puo’ giungere anche a 250.000 porte
equivalenti.
Senza alcuna pretesa di completezza la struttura di un blocco CLB potrebbe essere quella
riportata nella figura 4.22, che rappresenta lo schema a blocchi di un dispositivo Xilinx (XC4000).
C4 .... C1
4
N1
G4
G3
G2
G1
F4
F3
F2
F1
D in/H
2
SR/Ho
Ec
Bypass
Controllo
Funzione
logica
di
S/R
D
YQ
SD
G4 .. G1
Funzione
logica
di H
Ec
RD
1
Fi , Gi , N1
Y
Funzione
logica
di
Controllo
Bypass
S/R
D
SD
XQ
F4 .. F1
Ec RD
Clock
1
Multiplexer controllati
dal programma di
configurazione
X
figura 4.22
171
Capitolo IV
Memorie e logiche programmabili
All’ingresso si hanno due generatori di funzioni logiche (F e G) a quattro ingressi (F1 – F4 e
G1 – G4), seguiti da un terzo (H), i cui ingressi possono essere le uscite dei precedenti, oppure
possono provenire dall’esterno. Dato che il principio di funzionamento e’ quello delle tabelle di
look-up, e’ possibile usare F e G come array di celle di memoria configurabili in 16x2, 32x1 o
16x1 bit. Si ha quindi disponibilita’ di RAM direttamente sul chip.
Ogni CLB contiene poi due flip-flop di tipo D, che possono essere usati assieme ai due
generatori di funzioni oppure indipendentemente. E’ possibile scegliere se rendere attivo il clock sul
fronte di salita o su quello di discesa; si dispone inoltre di un ingresso di abilitazione per il clock
(EC – clock enable) e di un ingresso di set (o di reset) asincrono. E’ interessante notare che la
realizzazione del clock enable viene effettuata senza anteporre alcuna porta all’ingresso del clock in
modo da evitare di introdurre ritardi indesiderati e da minimizzare il conseguente fenomeno del
clock-skew, oltre che di possibili glitch. In funzione del segnale CE si fa passare l’ingresso esterno,
oppure si fa ricircolare l’uscita, inibendo cosi’ il clock, come illustrato in figura 4.23.
D
D
Q
Q
CE
CLK
figura 4.23
Per facilitare l’implementazione e per migliorare le prestazioni di sommatori, sottrattori,
accumulatori, comparatori e contatori ogni cella contiene della logica aritmetica dedicata alla
generazione veloce del riporto (Fast Carry Logic), che tuttavia nello schema semplificato di figura
4.22 non compare.
I blocchi di ingresso e di uscita costituiscono poi l’interfaccia tra i terminali fisici del circuito
integrato e la logica interna e sono configurabili dall’utente. Ogni IOB controlla un pin e puo’
essere configurato come ingresso, come uscita o come linea bidirezionale. I segnali possono uscire
ed entrare direttamente dall’esterno oppure possono essere memorizzati in appositi flip-flop. In tutti
i casi tuttavia i segnali vengono opportunamente amplificati con dei buffer. In figura 4.24 e’
riportato lo schema semplificato di un IOB.
Pull-up
Pull-down
passivo
Slew rate
control
CE
Out
D
Q
output buffer
Output
Clock
PAD
input buffer
I1
I2
Input
Clock
Q
D
ritardo
figura 4.24
172
Capitolo IV
Memorie e logiche programmabili
A maggior chiarimento delle possibili strutture dei blocchi di logica configurabile si possono
citare gli elementi della serie FLEX 8000 dell’ALTERA, che hanno una struttura piu’ semplice di
quelli citati, ma sostanzialmente presentano un’architettura analoga.
L’elemento logico di base (Logic Element –LE) contiene un generatore di funzioni a quattro
ingressi il cui principio di funzionamento e’ sempre quello delle tabelle di look-up, un flip-flop
programmabile, una catena di riporto (carry) e quella che viene chiamata “cascade chain”, secondo
la struttura illustrata in figura 4.25.
Tabella
di
look-up
carry in
cascade in
catena
di
Carry
cascade
chain
D
P
Q
LE out
C
logica di
clear-preset
selezione del clock
clock
carry out
cascade out
figura 4.25
Il generatore di funzioni permette di implementare qualsiasi funzione di quattro variabili. Il
flip-flop programmabile puo’ venire configurato per funzionare come D, T, JK o SR. I segnali di
controllo di clock, clear e preset possono essere sia segnali che provengono dall’esterno attraverso
pin dedicati, sia segnali interni. Si noti inoltre che se si dovessero generare funzioni puramente
combinatorie, il flip-flop puo’ essere scavalcato e l’uscita del generatore di funzioni puo’ venire
riportata direttamente in uscita del blocco.
L’architettura realizzata mette poi a disposizione due itinerari ad alta velocita’ per i dati, la
catena di carry e la “cascade chain”, che permettono l’inteconnessione con le macrocelle adiacenti,
purche’ appartenenti alla stessa riga, senza ricorrere alle risorse programmabili di connessione del
dispositivo. La catena di carry fornisce una funzione di carry veloce (<1 nsec.) tra le macrocelle. Il
segnale di carry-in dai bit di ordine piu’ basso viene utilizzato sia dalla LUT sia viene trasferito alla
successiva porzione della catena di carry. Questa risorsa permette di implementare facilmente
contatori e sommatori di qualsiasi lunghezza.
La “cascade chain” permette di implementare funzioni combinatorie con un numero di
ingressi anche molto elevato. LUT adiacenti possono essere utilizzate per calcolare in parallelo
opportune porzioni della funzione; la “cascade chain” connette poi serialmente i valori intermedi
utilizzando una logica AND o una logica OR (utilizzando il teorema di De Morgan) secondo lo
schema illustrato in figura 4.26.
173
Capitolo IV
Memorie e logiche programmabili
AND cascade chain
OR cascade chain
LUT
LUT
LUT
LUT
LUT
LUT
figura 4.26
Ciascuna delle celle che sono state sommariamente descritte puo’ poi operare in uno di
quattro modi fondamentali. In figura 4.27 sono illustrati per sommi capi questi quattro modi di
funzionamento.
Modo normale: tale modalita’ operativa viene utilizzata in applicazioni logiche di tipo
generale e per realizzare funzioni logiche di un elevato numero di variabili, dove la “cascade chain”
puo’ essere utilmente sfruttata. L’uscita della tabella di look-up (LUT) puo’ venire combinata con
l’ingresso “cascade in” in modo da realizzare funzioni complesse.
Modo aritmetico: In questo modo operativo sono disponibili due tabelle di look-up, ideali
per realizzare sommatori, accumulatori e comparatori. Una delle due LUT realizza una funzione di
tre variabili, l’altra sintetizza il bit di riporto (carry).
Contatore bidirezionale: sono disponibili in tal caso segnali di abilitazione, di conteggio
avanti/indietro sincrono, di caricamento di dati. Vengono usate due LUT da tre bit. La prima genera
il dato di conteggio, la seconda un bit veloce di carry. Un multiplexer da due a una linea permette il
caricamento sincrono del dato. E’ possibile anche il caricamento asincrono attraverso gli ingressi di
clear e preset del flip-flop.
Contatore azzerabile: questo modo di funzionamento e’ del tutto simile a quello del
contatore bidirezionale con l’unica differenza che anziche’ una funzione di conteggio
avanti/indietro viene implementato un azzeramento sincrono.
174
Capitolo IV
Memorie e logiche programmabili
MODO NORMALE
CONTATORE BIDIREZIONALE
cascade in
carry in
cascade in
carry in
LE out
dato 1
dato 2
D
Q
LUT
(4)
LUT
(3)
LE out
Q
D
1
enable
up/down
0
dato
dato 3
dato 4
cascade out
cascade out
LUT
(3)
load
carry out
CONTATORE AZZERABILE
MODO ARITMETICO
carry in
cascade in
carry in
LE out
dato1
dato 2
D
LUT
Q
D
1
enable
clear
(3)
LUT
(3)
Q
LE out
0
dato
LUT
cascade out
LUT
(3)
cascade out
(3)
load
carry out
carry out
figura 4.27
Gli elementi logici descritti vengono poi arrangiati in gruppi di otto, formando quelli che
vengono chiamati “logic array block” (LAB), formando nell’insieme del componente una struttura a
grana piu’ grossa che facilita un’efficiente interconnessione nelle strutture complesse di elevate
prestazioni. Ciascun LAB (figura 4.28) dispone di quattro segnali di controllo che possono essere
utilizzati in ciascuno degli otto elementi. Questi segnali, quali ad esempio il clock globale, il reset o
il preset, che devono avere una bassa dispersione del ritardo per minimizzare i problemi di skew,
possono essere ricavati da terminali di ingresso dedicati o attraverso i pin di I/O o ancora da
qualsiasi segnale interno attraverso le linee di interconnessione tra i LAB.
Interconnessione di riga
24
4
connessione tra riga
e colonna
4 carry e cascade in
dei LAB a sinistra
interconnessione
locale dei LAB
interconnessione
di colonna
2
4
32
canali
4
4
4
8 18
LE 1
LE 2
LE 3
segnali di controllo
dei LAB
4
LE 4
4
LE 5
4
4
LE 6
LE 7
4
LE 8
8
2
carry e cascade out
per i LAB a destra
figura 4.28
175
Capitolo IV
Memorie e logiche programmabili
L’interconnessione tra LAB e dispositivi di I/O e’ assicurata da una serie di canali di
comunicazione orizzontali e verticali che attraversano l’intero dispositivo. I LAB sono sistemati in
una struttura a matrice e ogni riga di LAB ha una riga dedicata di interconnessioni che viene
utilizzata per il colloquio bidirezionale dei LAB della stessa riga. Le interconnessioni di colonna
servono al colloquio tra elementi di righe diverse, secondo quanto schematicamente illustrato in
figura 4.29
canali di colonna (16)
canali di riga
ciascuna LE pilota
un canale di riga
LE1
LE2
reazioni locali
ciascuna LE pilota fino a
due canali di colonna
figura 4.29
Infine ciascuna riga e ciascuna colonna e’ connessa ad un certo numero di elementi di I/O
come riportato in figura 4.30.
IOE
IOE
IOE
IOE
1 IOE
IOE 1
interconnessione
di riga
8 IOE
IOE 8
LAB
A1
LAB
A2
1 IOE
IOE 1
8 IOE
interconnessione
locale del LAB
IOE 8
LAB
B1
LAB
B2
interconnessione
di colonna
IOE
IOE
IOE
IOE
figura 4.30
La struttura logica di questi ultimi e’ riportata in figura 4.31.
176
Capitolo IV
Memorie e logiche programmabili
controlli di I/O
alle interconnessioni di
riga o di colonna
dalle interconnessioni di
riga o di colonna
Q
D
inversione
programmabile
CLR
controllo di
slew rate
figura 4.31
Ciascun pin di I/O puo’ venire utilizzato come ingresso, come uscita o in modo bidirezionale;
e’ dotato di un registro che a sua volta puo’ essere utilizzato sia come elemento di ingresso che di
uscita e permette l’aggiustamento delle entrate in modo da ottenere il miglior compromesso tra
velocita’ operativa e rumore.
E’ ovvio che le due architetture sommariamente descritte non sono le sole possibili. L’intento
secondo il quale sono state presentate e’ semplicemente quello di dare un’idea della flessibilita’ e
della complessita’ dei componenti VLSI disponibili al giorno d’oggi. Per maggiori approfondimenti
si rimanda a testi specialistici sull’argomento.
4.10) I sistemi di sviluppo.
Per gestire le potenti risorse dei dispositivi programmabili risulta indispensabile avvalersi di
adeguati strumenti software. Normalmente tutte le case costruttrici forniscono sistemi di sviluppo
completi per i loro componenti.
Di solito si puo’ ritenere che la metodologia di progetto si sviluppi in tre passi, strettamente
legati tra loro:
♦ Descrizione del progetto (tramite schema o descrizione testuale)
♦ Implementazione
♦ Verifica
Il flusso operativo e’ riportato in figura 4.32 e, come si puo’ vedere, riguarda un procedimento
iterativo durante il quale qualsiasi correzione e/o ottimizzazione fa ritornare in ogni caso alla fase di
descrizione.
177
Capitolo IV
Memorie e logiche programmabili
simulazione funzionale
Descrizione
Verifica
(Design verification)
(Design entry)
simulazione temporale
schema
o
testo
simulazione
verifica sul circuito
analisi temporale statica
Implementazione
(Design implementation)
partizione, posizionamento e interconnessione
figura 4.32
4.10.1) Descrizione delle funzionalita’ richieste (design entry).
La descrizione grafica basata sullo schema circuitale e’ quella piu’ semplice e immediata.
Oltre ai blocchi fondamentali presenti fisicamente nelle celle elementari della FPGA i sistemi di
sviluppo offrono librerie di blocchi gia’ pronti corrispondenti a funzioni logiche piu’ o meno
complesse, quali contatori, registri, multiplexer ecc. E’ inoltre possibile definire blocchi
personalizzati basati su combinazioni di componenti presenti in libreria.
L’approccio descritto e’ tuttavia conveniente solo per progetti relativamente semplici. Per
sistemi piu’ complessi, descritti tramite equazioni booleane o macchine a stati logici, e’ piu’
conveniente fare riferimento alle descrizioni testuali come il VHDL (Very high speed integrated
circuit Hardware Description Logic). In questo modo ci si svincola dalla struttura del dispositivo
programmabile e si puo’ trasportare facilmente il progetto su PLD prodotti da altre case o
comunque aventi differenti strutture interne.
Esistono comunque dei punti di incontro tra i due metodi; e’ possibile infatti mescolarli
all’interno dello stesso progetto, descrivendo alcuni blocchi per via grafica alcuni blocchi e altri
tramite HDL. Molto spesso l’ambiente di sviluppo e’ in grado di gestire una struttura gerarchica,
con livelli superiori descritti graficamente e livelli piu’ bassi, che definiscono la logica di ogni
blocco, descritti nel modo piu’ opportuno.
Comunque il risultato finale di questa fase del processo, qualsiasi sia il metodo utilizzato, e’
una “netlist”, cioe’ un elenco dei blocchi utilizzati e delle relative interconnessioni.
4.10.2) Verifica (design verification).
La verifica di un progetto su PGA richiede una combinazione di test sul circuito stesso,
simulazioni con e senza ritardi temporali, e stime dei tempi di propagazione sui vari percorsi del
segnale, in modo da determinare situazioni critiche e limitanti per le prestazioni dell’intero sistema.
Per comprendere meglio come vengano effettuate queste operazioni si consideri la figura
4.33.
178
Capitolo IV
Memorie e logiche programmabili
Design entry
Functional
simulation
Implementation
Static timing
analysis
Timing
simulation
figura 4.33
Simulazione funzionale.
Una volta terminata la prima descrizione del circuito (Design Entry) si effettua una
simulazione funzionale, cioe’ una verifica del funzionamento logico del sistema. In questa fase non
si tiene conto dei ritardi introdotti dalla logica e dalle linee di interconnessione, ma si fa riferimento
solo alla “netlist” in modo da rendere facilmente evidenti le relazioni causa-effetto tra ingresso e
uscita di ogni blocco. Il sistema di sviluppo permette di selezionare direttamente sullo schema i
punti da testare, imponendo opportuni stimoli sugli ingressi e verificando il conseguente andamento
delle uscite mediante un’opportuna finestra di visualizzazione.
Dopo aver effettuato la simulazione funzionale, se non si e’ verificato alcun errore di logica,
si passa all’implementazione del circuito mediante le risorse del dispositivo scelto. Il passo
successivo poi consiste nell’analisi temporale del sistema e viene eseguito utilizzando l’analizzatore
temporale (Timing Analyzer) e la simulazione temporale (Timing Simulation).
Implementazione (Design Implementation).
Una volta scelto il dispositivo su cui effettuare l’implementazione e descritto correttamente il
comportamento voluto per il sistema, appositi programmi provvedono a creare una corrispondenza
tra le funzioni richieste e le risorse a disposizione, determinando il posizionamento ottimale e le
connessioni tra i CLB e gli IOB. Queste operazioni vengono compiute con un buon grado di
automazione, permettendo all’utilizzatore di intervenire o meno nelle varie fasi del processo. E’
possibile, per esempio, effettuare tramite un’opportuna interfaccia grafica un’operazione di
“floorplanning”, cioe’ di disposizione “manuale” di alcuni o di tutti i blocchi su una certa area
179
Capitolo IV
Memorie e logiche programmabili
dell’array. Si possono inoltre introdurre vincoli sulla piedinatura e sulle temporizzazioni di alcuni
segnali particolarmente critici.
L’andamento dei vari passi dell’implementazione viene costantemente monitorato e
documentato mediante opportuni file.
Analisi temporale statica.
Il “Timing Analyzer” permette di eseguire un’analisi temporale statica di un progetto
“sbrogliato”, cioe’ di un progetto di cui siano stati definiti i percorsi che realizzano i vari segnali e
collegano i blocchi necessari. Il termine “statica” e’ relativo al fatto che viene effettuata un’analisi
dei percorsi che uniscono tutte le coppie di punti del circuito, senza inserire stimoli agli ingressi dei
blocchi. Il circuito comunque deve essere sincrono, composto solo da flip-flop e da logica
combinatoria.
Il software permette di organizzare e visualizzare i dati necessari ad analizzare i percorsi
critici nel circuito ed evidenzia i percorsi aventi i maggiori ritardi. Essendo basato sui dati dei ritardi
tra i vari blocchi relativi ad ogni specifico dispositivo programmabile, e’ possibile verificare
velocemente l’effetto dovuto all’utilizzo di chip con prestazioni diverse in termini di velocita’ di
risposta. I dati necessari vengono forniti dalla casa costruttrice e vengono determinati nelle
condizioni di funzionamento piu' gravose. I risultati delle analisi dei vari tipi di ritardo vengono
riportati dal Timing Analyzer sotto forma di opportuni rapporti che riassumono i casi peggiori e
danno la possibilita’ di stimare la massima frequenza di clock del dispositivo, valutata come
l’inverso del massimo ritardo che si puo’ avere.
I percorsi dei segnali del circuito si dividono in sei categorie fondamentali:
•
•
•
•
•
•
Clock to Setup
Clock to Pad
Pad to Setup
Pad to Pad
Clock input
Clock Skew
Prima di descrivere i vari tipi di percorso e’ opportuno ricordare che viene definito tempo di
setup l’intervallo di tempo entro il quale il segnale di ingresso deve essere stabile prima che il clock
divenga attivo, mentre viene definito tempo di hold l’intervallo di tempo entro il quale il segnale di
ingresso deve rimanere stabile dopo che il clock e’ tornato passivo.
clock to setup
Questo tipo di percorso inizia all’uscita Q di un flip-flop o di un latch e termina all’ingresso di
un altro flip-flop, latch o RAM, elementi che necessitano di un periodo di assestamento (setup time)
prima che agisca il clock. Esso comprende il ritardo che si ha nel primo flip-flop, da quando agisce
il clock a quando e’ disponibile la corrispondente uscita (clock-to-Q-delay), il ritardo dovuto al
percorso da un flip-flop all’altro e il tempo di setup del secondo flip-flop. Il tempo che il segnale
impiega sull’intero percorso deve essere minore del periodo di clock. In figura 4.34 e’ rappresentato
un generico percorso di questo tipo con il corrispondente diagramma di temporizzazione.
180
Capitolo IV
Memorie e logiche programmabili
D
Q
interconnessioni
e
logica
D
Q
Clock
clock
dato valido
dato valido
ritardo da
clock a
uscita
ritardo della logica e
delle interconnessioni
tempo di
setup
ritardo del percorso e minimo periodo di clock
figura 4.34
Clock to Pad
Un percorso di questo tipo ha inizio all’uscita di un flip-flop e termina su un pin di uscita del
chip. Esso comprende il ritardo clock-to-Q del flip-flop e il ritardo relativo al percorso che porta
all’uscita, come illustrato in figura 4.35.
D
Q
interconnessioni
e
logica
pad
Clock
clock
dato valido
dato valido
ritardo da
clock a
uscita
ritardo della logica e
delle interconnessioni
ritardo del percorso
periodo minimo di clock
figura 4.35
181
ritardo
d'uscita
margine
esterno
Capitolo IV
Memorie e logiche programmabili
Pad to setup
Il percorso ha inizio su un ingresso del chip e termine all’ingresso di un flip-flop o di una
RAM. Il tempo corrispondente a tale percorso e’ quello richiesto al dato per entrare nel chip,
attraversare la logica e3 le risorse di connessione presenti e arrivare al flip flop prima che agisca il
clock, come mostrato in figura 4.36.
interconnessioni
e
logica
pad
D
Q
Clock
clock
dato valido
dato valido
margine
esterno
ritardo di
ingresso
ritardo della logica e
delle interconnessioni
tempo di
setup
ritardo del percorso
periodo minimo di clock
figura 4.36
Pad to pad
Il percorso inizia su un ingresso del chip e termina su un pin di uscita. Il tempo corrispondente
e’ il massimo tempo richiesto affinche’ il segnale entri nel chip, si propaghi attraverso la logica e i
collegamenti e lasci il chip. In questo caso non vi e’ alcuna relazione con il segnale di clock e in
figura 4.37 e’ schematizzato un tale tipo di percorso.
interconnessioni
e
logica
pad
pad
dato valido
dato valido
ritardo di
ingresso
ritardo della logica e
delle interconnessioni
ritardo del percorso
figura 4.37
182
ritardo di
uscita
Capitolo IV
Memorie e logiche programmabili
Clock input
Un percorso del tipo Clock Input puo’ avere inizio a un ingresso del chip, oppure all’uscita di
un flip-flop o una RAM, mentre ha termine sull’ingresso di clock di un flip-flop. Il corrispondente
tempo rappresenta il massimo tempo necessario al segnale per raggiungere il pin di destinazione
(figura 4.38).
D
Q
interconnessioni
e
logica
Clock input
clock input
pin di clock
ritardo del clock
figura 4.38
Clock skew
Per il Timing Analyzer il clock skew e’ dato dall’intervallo temporale che intercorre tra gli
istanti in cui agiscono due clock che siano connessi alla stessa linea. Questo fenomeno e' dovuto
alle diverse lunghezze dai percorsi che portano il clock agli elementi di destinazione e influisce
sulla massima frequenza di clock utilizzabile. Come si vede dalla figura 4.39 si possono avere due
tipi di clock skew, positivo o negativo, a seconda che il clock giunga al flip-flop di destinazione
prima o dopo di quando arrivi all’altro flip-flop.
D
Q
interconnessioni
e
logica
D
Q
FF2
FF1
Clock
clock a FF1
clock a FF1
clock a FF2
clock a FF2
clock skew
clock skew
periodo di clock
periodo di clock
figura 4.39
183
Capitolo IV
Memorie e logiche programmabili
E’ ovvio che i parametri appena definiti vengono determinati per ciascuno dei clock del
sistema.
Oltre ai risultati relativi ai casi peggiori e’ possibile studiare i ritardi relativi a un qualunque
percorso scelto sul circuito, selezionando il punto di partenza, quello di arrivo, oppure il percorso
piu’ lungo o quello piu’ lento e escludendo eventualmente particolari collegamenti. E’ possibile
ottenere un resoconto dettagliato passo per passo con l’indicazione del ritardo dovuto alla logica e
quello dovuto al tempo di propagazione sulle linee che uniscono ogni blocco al successivo.
Se nel circuito vi sono percorsi critici, noti a priori, ovvero evidenziati da analisi precedenti,
e’ di solito possibile imporre su di essi vincoli mediante opportune specifiche temporali che fissano
i massimi ritardi ammessi.
Simulazione temporale.
La simulazione temporale viene eseguita aggiornando la “netlist” ottenuta dalla descrizione
funzionale con i dati relativi ai ritardi e ai tempi di propagazione determinati dopo aver effettuato le
operazioni di posizionamento dei blocchi logici (placing) e di interconnessione (routing).
Si utilizza una tecnica chiamata “back annotation”, che consiste nel creare una corrispondenza
tra le informazioni temporali, i nomi dei segnali e i simboli utilizzati negli schemi. In tal modo e’
possibile eseguire la simulazione temporale utilizzando gli stessi stimoli e gli stessi punti di test di
quella funzionale, permettendo di confrontare piu’ facilmente i risultati.
Il simulatore e’ in grado di determinare e visualizzare automaticamente violazioni sui tempi di
setup, di hold e sulla durata minima dei cicli di clock, permettendo di localizzarle e di stabilirne le
cause.
Programmazione.
Una volta giunti a risultati soddisfacenti da tutte e tre le fasi del processo, eventualmente
provando su dispositivi con potenzialita’ piu’ ampie, si passa alla programmazione della PGA
utilizzando il file di configurazione ottenuto nella fase di implementazione. Spesso tale file viene
caricato su una EPROM dalla quale viene a sua volta caricato all’atto dell’accensione in apposite
celle di RAM all’interno della PGA. La possibilita’ di sostituire le EPROM permette di
riconfigurare il sistema anche “sul campo” in tempi brevissimi.
4.11) Frequenza massima di funzionamento di un sistema sequenziale.
Per definire la massima frequenza di commutazione di un dispositivo sequenziale i costruttori
fanno riferimento a semplici sistemi quale quello illustrato in figura 4.40
D
Q
clock
uscita
clock
uscita
figura 4.40
184
Capitolo IV
Memorie e logiche programmabili
Nella connessione illustrata in tale figura il flip-flop D si comporta come un T, commutando
in corrispondenza ad ogni fronte attivo del clock e realizzando un divisore binario.
Ovviamente la situazione prospettata e’ ottimale e normalmente le condizioni di lavoro
saranno piu’ pesanti di quella illustrata a causa di altri elementi combinatori o sequenziali che si
possono trovare inseriti nei loop di reazione. In altre parole la struttura presentata in figura 4.40
sara’ presumibilmente quella che puo’ commutare alla massima velocita’ e non rappresentera’ casi
realistici.
Per qualsiasi rete sequenziale si puo’ tuttavia utilizzare un semplice modello di ritardo,
derivato dal modello fondamentale dei circuiti sequenziali. Si sa infatti che un qualunque sistema
sequenziale puo’ venire rappresentato dal modello di figura 4.41, realizzato con una rete puramente
combinatoria e con uno o piu’ loop di reazione in cui si trovano inseriti elementi di memoria.
ingressi
Rete
combinatoria
stato attuale
memoria
uscite
stato futuro
clock
figura 4.41
Fissando allora l’attenzione su un determinato stato iniziale l’evoluzione del circuito potra’
venire studiata con riferimento al modello di figura 4.42.
ingressi
stato
attuale
Rete
combinatoria
MEM
uscite
ingressi della memoria
MEM
clock
figura 4.42
E’ evidente che per un corretto funzionamento del sistema il periodo T del clock non dovra’
essere inferiore al tempo che impiega un qualsiasi segnale ad attraversare la rete combinatoria. E’
185
Capitolo IV
Memorie e logiche programmabili
necessario quindi individuare il percorso critico, cioe’ quello che e’ caratterizzato dal massimo
ritardo di propagazione.
In realta’ la situazione e’ piu’ complessa in quanto, a rigore, sarebbe necessario tenere anche
conto del tempo di set-up e di propagazione degli elementi di memoria.
In termini di diagramma di temporizzazione la situazione sara’ quella illustrata in figura 4.43.
T
clock
ts
ts
stato
(ingresso)
t pmax
ingressi
della memoria
stato
(uscita)
t co
figura 4.43
In sostanza pertanto il periodo di clock non potra’ essere inferiore a t co + t p max + t s dove con
tco si e’ indicato il tempo di propagazione dell’elemento di memoria, con tpmax il tempo di
propagazione del cammino critico e con ts il tempo di set-up sempre dell’elemento di memoria. E’
ovvio che per tco e ts si devono prendere in considerazione i valori massimi forniti dal costruttore.
L’analisi del problema non e’ semplice da svolgere a tavolino quando il sistema sequenziale
sia appena complesso. Si ricorre allora, come detto nei paragrafi precedenti, alla simulazione
utilizzando programmi che permettono di calcolare con buona precisione i tempi di ritardo e di
segnalare qualsiasi violazione delle esigenze di temporizzazione.
186