Progettazione di sistemi digitali sincroni
In questa sezione lavoreremo a livello gate. La differenza tra il livello logico e livello gate è che a livello gate
le porte logiche non sono più semplici operatori ma sono le porte logiche che abbiamo progettato e quindi
dobbiamo mappare le nostre reti logiche su una libreria di componenti che abbiamo e di cui conosciamo
anche la natura fisica e quindi siamo in grado di riconoscere anche delle proprietà, oltre che logiche e
funzionali, parametriche. Dal livello gate ci alzeremo ancora arrivando a lavorare al livello register transfer
cioè il livello dove guarderemo il trasferimento di dati tra i registri e considereremo i componenti come interi
blocchi di logica combinatoria progettata a livello gate che svolgeranno delle macrofunzioni (esempio:
somma algebrica, non OR, cioè somma logica).
Livello gate
Metriche di progetto
Le metriche di progetto che ci interessano lavorando a livello gate sono:
1. Area (A). La prima delle metriche storicamente utilizzate. È la misura della complessità circuitale. Si
chiama area perché tutta questa disciplina di progettazione ha a che fare con i circuiti integrati e
quindi il numero di componenti si rispecchiava nell’area che la superficie di silicio occupata dai
componenti stessi nel momento in cui venivano fabbricati i circuiti integrati. La complessità circuitale
è una misura di area. Per stimare l’area ci mancano molti elementi perché quando noi progettiamo
una porta logica non sappiamo quante sia grande perché non conosciamo la tecnologia di riferimento
e nono facciamo neppure un’operazione che data la tecnologia di riferimento dimensionare i
transistor. I transistor non sono tutti uguali in un circuito ma possono avere un rapporto tra la
larghezza e la lunghezza del canale (quello che collega source e drain) che dipende dalla resistenza
elettrica che devono avere quando sono accesi. Quando noi progettiamo una porta logica non
sappiamo dire quanta area occuperà nel silicio. Non sappiamo dimensionare i transistor rispetto a
tutti gli altri componenti del circuito. Se infatti pensiamo a un inverter e un NAND, un inverter ha
solo un transistor di pull-up e uno di pull-down, un NAND ha due transistor in parallelo di pull-up e
due in serie nel pull-down. Se noi avessimo il transistor del pull-down dell’inverter della stessa
dimensione dei transistor di pull-down del NAND vorrebbe dire che se il primo ha una sua resistenza
R allora il secondo avrà una resistenza doppia 2R perché messi in serie. Dal punto di vista
prestazionale il secondo sarebbe più lento del primo. Possiamo compensare questa natura intrinseca
facendo in modo che ognuno dei transistor di pull-down del NAND abbiamo una resistenza dimezzata
rispetto a quella del transistor di pull-down dell’inverter. Per dimezzare la resistenza si allarga il
canale. Ad un livello così astratto possiamo stimare l’area contando il numero di gate. Se un circuito
ha quattro porte logiche diciamo che A = 4, se ne ha 15 allora A = 15. Una stima più ragionevole si fa
portando tutto a delle porte logiche che hanno la stessa dimensione. Infatti, un NAND ha dimensioni
doppie rispetto ad un inverter. Abbiamo visto che la famiglia {NAND} ci permette di fare tutto e allora
potremmo sviluppare circuiti utilizzando solo porte NAND che hanno la stessa dimensione. Se
vogliamo affinare ulteriormente la stima possiamo contare il numero di input delle porte logiche. Se
abbiamo un circuito con un inverter e un NAND a due ingressi avremo tre ingressi quindi A = 3. Questa
tecnica è più accurata perché è come se di desse il conteggio dei transistor.
2. Prestazioni. Le prestazioni consistono nel tempo che un circuito impiega, dati gli ingressi, a produrre
le uscite. Per questa metrica ha senso distinguere due altre metriche:
a. Tempo di propagazione (Tp). Rende conto del fatto che i segnali, all’interno di un qualunque
circuito, si propagano. Ci sono dei casi in cui dopo aver applicato nuovi ingressi ad un circuito
iniziamo a veder variare le uscite e dopo un po’ le vediamo stabilizzarsi. Questo vuol dire che
quello che facciamo accadere agli ingressi non produce l’effetto sulle uscite in modo
istantaneo e che non lo produce tutto in una volta, specialmente se un circuito ha molti
segnali di uscita. È il tempo in cui l’uscita diventa stabile. È il tempo che intercorre tra
l’applicazione di una configurazione degli ingressi e la stabilizzazione delle uscite.
b. Tempo di contaminazione (Tc). Il tempo che intercorre tra l’applicazione di una
configurazione degli ingressi e i primi effetti che osserviamo sulle uscite. È il tempo che
impiega l’ingresso a contaminare le uscite, cioè a far succedere qualcosa. È sempre più breve
o uguale al tempo di propagazione.
Entrambi questi parametri sono riferibili all’intero circuito oppure al pin-to-pin dove un pin è una
porta di ingresso o uscita. Se noi prendiamo un input, e quindi una singola porta di ingresso, e un
output, e quindi una singola porta di uscita, possiamo chiederci quanto tempo intercorre affinché la
variazione che ho applicato in input si ripercuota sull’output. Questo si dice pin-to-pin.
Siccome parliamo di circuiti sincroni, che quindi hanno un clock che scandisce il tempo di
elaborazione, dopo che una configurazione di ingresso ha prodotto i suoi risultati e questi sono stati
campionati da un registro, allora il circuito può ricevere nuovi ingressi per produrre nuovi risultati.
La frequenza con cui un circuito riesce a farlo lo chiamiamo throughput. Quindi il throughput, che è
una misurazione di frequenza, ci dice quante elaborazioni al secondo riusciamo a fare. Per esempio,
se consideriamo un circuito che fa la somma, il throughput è quante somme al secondo riesce a fare.
3. Consumo di potenza. Si divide in:
a. Statico (W). È un consumo di potenza che dipende dal passaggio di corrente tra
l’alimentazione e la massa all’interno di tutti i componenti. La tecnologia FCMOS non ha
consumo di potenza statico perché i transistor nei gate sono FC (Fully Complementary) quindi
se il pull-up è acceso, e fa passare corrente, il pull-down è spento e non fa passare corrente
quindi non c’è mai un percorso conduttivo tra alimentazione e massa. Questo vuol dire che i
CMOS azzerano il consumo statico. Questo vuol dire che alimentare un circuito ma senza
modificare i suoi ingressi non comporta consumo. Nella realtà, non avendo circuiti ideali, un
po’ di corrente passa e quindi il consumo statico non è totalmente pari a 0.
b. Dinamico (W). Il consumo dinamico avviene quando all’interno di un circuito c’è bisogno di
corrente per far passare un valore da 0 a 1 e viceversa. Cioè il consumo dinamico avviane
quando la variazione delle condizioni di ingresso fa commutare gli interruttori. Solo nelle
transizioni dei segnali c’è consumo di potenza. All’aumentare della frequenza operativa il
consumo dinamico si alza perché cresce linearmente con la frequenza operativa. Se
raddoppio la frequenza, cioè il numero di commutazioni per unità di tempo, raddoppio il
consumo di potenza.
In un circuito elettrico a consumare potenza è il passaggio di corrente su una resistenza. La potenza,
che si misura in Watt, è data dal prodotto tra la corrente che passa nel circuito e la tensione, ovvero
al differenza di potenziale, ai suoi capi. In un circuito, Vdd è la differenza di potenziale tra il valore
logico alto e il valore logico basso, cioè tra l’alimentazione e la massa. Il consumo di potenza in un
circuito si misura moltiplicando la differenza di potenziale per la corrente che il circuito assorbe.
Sapendo che il nostro circuito è composto da gate CMOS, sappiamo che ogni porta logica ha un
collegamento a Vdd e un collegamento a massa (anche se non lo rappresentiamo perché lo diamo
per scontato). In origine c’erano tecnologie che avevano il problema principale del consumo di
potenza statico. Gli FCMOS hanno risolto questo problema. Non hanno potuto eliminare il consumo
di potenza dinamico. Attualmente la metrica più importante è il consumo di potenza anche perché
essendo i circuiti molto densi si fa fatica a dissipare il calore generato dal consumo di potenza. Il
circuito di potenza produce calore. Il consumo di potenza beneficia della riduzione dell’area, cioè se
i componenti sono di meno il circuito consuma meno. All’aumentare delle prestazioni il consumo di
potenza aumenta.
Esempio 1
Esempio circuito a due ingressi e due uscite. La seguente immagine mostra cosa succede quando l’ingresso
A passa da 0 a 1 avendo l’ingresso B sempre alto. La linea tratteggiata verticale rappresenta l’istante in cui
avviene la transizione di ingresso ed è l’istante dal quale iniziamo a calcolare i tempi per vedere quanto tempo
intercorre prima della prima variazione osservata in uscita e prima della stabilizzazione delle uscite.
Se noi immaginassimo che ogni porta logica introduca un ritardo, l’uscita Out2 sarà la prima a risentire della
variazione di ingresso perché da A a Out2 il segnale attraversa una sola porta logica mentre da A a Out1 ne
attraversa due. La stima di questi tempi è legata ad un modello di ritardo che noi dobbiamo attribuire ad
ognuna delle porte logiche. Il modello più semplice che possiamo usare è quello che si chiama ritardo
unitario. Questo significa che ogni porta logica introduce un ritardo di una unità di tempo. Quindi a questo
livello non ci interessa l’unità di misura ma contiamo solo il numero di porte logiche. Per vedere quali sono i
tempi di propagazione e di contaminazione ci costruiamo una tabella che abbia da una parte gli ingressi (in
questo caso A e B) come etichette di riga e dall’altra le uscite (in questo caso Out1 e Out2) come etichette di
colonna: OUT1 OUT2
A 2 1
B 2 1
Tra il segnale A e il segnale Out1 quante porte logiche attraversiamo (esempio: da A a Out1 due porte quindi
nella tabella scrivo 2) e quindi qual è il tempo di propagazione e contaminazione? In questo esempio, a livello
pin-to-pin questi due tempi sono diversi. La tabella ci mostra i tempi di propagazione e di contaminazione
pin-to-pin, quindi da ogni porta di ingresso ad ogni porta di uscita. Il tempo di contaminazione sarà 1 perché
esso è il tempo più breve tra i tempi di contaminazione, cioè tra tempi che intercorrono tra l’applicazione
degli ingressi e la loro manifestazione in uscita. La prima manifestazione la abbiamo quando cambia il primo
dei segnali di uscita. Il tempo di propagazione del circuito è 2 perché esso è il più lungo dei tempi di
propagazione pin-to-pin. Applicati gli ingressi la parola di uscita, dopo una unità di tempo avrebbe cominciato
a variare e dopo due unità di tempo si sarebbe stabilizzata.
Esempio 2
Ora semplifichiamo il circuito precedente in modo apparente. In realtà il tempo di propagazione e di
contaminazione continuano ad essere diversi anche se il circuito ha una sola uscita.
Infatti, se A e B valgono 0, il segnale n vale 1 perché è un uscita di un inverter, e il segnale B forza a 1 anche
il valore dell’uscita Out. Se il segnale A e B valgono passano da 0 a 1 succede che n vale 0 ma il NAND si trova
in ingresso n che vale 1 che non era ancora arrivata prima e il nuovo segnale B che vale 1 quindi il NAND
restituisce un valore basso. L’unita di tempo successiva arriverà in entrata al NAND n che vale 1 e il nuovo
segnale di B che vale 0 e quindi il NAND avrà come ingrassi 10 e quindi il valore di Out torna alto. Tutto questo
succede in diverse unità di tempo ma all’interno dello stesso istante. Questa variazione temporanea di un
segnale che poi si riporta al valore precedente si chiama glitch ed è una transizione spuria, cioè qualcosa che
avviene in transitorio ma che non è motivato dalla funzione logica che questo circuito svolge. Quando A e B
valgono 0 l’uscita vale 1. Quando A e B valgono 1 l’uscita vale ancora 1. Quindi, dal passaggio da 00 a 11 in
ingresso non ci aspetteremo una variazione dell’uscita e in realtà abbiamo un glitch per colpa di come il
circuito è stato implementato. In questo caso il tempo di propagazione è 2 e il tempo di contaminazione è 1.
Questo è motivato dal fatto che dall’ingresso A all’uscita Out si attraversano due porte logiche mentre
dall’ingresso B all’uscita Out se ne attraversa una sola.
Esempio 3
Semplifico ancora una volta il circuito precedente e questa volta ho in ingresso un solo segnale A e una sola
uscita Out.
Anche in questo circuito ci ritroviamo ad avere un glitch anche se il segnale è uno solo perché A arriva al
NAND sia in forma vera che in forma negata. Dal punto di vista logico questo circuito non ha senso perché
corrisponderebbe all’espressione logica A+A’ che fa sempre 1, quindi è una costante e l’uscita non dipende
dagli ingressi. Nella pratica, l’uscita non è sempre costante perché quando il segnale A passa per l’inverter si
verificano le stesse circostanze che abbiamo visto nel circuito precedente. Il tempo di propagazione vale 2 e
il tempo di contaminazione vale 1.
Esempio 4
In questo esempio introduco un secondo segnale B e un secondo NAND.
Se B vale 1 allora rappresenta un valore neutro per il NAND, quindi, è come se non ci fosse trasformando quel
primo NAND in un inverter. Allora se B vale 1 questo circuito si riduce al precedente e il comportamento è lo
stesso, allora Out è sempre uguale ad A+A’. Quando invece B vale 0 allora rappresenta l’elemento forzante
per il NAND quindi n è fisso a 1 e allora sarà il secondo NAND a comportarsi come un inverter, e allora Out è
sempre uguale a A’. Il fatto che un certo percorso che attraversa due porte logiche sia logicamente attivo,
cioè potremmo avere un cammino lungo due porte logiche ma potrebbero non verificarsi mai le condizioni
logiche che lo rendono percorribile, cioè che consentono ai segnali di propagarsi dagli ingressi alle uscite
attraverso quel cammino. Quindi, quando B è uguale a 0 non vedremmo mai attivo il cammino lungo 2 che
va da B a Out. Se A e B sono uguali a 0 n vale 1 e Out 1. Se B passa da 0 a 1 sia n che Out continuano ad essere
1, quindi la variazione di B non si ripercuote sull’uscita.
Se A vale 1, quando B vale 0 allora n vale 1 e Out vale 0. Quando B passa da 0 a 1 allora n diventa 0 dopo una
unità di tempo e Out diventa 1 dopo due unità di tempo. Quando B torna basso n torna ad 1 dopo una unità
di tempo e Out torna a 0 dopo due unità di tempo, cioè il ritardo è di due unità di tempo.
Se noi volessimo ottenere il tempo di contaminazione e il tempo di propagazione pin-to-pin dovremmo
costruirci la tabella: OUT
A Tc=1 e Tp=2
B Tc=2 e Tp=2
Quindi questo circuito ha come tempo di contaminazione 1 e come tempo propagazione 2. Quando accade
che il tempo di contaminazione è diverso dal tempo di propagazione può significare che ci sia un glitch oppure
può dipendere dal fatto che condizioni logiche attivino un cammino anziché un altro, cioè possono esserci
condizioni logiche diverse che attivano un cammino più lungo o un cammino più breve. Quindi, quando dico
che il tempo di contaminazione è il più breve tra i tempi di contaminazione si intende di valutare tutti i pin-
to-pin in tutte le condizioni logiche in cui si possono trovare.
Esempio 5
Prendiamo per esempio il circuito combinatorio chiamato Multiplexer a due vie. Il suo scopo era prendere
uno dei due segnali di ingresso e copiarlo in uscita a seconda che il segnale di controllo valesse 0 o 1. La
= ’ + .
funzione era L’implementazione del circuito è:
Questo è un circuito che ha tre ingressi e una sola uscita, quindi, se vogliamo ottenere i ritardi pin-to-pin
dobbiamo costruire la seguente tabella chiedendoci per ogni segnali di ingresso quanto tempo impiegano
per arrivare all’uscita sia per contaminarlo sia per stabilizzare gli effetti:
Tc=2 e Tp=2
Tc=2 e Tp=2
Tc=2 e Tp=3
Quindi per questo circuito il tempo di propagazione vale 3 e il tempo di contaminazione vale 2. Per dire che questi
percorsi siano tutti percorribili dobbiamo trovare una condizione che abiliti il cammino. Possiamo vedere se esiste un
e ha lunghezza 3. Affinché questo avvenga bisogna che gli effetti del segnale riescano
cammino che vada da
a propagarsi fino a e quindi deve valere 1 così da essere l’elemento neutro del primo NAND e quindi
.
lasciar propagare il segnale L’uscita del NAND in basso deve valere 1 per lo stesso motivo, cioè deve essere
l’elemento neutro per l’ultimo NAND. Per valere 1 allora deve valere 0. Abbiamo dimostrato che la
condizione logica può esistere e allora il tempo di propagazione è 3. L’area del circuito è 4 perché ci sono
quattro porte logiche, ma se usiamo un modello più accurato possiamo contare gli ingressi delle porte logiche
che sono 7 e allora raddoppiando tale numero diciamo che il circuito è composto da 14 transistor e quindi
stimare così l’area. Dal punto di vista prestazionale possiamo dire Tc = 2 e Tp = 3, oppure dichiarare la
tabellina intera che mostra i tempi di contaminazione e propagazione pin-to-pin.
L’analisi che non guarda le condizioni di attivazione del circuito si dice analisi statica perché guarda soltanto quanto
sono lunghi i cammini senza preoccuparsi se possono essere davvero attraversati. L’analisi dinamica considera anche
se i percorsi possono essere attraversati e quindi è come se stessimo simulando il circuito.
Stile di progetto
Quello che abbiamo fatto finora a livello di logica combinatoria era seguire un procedimento di sintesi logica
cioè si parte da una specifica funzionale che si t
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Sistemi Elettronici
-
Lezioni, Elettronica Dei Sistemi Digitali
-
Progettazione di Sistemi Digitali
-
Sistemi informativi e trend digitali.