Professional Documents
Culture Documents
A.A. 2009/2010
Le tecniche di progetto di sistemi VLSI devono confrontarsi con lelevata complessit dei circuiti da
realizzare (spesso dell'ordine di milioni di porte logiche elementari), con il ridotto time to market
(vista la continua evoluzione tecnologica e di mercato) e inoltre con la necessit di sofisticati
programmi di progettazione assistita al calcolatore (CAD).
Per questo motivo si fa un largo utilizzo di diversi livelli di astrazione progettuali e di tecniche di
progettazione gerarchica.
Livelli di astrazione
Il flusso di progetto che partendo dalle specifiche porta fino al layout di tipo top-down.
Sfortunatamente, molto spesso non sufficiente un approccio top-down. I parametri di prestazione
sono valutati accuratamente solo a livello layout.
Non possiamo essere sicuri che partendo da una determinata descrizione RTL il
circuito finale verificher le specifiche assegnate in termini di potenza, area e velocit.
Se le specifiche non sono soddisfatte necessario apportare dei miglioramenti al progetto,
operando in verso bottom-up. E possibile migliorare le prestazioni rimanendo (ad esempio) al
livello layout (ottimizzando il piazzamento ed il collegamento delle celle per
ridurre gli elementi parassiti), ma bench questo comporti uno sforzo aggiuntivo ridotto non
ottimale in quanto i miglioramenti ottenibili in termini di prestazioni sono alquanto limitati.
Se invece si ritorna a livello RTL, pu essere possibile migliorare la Fclock modificando
(ad esempio) la codifica adottata per memorizzare lo stato del controllore che coordina il
funzionamento del sistema, oppure pu essere possibile ridurre la P d disabilitando i blocchi
funzionali ininfluenti in determinate modalit operative.
Le modifiche effettuate a livello RTL richiedono uno sforzo progettuale molto maggiore poich
necessario passare nuovamente per pi livelli di astrazione, prima di ottenere la
nuova versione del circuito.
Progettazione gerarchica
In formule:
Resa del test finale : Dopo essere stati incapsulati i circuiti vengono testati per verificarne il corretto
funzionamento.
Resa: % di circuiti funzionanti rispetto al totale di
circuiti prodotti.
Numero di chip su wafer = rapporto fra area del wafer ed area del chip (circa)
Resa= % chip non difettosi sul wafer
La resa dipende dalle dimensioni del chip: pi grande pi probabile che possa essere presente
un difetto nel chip.
Tecniche di implementazione dei sistemi digitali
(Cap. 8 del testo)
Progettazione Custom
In un progetto Custom il chip viene realizzato artigianalmente e il rettangolo sul layout ne
rappresenta lelemento atomico. Con questo tipo di progettazione si conseguono massime
prestazioni ma massimo anche il tempo di progetto.
Quando si utilizza un approccio custom, si progetta un blocco che verr riutilizzato molte volte
(libreria). I costi fissi di progettazione possono essere ammortizzati su un volume di produzione
elevatissimo (uP, memorie), ma in generale questo approccio scelto quando il costo non il
parametro fondamentale, che sono invece le prestazioni.
Progettazione Semi-Custom
Progettazione Cell-based
Lo schema di principio di una progettazione cell-based con celle standard presentata qui a lato.
Come si vede tutte le celle hanno la stessa altezza mentre la larghezza variabile (dipende dalla
funzione logica, dal numero di ingressi, dalle W dei MOS,etc.). Si
ha un livello di metal (ad esempio, m1) per le interconnessioni
orizzontali, ed un altro livello di metal (m2) per i collegamenti
verticali.
I canali di collegamento (routing channels) servono per collegare
i terminali di ingresso-uscita delle celle.
Le linee di alimentazione si collegano automaticamente
affiancando fra loro le celle.
La percentuale di utilizzo data dal rapporto fra larea
complessiva e larea occupata dalle celle. I canali di
Progettazione con celle standard collegamento riducono la percentuale di utilizzo.
Lutilizzo di un numero maggiore di livelli di metallizzazione
consente di migliorare notevolmente la percentuale di utilizzo.
Ad esempio: nelle celle si utilizza soltanto il primo livello di metal, mentre per le interconnessioni
utilizzo i livelli di metal superiori (da metal2 a metal6) => collegamenti sopra le celle. Con una
tecnologia a 7 livelli di metal si riesce ad ottenere percentuali di utilizzo del 90%. Quanti pi livelli di
metal sono disponibili, tanto pi si riesce ad aumentare la percentuale di utilizzo.
Osservazioni sulle celle standard: le celle hanno due linee metalliche, una inferiore e una di
alimentazione positiva, la stessa altezza garantisce che quando accostiamo due celle, possiamo
collegare le due linee di alimentazione e di massa. Non tutte le celle hanno lo stesso numero di
dispositivi o la stessa complessit, ecco perch hanno larghezza diversa. Attenzione: queste linee
saranno definite solo per le varie righe. Tra le varie righe, ci sar una linea di collegamento globale
che porta la Vdd e la GND.
Quindi, la dimensione delle celle non pu essere casuale. La lunghezza non pu comunque
variare con continuit. Si definisce un passo elementare m. Questo garantisce anche che i vari
contatti andranno piazzati su una definita griglia e non a casaccio in modo che il programma di
collegamento delle celle sappia dove posizionare i vari contatti.
I collegamenti vengono realizzati con due livelli di metal: un primo livello per i collegamenti
orizzontali e un secondo livello per i collegamenti verticali. Cos facendo, non ci sono problemi di
corto.
Il canale non pu essere troppo stretto altrimenti non riusciamo a far passare le linee di
collegamento. Il programma di collegamento e piazzamento sceglier laltezza minima che
consentir il passaggio di tutte le tracce. Nota che se non piazzo le celle, non
posso sapere quali collegamenti devono essere fatti. La bont del piazzamento
delle celle sar migliore quanto pi piccolo sar il canale.
Questa cella standard ha una altezza ben definita, ha la Vdd in alto e la massa
in basso, per cui ha gli nmos in basso (dove deve esserci la presa di substrato)
e i pmos in alto (vicino alla vdd). Se ogni cella ben caratterizzata, dalla
tabella posso valutare i ritardi della cella! Si dice che i ritardi (elementi di
ritardo) vengono annotati con la porta logica.
Per quanto riguarda la progettazione cell-based con moduli funzionali (macro-celle) notiamo che la
standardizzazione a livello di porta logica attraente per funzioni logiche generiche ma non
molto efficace per:
strutture ripetitive (circuiti aritmetici, memorie)
strutture complesse (microprocessori, DSP).
Sfruttando la natura specifica di questi blocchi possibile ottenere realizzazioni con migliori
prestazioni. Le macrocelle sono o strutture ripetitive o altri blocchi (strutture complesse) che
vengono meglio realizzate a parte o addirittura acquistate.
Progettazione Array-based
Vantaggi: i costi relativi ai primi passi di processo sono ammortizzati fra numerosi progetti
I tempi necessari per la personalizzazione dei chip sono ridotti ( necessario realizzare solo poche
maschere).
I circuiti iniziali somigliano ad un sistema basato su celle standard: le righe di celle sono non
collegate tra loro!! Ci sono un insieme di nmos e di pmos non collegati. In fase di
personalizzazione sfruttiamo i contatti e i livelli
di metal per realizzare la voluta funzione logica.
Per fare la NOR a 4 ingressi si fatto come in
figura. Il circuito realizzato in questo modo non
ottimizzato, infatti o faccio una NOR o una
NAND le dimensioni sono sempre le stesse. La
logica cmos per ha questo vantaggio: se uno
collega bene i dispositivi (anche con W e L a
caso) la porta funzioner sempre! Ovviamente,
i ritardi saranno non ottimali.
Ci saranno per collegamenti inutili.
Per quanto riguarda le FPGA(Field-Programmable Gate Array) esse possono essere programmate
in diversi modi:
basata su fusibile (programmabile una sola volta)
basata su EPROM non-volatile
basata su RAM
Pu essere programmata in due modi:
Array-based
Look-up Table
Inoltre possibile programmare anche lo stile delle interconnessioni.
Gli FPGA pi avanzati hanno anche processori gi embedded o moltiplicatori.
ora compare un terzo parametro: tensione di saturazione Vsat che una costante. Il valore di Vsat
un po pi grande della Vt.
un modello empirico che consente di analizzare circuiti con MOS a canale corto con carta e
matita ed detto modello MOS unificato.
La caratteristica si modifica come in figura.
Nelle caratteristiche del mio dispositivo, individuo 3 zone invece che 2: se Vgs-Vt inferiore a
Vsat, si hanno le stesse relazioni del modello a canale lungo (siamo nella zona Saturated). Questa
prima zona termina quando Vgs-Vt diventa maggiore di Vsat.
Ora bisogna vedere la Vds: se minore di Vsat, ancora una
volta siamo nella solita caratteristica (in particolare in triodo). Se
invece la Vsat la pi bassa, siamo in una nuova zona: Velocity
Saturated che la pi grande! In questa zona a velocit
saturata si ha che:
Id=K[2(Vgs-Vt)Vsat-Vsat2](1+Vds)
La Id funzione lineare di Vgs-Vt. In pratica il dispositivo opera
quasi sempre in questa zona a velocit saturata.
Possiamo vedere di nuovo la caratteristica con il MOS connesso a
diodo:
Vediamo lNMOS.
Primo caso: NMOS come pull-down
Consideriamo un banale circuito di test: un invertitore CMOS con una capacit di carico.
Consideriamo cosa accade quando lNMOS conduce: transizione alto
basso delluscita.
Se al posto del MOS inseriamo il nostro modello semplificato avremo
un RC! Il tempo di propagazione questo:
da cui:
Tramite una simulazione SPICE (quanto pi accurata possibile) dellinvertitore, ottengo Tphl, dal
quale calcolo Rn.
Questa Rn determinata per uno specifico MOS con W e L e con una specifica capacit d carico.
Che succede se cambio la W del mio dispositivo?
Se parto da un mos con W 0/L e determino la Rn, per un MOS che avr W 1/L la Rn1 la posso
ottenere cos:
Rn1=Rn0*W0/W1
Tutto indipendente da Vds tranne lultimo termine. In generale, Vsat al quadrato abbastanza
piccolo e lo si pu trascurare nella parentesi quadra se accade che:
Vsat<2(Vdd-Vt)
ed quasi sempre vero.
Nel campo di interesse il dispositivo quindi opera in regione di velocit saturata. La corrente non
proprio indipendente da Vds perch c lultimo termine con il lambda. Per semplificare tutto, al
posto di (1+Vds) metto un valore costante (un suo valore medio). Ci ci fa approssimare la
corrente di scarica con un valore costante.
Questo ci dice che la resistenza poco dipendente dalla tensione di alimentazione: in particolare
decresce (anche se molto lievemente) allaumentare della tensione di polarizzazione. Inoltre, la R
dipende inversamente da Vsat. Ricordiamo che la Vsat tende a diventare sempre pi piccolo col
migliorare della tecnologia. Ricapitolando: c una relazione inversa dal rapporto W/L e una
dipendenza sensibile dalla tensione Vt. Abbiamo visto quando lnmos opera da pull-down ovvero
che scarica la capacit e dualmente quando un PMOS funziona da pull-up ovvero che carica la
capacit.
Vediamo se con questo modello semplificato possiamo simulare bene una porta NAND a 2
ingressi.
Per questa NAND studiamo il tempo di commutazione alto-basso: ci focalizziamo quindi sugli
NMOS. Ci sono 2 possibili casi che fanno commutare il nostro circuito, dando quindi una
commutazione alto-basso alluscita. I due casi possibili sono:
a) B=1 A=0 B=1 A=1
b) B=0 A=1 B=1 A=1
Vediamo ora perch c differenza tra i due ritardi (dovuta alle Capacit).
Caso a)
Studiamo il nostro circuito sostituendo ai dispositivi le resistenze e gli interruttori corrispondenti.
Per la rete di pull-up, i transistori sono
spenti e quindi non disegno le
resistenze della rete. Devo evidenziare
le capacit: una quella sul nodo di
uscita Cp, poi c quella legata al nodo
interno Cq.
Vediamo ora le condizioni iniziali sulle
due capacit: su Cp c Vdd mentre su
Cq c Vdd-Vt, che approssimiamo
comunque con Vdd. Quindi, le due
capacit sono entrambe cariche a Vdd.
Lapproccio utilizzato per semplificare
lanalisi quello in cui si introduce una
costante di tempo equivalente: la tensione di uscita riconducibile ad una evoluzione che ha
una unica costante di tempo
dominante, una tau equivalente. Per
calcolarla, si considerano le capacit
singolarmente e si valuta la resistenza
ai capi della stessa. Poi, si sommano.
Una volta ottenuta la tau equivalente, il
tempo di propagazione sar:
Tp=0.69eq.
La tecnica switch level quindi si esegue
in 2 passaggi:
a) sostituisco al posto dei mos delle
resistenze e degli interruttori
b) utilizzo il metodo delle costanti di tempo per calcolare eq
Fatto ci, calcolo Tp=0.69eq. Stimare questo tempo di propagazione in questo modo
semplicissimo!
Caso b)
Vediamo ora cosa accade nella nostra porta NAND quando commuta lingresso B invece che A.
La dinamica di questo circuito diversa da
prima perch, se pure le resistenze e le
capacit sono le stesse, ho che le capacit
sono caricate inizialmente a valori diversi!!
Lapproccio deve essere diverso. E allora,
proviamo a considerare due casi limite:
a) Cq circa nulla:
eq = (Rb+Ra)Cp
b) Cq infinita:
eq = Rp*Cp
eq B = (Rb+Ra)Cp
e si ha che: eq B < eq A . Questo dice che lingresso B privilegiato e in generale sono privilegiati
i mos pi vicini alluscita! Questo effetto del 2 ordine viene fuori facilmente grazie alla tecnica
switch-level.
In questo caso le condizioni iniziali sui due condensatori sono differenti. Non si pu applicare il
metodo delle costanti di tempo come in precedenza.
Se Cq=0: =>
Se Cq= =>
Possiamo allora ottimizzare la porta NAND: scelgo per i due dispositivi A e B della rete N
dimensioni differenti. Potremmo pensare di fare la W di B pi piccola di A: questo fatto non
andrebbe a peggiorare i ritardi.
Nel caso peggiore avremo che:
Ripeto:
Rn > Rn.
Infine ricordiamo che la Rn la otteniamo per uno specifico MOS con determinate W e L. Per un
altro MOS, scaler opportunamente.
Vediamo di stimare analiticamente questa Rn. Il circuito pi semplice di test che possiamo
pensare costituito da un unico NMOS che va a caricare in uscita la capacit inizialmente scarica.
Questo sar anche il circuito che andremo a simulare.
Il circuito di test :
Il dispositivo in quale regione operer? Una volta effettuata la commutazione, il dispositivo vede
sul suo drain la vdd, la gate anche e quindi la Vds coincide con la Vgs (Vds=Vgs=V) inizialmente.
La relazione che lega la I alla V, quella di figura: prima della Vt il mos spento. Appena V=Vgs-
Vt diventa maggiore di 0 siamo in pinch-off, poi appena supera Vsat siamo in velocit saturata (e la
dipendenza diventa da quadratica a lineare). Si noti per che c leffetto di substrato (body) molto
forte! Abbiamo fatto una
serie di approssimazioni.
Si noti che la V scritta
non quella ai capi della
capacit, che invece
Vdd-V. Per vedere cosa
accade alla corrente di
carica nella capacit,
prendo la caratteristica
scritta, la traslo e la ribalto ottenendo la curva di figura.
La relazione della corrente scritta vale solo nel campo di nostro interesse (velocit saturata). Si
noti che nella formula c la V che compare 2 volte quindi non esattamente lineare. Trascurando
Vsat, si ha che la corrente pari allespressione scritta sopra.
Per avere il tempo di propagazione basso alto, cio quando si verificano le transizioni:
Vout: 0 Vdd/2
ovvero:
V: Vdd Vdd/2
Lequazione differenziale da integrare :
Da questa ottengo una stima per Rn, ponendo come al solito il tempo di propagazione pari a
0.69RC.
Abbiamo trovato lespressione per Rn, confrontiamola con lespressione trovata per R n.
Confronto fra le Rn
e
Facendo il rapporto:
Se confronto ora le due espressioni trovate nei due casi, si ha che si somigliano molto,
tranne che con un termine moltiplicativo. Il termine 2*logaritmo ci aspettiamo sia maggiore
di 1 (perch la Rn deve essere maggiore di Rn). Si noti che la c la Vt.
Se:
Vt0
si ha un caso limite
VtVdd/2
si ha che tende ad infinito!
Quindi, la Rn pu tendere allinfinito se Vt=Vdd/2!
Questo lo si ha perch nel caso limite, Vdd-Vt proprio Vdd-Vdd/2 = Vdd/2 e a questo
valore la tensione ai capi della capacit raggiunge in un tempo infinito il valore limite!
La forma dipende dal simulatore: nel nostro si usa questa scritta sopra.
Il K un parametro che si esprime come rapporto tra una resistenza statica e la resistenza del
mos calcolata prima. Introduciamo quindi questa resistenza statica RSn.
Cos facendo, riusciamo a calcolare il tempo di propagazione del secondo stadio in maniera
semplice perch, conoscendo il tp dello stadio precedente e prese le resistenze, calcolo tutto.
Lunico parametro che ci serve quindi la RSn.
Si noti che per RSn non si ha una espressione approssimata, lunico modo di procedere per via
simulativa. Si prende il circuito di figura, fissati C1 e C2 si simula, si calcolano i tempi di
propagazione, anche quelli ideali e dai valori ottenuti si calcola RSn dalla formula di figura. Il valore
che ne viene fuori dipender dai valori delle capacit che scelgo e dallo specifico circuito di test, in
modo particolare dipender dalle capacit: lunica cosa che si pu fare fissare per C1 e C2 dei
valori tipici. Quello che si ottiene una stima.
In pratica, da una simulazione SPICE si determinano i vari tp.Si applica la relazione precedente
per determinare RSn
In conclusione ho 3 resistenze che portano in conto ci che scritto tra parentesi nella slide. Per il
PMOS si hanno 3 resistenze duali che portano in conto i rispettivi effetti. La prima esercitazione
sar quella di simulare questi circuiti di test e valutare queste resistenze.
Esempio analisi switch-level
Una cosa importante da sottolineare la variabilit dei parametri. Quando facciamo un circuito
integrato, i dispositivi che realizziamo non vengono sempre fuori allo stesso modo ma i parametri
(Vt, K ecc) evidenziano delle variazioni di tipo casuale legate alle incertezze del processo
costruttivo. Fondamentalmente si individuano 2 tipi di variabilit: quelle nei dispositivi che
appartengono allo stesso chip (quindi due dispositivi che teoricamente dovevano essere identici)
ma, seppur realizzati sulla stessa piastrina di silicio con le stesse caratteristiche W/L, in realt non
mostrano gli stessi parametri! Ci sono delle tolleranze che possono essere dellordine dello 0.1%!
(within die)!
Tra due dispositivi ottenuti in tempi diversi per esempio da due fette di silicio diverse, le variazioni
sono ancora pi grandi (variazioni DIE TO DIE)! Questo evidente perch i due wafer sono stati
processati in condizioni di processo differenti!! Questo fatto crea dei problemi perch noi dobbiamo
essere in grado di garantire che il circuito, il sistema funzioni correttamente nonostante tutte
queste possibili variazioni, queste incertezze sui parametri dei dispositivi. Queste non riguardano
solo i parametri dei dispositivi ma anche i parametri delle interconnessioni, quelli parassiti. Si
sottolinea che con le tecnologie attuali le incertezze tendono a crescere man mano che la
tecnologia progredisce perch si tende a spingere tutto al limite. Oltre a queste incertezze legate al
processo costruttivo, ci sono due parametri che ci danno delle variazioni che sono la temperatura
(perch uno stesso circuito opera a temperatura sempre differente) e la Vdd perch nessun
generatore di tensione ideale e anche perch la tensione di alimentazione sul circuito non
costante ma soggetta ad una serie di disturbi. Quindi, si hanno 3 cose che danno luogo ad una
variazione delle prestazioni del circuito:
1) Processo tecnologico
2) Temperatura
3) Vdd
Che si indicano con PVT (Process, Voltage, temperature)
Dovremo fare in modo da ridurre queste variazioni.
a) Progetto per il caso peggiore: si va a realizzare il circuito in modo tale che soddisfi le
specifiche assegnate anche se i parametri cambiano in modo cos sfortunato da andare
tutti nel senso di peggiorare le prestazioni del circuito. Ci mettiamo quindi nel caso
peggiore in cui tutto congiura in peggio e si progetta tutto. Vorremmo che nel 100% dei
casi il circuito funziona bene. Da un lato, questa tecnica permette di avere una resa
massima ma dallaltro lato facile immaginare che questo approccio d luogo ad una
progettazione conservativa: la maggior parte dei circuiti prodotti cos sarebbero
capaci di funzionare a prestazioni molto superiori! Questo in generale si traduce in uno
spreco di area perch il circuito mediamente sovradimensionato!!
Si osservi che non cos ovvio individuare il caso peggiore (la combinazione peggiore
dei parametri) ovvero quale la combinazione che d luogo al caso peggiore.
Alla fine queste variabili hanno tutte una distribuzione gaussiana. Se ne valuta il valore medio e la
deviazione standard. Si progetter quindi il
circuito affinch esso rispetti la specifica sul
ritardo massimo. Ci saranno alcune istanze del
circuito che non andranno bene (corrispondenti
allarea sottesa alla gaussiana dopo il Ritardo
Max) ma ne sappiamo a priori la percentuale!!
Per avere statistiche abbastanza ragionevoli
bisogna determinare migliaia di valori al
simulatore. Se il circuito piccolo ok, se
complicato il tempo inaccettabile e quindi
questa tecnica si utilizza per porzioni di circuito o
comunque per circuiti ripetitivi!
Laltro approccio, ovvero il progetto nel caso peggiore, pessimistico, spreca area ma pi
semplice. Come si determina il caso peggiore?
Si introduce il concetto di angoli di processo.
Data la variabilit dei parametri di processo, quali valori utilizzare in fase di simulazione?
Ogni parametro (K, VT, _ ecc.) avr una propria distribuzione che possiamo semplificare con:
un valore medio
un valore minimo
un valore massimo
Questi valori il costruttore li ottiene dalle statistiche sui dispositivi da lui realizzati. Noi fissiamo
lattenzione su due parametri: Kn e Kp.
Si pu realizzare un grafico dove si mettono il Kn e Kp sugli assi. Si evidenzia nel piano un
rettangolo. Ogni dispositivo pu occupare uno dei punti allinterno di questo rettangolo. I casi pi
critici corrispondono ai vertici di questo rettangolo! Gli angoli
di processo prendono i nomi scritti in figura.
Per un CMOS, il caso peggiore quello slow n slow p. Se
avessi un pezzo di circuito pseudo-nmos e ne voglio vare una
analisi alla Vol, il caso pi critico quello in cui la Vol verr
pi grande se lnmos venuto meno efficiente e il pmos
venuto pi efficiente: slow-n fast-p!! Bisogna fare quindi pi
simulazioni a seconda del parametro che vogliamo estrarre.
Per il caso peggiore della Vol faccio una simulazione con una
determinata combinazione, per il ritardo peggiore ne faccio
unaltra con laltra determinata combinazione! In definitiva, alla fine dei conti quando si produce un
circuito tutto si fa meno che considerare il caso nominale!
Oltre ai parametri relativi al caso nominale, il costruttore fornisce i parametri per i casi fast e slow
I parametri sono quelli dei dispositivi (schede .MODEL) e quelli relativi ai parametri parassiti relativi
alle interconnessioni
Al progettista spetta il compito di determinare il set di parametri da adoperare in fase di design.
Si devono considerare anche i casi peggiori per Temperatura e Tensione di Alimentazione.
Noi, come esempio, simuleremo solo nel caso nominale. Si noti che quando si progetta un
dispositivo, bisogna saper scegliere la scheda model pi appropriata.
Interconnessioni
Cap. 4: The Wire: pag. 136-159; 171-174
appunti su: Elmore delay
Cap. 9: Coping with interconnect:
pag. 446-451; 463-474
Le interconnessioni: su uno schema usiamo dei cortocircuiti, conduttori ideali che collegano le
uscite di alcune porte agli ingressi di altre porte. In
pratica, non si hanno dei corti ma ci sono dei
opportuni layers di metallo, poly ecc. Si deve studiare
leffetto di queste interconnessioni sulle prestazioni
del nostro sistema. Suddividiamo le interconnessioni
a seconda dei segnali o dei compiti che hanno:
b) Dedicate ai segnali logici (le vediamo ora): c un segnale con particolare importanza, il
clock (segnale di temporizzazione che d la cadenza a tutto il circuito). Se questo
segnale arriva sfasato in vari punti del circuito, il tutto non funziona. Ci sono, oltre al
clock, altri segnali critici.
I layer utilizzati per fare le interconnessioni sono i livelli di metal (le tecnologie attuali danno a
disposizione numerosi livelli di metal per ridurre larea occupata), il poly e le diffusioni. Questi layer
non hanno le stesse caratteristiche.
Esempio: in questo caso abbiamo due morsetti A e B accessibili in metal1 e di dover collegare tra
loro i due morsetti. In verticale corrono 3 linee, metal1, metal2
e metal3 che non vogliamo interrompere. Per collegare questi
due nodi potrei pensare di passare in metal4 ma nulla vieta di
fare un collegamento passando sotto ai 3 livelli di metal usando
o il poly o le diffusioni.
Capacit
Consideriamo la capacit verso il substrato: si calcola considerando due componenti: da un lato
pensiamo di considerare linterconnessione e il substrato come un condensatore a facce piane e
parallele, quindi calcoliamo la capacit come una capacit per unit di area moltiplicata per larea
della interconnessione. Questo modello particolarmente semplificato ed andrebbe bene solo se
le linee di campo andassero verticalmente. Nel nostro caso il sistema di tipo tridimensionale
(vedi figura a) quindi la capacit sar maggiore rispetto a quella indicata dallo studio semplificato
appena detto. Si adottano allora delle formule differenti: si somma un contributo alla
C=epsilon*A/d=Ca*A=Ca*L*W. Il contributo da sommare a questa espressione dipende non
dallarea ma dal perimetro della linea e la si scriver come:
Ct=Ca*A+Cp*P
C=Ca*L*W+2Cp*(L+W).
Calcoliamo le varie
componenti. Per la
diffusione n calcoliamo
area e perimetro, poi si
calcola la capacit
dellarea e del perimetro. I
due contributi sono
confrontabili tra di loro. La
capacit totale sar
ovviamente la somma.
Passiamo al primo livello di
metal: calcolo larea e il
perimetro, poi le capacit dovuti ad i due contributi. La capacit perimetrale predomina su quella
dovuta allarea. Si noti che quella che si ottiene 1 ordine di grandezza inferiore a quella ottenuta
per la diffusione N!Questo ci fa vedere che il primo livello di metal un ordine di grandezza
migliore rispetto alla diffusione. Si noti che il calcolo della capacit per il primo livello di metal
complicato perch devo tenere conto della tridimensionalit del problema! La capacit ottenuta
grande o piccola?
Un MOS piccolo ha una capacit di 0.69fF che della capacit della interconnessione!! Quindi
la capacit dellinterconnessione tuttaltro che trascurabile! Soprattutto col fatto che con
lavanzare della tecnologia queste capacit aumentano!
Un altro esempio :
Nella slide precedente abbiamo visto che la capacit tra due linee adiacenti pu essere molto
maggiore di quella verso massa. Si manifesta questa cosa quando si hanno dei bus. La Cxy che
non va verso massa d luogo a
problemi di cross-talk.
Vediamo alcuni esempi di questi
problemi.
Facciamo lipotesi che una di queste
due linee effettui una commutazione
(schematizzata con un generatore di
tensione 0-1). Accade che la
transizione sulla linea X produce un
disturbo sulla linea Y: la linea X un
aggressore e Y aggredito.
Bisogna distinguere due casi:
a) la linea aggredita flottante ovvero quando avviene il disturbo non pilotata da nessuna porta
(che evidentemente sono in alta impedenza): il caso di logiche dinamiche o registri dinamici;
nella logica domino per esempio, quando il clock passa da 1 in fase di Valutazione, in un latch
dinamico invece quando il dispositivo in fase di memorizzazione, infatti la capacit flottante. (Si
noti che quella di cui si parlato solo la capacit Y, la capacit X quella relativa ad unaltra
linea che passa nelle vicinanze di questa ma che fa tuttaltro).
Applicando un gradino alla linea X, in corrispondenza della
transizione il potenziale del nodo X manifesta una analoga
commutazione indesiderata per via del partitore capacitivo
tra Cxy e Cy! Il deltaVy=Vx*Cxy/(Cxy+Cy). Se le capacit
hanno stesso ordine di grandezza, la commutazione
indesiderata alta! Ed una situazione critica perch il
potenziale sulla linea Y pu assumere un livello logico
prossimo alla regione proibita o addirittura cambiare stato
(passa da 0 a 1 o viceversa). A causa di ci si hanno errori
logici molto difficili anche da individuare e molto casuali! Per
risolvere questo problema non c altra soluzione che tenere
il rapporto Cxy/(Cxy+Cy) molto basso!! Ne discende un
risultato abbastanza rilevante: per questo tipo di circuiti, non possibile utilizzare celle standard!
NO CELLE STANDARD con place-route automatico perch in questo caso la realizzazione delle
interconnessioni sopra le celle una cosa fatta normalmente. Quindi, i circuiti dinamici vengono
realizzati e progettati a parte. Nellapproccio basato su celle standard non si utilizzano logiche
dinamiche e registri dinamici! Questi circuiti vengono realizzati se si vogliono massime prestazioni
ma con studio dedicato!
b) il secondo caso quello in cui il nodo aggredito pilotato da un altro circuito. In questa nuova
situazione il modello ovviamente cambia. Il circuito che pilota la linea Y (il driver) viene
schematizzato con una resistenza collegata a massa o allalimentazione. Ovviamente abbiamo
sempre la Cy. Per capire il disturbo che si vede sulla linea Y in questo nuovo caso, bisogna
introdurre il tempo di salita del segnale di ingresso sulla linea X. Nel caso idealizzato in cui c un
gradino, la variazione istantanea di tensione che si valuta sul nodo Y uguale a quello che si
aveva in precedenza! La costante di tempo sar R*(Cy+Cxy). Il disturbo quindi svanisce nel tempo
e svanisce tanto pi rapidamente quanto pi forte il driver di Y. Se il segnale di ingresso non a
gradino ma ha un tempo di salita maggiore, si ha che tende a ridursi anche lampiezza del disturbo
iniziale sulla linea Y. In sintesi, ho che posso fare sia la R grande, sia che la pendenza del segnale
di ingresso non elevatissima.
Devo allora:
evitare nodi flottanti,
proteggere i nodi sensibili,
fare i tempi di salita e discesi pi grandi possibili,
evitare di fare linee troppo lunghe accoppiate,
usare delle linee o strati usati come schemo!
Oltre alla nascita di questi disturbi, le capacit tra linee adiacenti influenzeranno i ritardi del
circuito. A causa di queste capacit il ritardo diventa poco
facilmente predicibile perch dipende dallattivit del circuito.
Supponiamo di avere questo bus. Ad un certo punto il bus
commuta. Che succede ai ritardi? Abbiamo delle capacit di cross-
talk per le quali si pu avere una commutazione su entrambi i
morsetti perch commutano tutte e 2 le linee tra cui connessa.
In pratica il ritardo aumenta se le linee vicine alla linea vittima
commutano in direzione opposta.
Leffetto Miller fa si che:
Entrambi i terminali del capacitore sono switchati in
direzione opposta (0Vdd, Vdd0)
La tensione effettiva raddoppiata ed necessaria ulteriore
carica.
MILLER EFFECT
Consideriamo 3 linee, e vediamo un primo scenario: tutte e 3 le linee commutano nella stessa
direzione da 0 a 1. Leffetto di
questa capacit Cc NULLO
perch le tensioni ai due morsetti
variano nello stesso modo e il
DeltaV nel tempo nullo! Quindi,
il tempo di propagazione dipende
solo dalla capacit della linea
verso massa e del fan-out ovvero
dei mos pilotati dalla linea.
Tp = R Cg = Tpo
Supponiamo ora che, dei tre segnali, il secondo e il terzo commutano mentre il primo no. Per la
seconda capacit non ci sono problemi, come se non ci fosse. La prima invece, ha un morsetto
collegato alla prima linea che sta
ad un potenziale fisso, quindi
come se stesse collegata a
massa!! E allora questa capacit
si somma a quella della linea e
del fan-out. Il ritardo quindi
aumenta in base a quanto
grande la Cc rispetto alla Cg (che
somma della capacit della
linea verso massa e della capacit del fan out). Il ritardo di questo invertitore quindi dipende anche
da quello che fa la linea adiacente superiore!
Abbiamo visto che succede se tutte le linee commutano nello stesso verso e se due commutano
ed una no. Vediamo ora che succede in altri casi: ora, la linea centrale commuta da 1 a 0 in
ingresso mentre le
altre due
commutano in modo
opposto da 0 a 1. La
prima capacit vede
un deltaV doppio
rispetto a prima!
Perch un nodo sale
di Vdd e laltro
scende di Vdd quindi ha un delta pari a 2Vdd!
Stesso discorso per la seconda capacit! Quindi si ha che linvertitore che pilota la linea centrale
vede una capacit che 4 volte la Cc! Questo quindi il caso peggiore. C comunque una
incertezza sul ritardo perch si capisce bene che tutto dipende da cosa accade alla dinamica.
Dovremo fare in modo che tutto funzioni in ogni caso! Questo problema, qui accennato per il bus,
lo ritroveremo quando vedremo la distribuzione del clock che , come sappiamo, la linea pi critica
del sistema. Se il clock arriva con un certo ritardo il sistema pu fallire a causa di mancate
sincronizzazioni! Bisogna quindi progettare il sistema in modo che anche se il clock non arriva
esattamente nellinstante desiderato il sistema funziona correttamente.
Tp = g Tpo
(r il rapporto tra la capacit verso GND e quella vicina).
Resistenze
Altro esempio :
Con il progredire della tecnologia, le dimensioni dei dispositivi si riducono di un fattore di scaling:
x >1
Le interconnessioni come sono influenzate dallo scaling?
interconnessioni locali : lunghezza ridotta del fattore x, cio vanno ridotte di pari passo
interconnessioni intermedie : lunghezza costante, cio rimangono della loro lunghezza
nonostante lo scaling
interconnessioni globali : lunghezza accresciuta di un fattore y, nostante lo scaling,
perch per esempio ci metto 6 core invece di 2 e il processore globalmente pi grande,
oppure ci metto pi memoria, etc.
Ora sappiamo come calcolare le R e le C: come possiamo sfruttare queste informazioni per
valutare i ritardi.
Supponiamo di avere due porte logiche. Un approccio di livello 0 non considera nulla. Un
approccio di livello 1 considera solo le capacit di interconnessione concentrate. Un modello pi
accurato porta in conto anche la resistenza delle interconnessioni. Il modello migliore ovviamente
considera che la linea a parametri
distribuiti. La scelta del modello va fatta in
base al grado di approssimazione che si
vuole avere. Come si calcolano i ritardi in
un sistema RC?
Abbiamo gi richiamato in passato il metodo delle
costanti di tempo. Noi abbiamo ora un sistema in
cui ci sono delle resistenze che collegano i vari
nodi e delle capacit verso massa che assumiamo
allinizio tutte cariche a Vdd. Supponiamo di avere
un solo ingresso che commuta da 1 a 0. A regime,
tutte le capacit andranno a 0. Ma con quale
legge? E come posso approssimare la dinamica
completa con una sola costante di tempo?
ELMORE DELAY
Per trovare la risposta usiamo la tecnica Elmore
Delay.
Valutiamo la dinamica di questo sistema. Introduciamo le correnti nei condensatori. Vediamo poi le
tensioni sui nodi considerando che lingresso ha gi effettuato la commutazione da 1 a 0.
Applichiamo il principio della sovrapposizione e calcoliamo il potenziale V3.
Abbiamo quindi:
le costanti alfa sono incognite. Se applichiamo questa ipotesi, la Vj scritta prima diventa:
Con questa approssimazione la tensione sul nodo j non dipende dalla tensione degli altri nodi e
dipende da una sola costante di tempo. Queste costanti alfa le otteniamo cercando di minimizzare
lerrore: Q.
Come otteniamo le costanti kj?
Valuto lerrore che mi da lapprossimazione che ho appena fatto per ottenere lequazione
approssimata di Vj.
Lerrore ovviamente la differenza della formula esatta e di quella approssimata.
Questerrore funzione del tempo, io voglio renderlo piccolo e allora rendo piccolo quello medio
ovvero si sceglieranno delle costanti in modo tale che lerrore mediamente sar nullo:
Quindi dobbiamo scegliere le kj in modo tale da annullare lerrore medio. Svolgiamo lintegrale.
In definitiva questa tecnica ci dice che la dinamica retta da un sistema di equazioni differenziali
del primo ordine. Questa dinamica si approssima con una singola costante di tempo calcolabile
con lespressione appena scritta. Lerrore medio cos facendo sar nullo e abbiamo visto come si
calcolano queste Rkj.
CALCOLO DELLA COSTANTE DI TEMPO
Questa ovviamente la costante di tempo equivalente relativa alluscita. Si noti poi che n molto
maggiore di 1, quindi si pu scrivere come
dove ncL la capacit totale della linea e nr L la resistenza totale della linea. Quindi, la
costante di tempo sostanzialmente il 50% di RC della linea! ovviamente un termine
approssimato
Si pu quindi riportare la nostra linea ad un modello equivalente come in
figura.
Questo modello a T ed simmetrico tra ingresso e uscita.
E si ottiene una costante di tempo pari a:
da cui si ottiene:
Nellultima formula, ultimo passaggio in parentesi (tranne l1) si ha laumento della capacit dovuto
alla capacit perimetrale.
Risultati: la costante di tempo va col quadrato della lunghezza, questo perch la sia la resistenza
che la capacit raddoppiano con la L. Una cosa meno ovvia che questo ritardo cresce al
decrescere di W: questo dovuto alla capacit perimetrale, se questa non ci fosse il ritardo
sarebbe indipendente da W (perch la C si dimezza e la R si raddoppia quindi gli effetti si
compenserebbero). Si tenga presente che questo risultato un ritardo intrinseco ovvero calcolato
in assenza di carico! Nessuna linea si trover mai in questa situazione.
RITARDO INTRINSECO CIOE' IN ASSENZA DI CARICO
Analizziamo un altro caso.
Questo caso quello pi realistico, ovvero si ha una porta logica
che pilota una linea e un fan out, rappresentato da un invertitore.
Ora si pu analizzare il tutto molto facilmente: al posto del driver
si mette la sua resistenza equivalente Rn, poi la linea si
schematizza col modello a T, poi il carico che si schematizza
come una capacit. La seconda figura rappresenta quindi il
circuito equivalente per la determinazione del ritardo, della tau
equivalente. Questo modello ovviamente valido per calcolare il
ritardo dal driver fino al carico (dove c scritto Vout). Calcoliamo
la costante di tempo delluscita: la CG vede come resistenza la
somma di Rn e 2 Rt/2, poi c il contributo della Ct che vede la
serie delle sole prime due resistenze. Si pu quindi stimare il
ritardo in maniera abbastanza finale. CASO REALISTICO
Quindi, in definitiva il ritardo quello che si avrebbe senza linterconnessione pi qualcosaltro che
dipende dallinterconnessione e dai suoi parametri.
MODELLO DI ORDINE 0
Vediamo quali sono i casi possibili:
Nel modello di ordine 0 trascuriamo linterconnessione: ci si pu
fare quando i termini in parentesi sono minori dellunit: Ct<<Cg e
Rt<<Rn ovvero se la capacit e la resistenza della linea sono molto minori del carico, leffetto
della linea trascurabile.
MODELLO DI ORDINE 1
Nella stragrande maggioranza dei casi comunque va bene il modello di ordine 1, non per
sempre cos.
Ripetitori RIPETITORI
Abbiamo visto che il ritardo intrinseco tende a crescere col quadrato della lunghezza. Questa
tecnica riduce il ritardo spezzando la linea (per esempio a met) ed introducendo nel centro un
invertitore che prende il nome di repeater. Questa tecnica si utilizza nel caso di linee
estremamente lunghe.
Calcoliamo il ritardo che si ottiene con una linea in metal1 estremamente lunga (1.2cm). Si hanno
104 quadrati con una resistenza di 1Kohm. La capacit diventa in questo caso di 1.39pF.
Supponiamo che il driver abbia una resistenza di 100 ohm e che ci sia una capacit di fF. In
queste condizioni, la tau viene estremamente elevata.
Si vede che c un 2 davanti a tutto perch sono 2 stadi uguali e c un fratto2 perch le capacit
sono pari alla met. Il ritardo inferiore a prima.
SUDDIVISIONE DELLA LINEA IN K-PARTI UGUALI
Suddividendo la linea invece in K parti uguali si ha questa nuova formula. In parentesi c un
termine che cresce con K (perch introduco
K invertitori) e un termine che decresce con
K (perch spezzo la linea).
La K ottima calcolata, sostituita nella formula del ritardo, restituisce il ritardo minimo. Si noti che
allottimo i due contributi in parentesi si eguagliano.
Nel caso che stavamo osservando, con K pari a 19 il ritardo passa da 856ps (senza repeaters) a
234ps. Si noti che la gran parte del vantaggio si ha gi dividendo poche volte la linea, non c
bisogno di arrivare a 19 (bastano 2-3-4).
Osservazioni
La costante di tempo trovata :
In generale bisogna:
Utilizzare il modello pi semplice possibile, compatibilmente con la precisione richiesta
Le C hanno un ruolo fondamentale e non possono quasi mai essere trascurate
Le R entrano in gioco quando sono di valore confrontabile con quella del driver
(interconnessioni globali)
Caso particolare: distribuzione del clock: le R sono FONDAMENTALI (un ritardo sul clock,
che sincronizza il funzionamento del sistema, pu causare errori di timing)
Per la distribuzione del clock, anche un piccolo ritardo lungo la linea ci pu dare fastidio.
Distribuzione delle Alimentazioni
Le alimentazioni vengono distribuite mediante una interconnessione. Per questa abbiamo dei
problemi diversi, non ci sono ritardi di commutazione.
La capacit considerata molto grande per i circuiti integrati, sar per esempio una capacit di
uscita. La formula restituisce un disturbo di 0.2V, circa il 10% della Vdd. Questo valore pu essere
assorbito sicuramente dai margini di rumore dei nostri circuiti digitali. Se per commutano 8
invertitori invece che 1 solo il disturbo va moltiplicato per 8 e il disturbo complessivo diventa di
1.6V. Si osservi che il caso non assurdo, perch nei bus sappiamo che ci accade. Si noti che gli
effetti si sommano perch se vero da un lato che linduttanza unica dal terminale di
alimentazione del package verso Vdd e unica dal terminale di massa alla massa, la corrente che vi
scorre dentro la SOMMA di tutte le correnti che devono caricare le capacit!! Il vero problema
che tutta la logica presente nel circuito integrato collegata alla stessa alimentazione risentir di
questi disturbi!! Poich la condizione di commutazione contemporanea comune, bisogna
prendere provvedimenti che limitino questi disturbi. Inoltre, lentit del disturbo direttamente
legata alla capacit. Il problema quindi si pone per i terminali di ingresso e uscita.
Gli accorgimenti che si adottano non risolvono al 100% il problema. In pratica, faccio in modo che il
nostro nucleo elaborativo del chip (il core, la logica) non veda questi disturbi. Spezzo la linea che
porta lalimentazione al core. In questo modo, il core dovr pilotare delle capacit interne che sono
ordini di grandezza pi piccoli delle capacit esterne da 10pF circa!! In sostanza, basta spezzare le
alimentazioni ed ho risolto! Il prezzo da pagare il numero di pin maggiore richiesto. Quindi, in
sintesi si separano le alimentazioni per i buffer di uscita e per il core. Si noti unaltra cosa: pu
accadere anche che le alimentazioni per il core e per i buffer sono diverse, quindi separare le
alimentazioni pu essere un buon modo per risolvere anche questo problema.
Osservando la slide, si avr un disturbo per il core e un disturbo per per lIO che sar molto pi
grande del precedente.
Utilizziamo 4 anelli di alimentazione, ovvero quattro linee di alimentazione. Li chiameremo esterni
ed interni rispettivamente per lIO e per il core. Si chiameranno anelli perch corrono su tutta la
periferia del chip. Si noti che ci sono altre due linee dedicate allalimentazione per il core. Si noti
che il vero numero dei terminali di alimentazione in questo esempio non sono 4 come dice la teoria
bens 8.
Mettendo due terminali di alimentazione piuttosto che uno solo per ogni Vdd e GND, si ottengono
due induttanze in parallelo che sono la met di una sola! Se mettessi 16 alimentazioni e 16 masse
ottengo dei disturbi che sono 16 volte inferiori rispetto al caso di un sol terminale. Nellesempio, ho
2 terminali per ogni tensione di riferimento.
a) Le ricette per far fronte ai problemi sono:
separare le alimentazioni e le masse dei circuiti di IO da quelle per il core.
b) usiamo pi terminali
c) scegliamo in maniera ottimale quali pin utilizzare per lalimentazione: osservando la slide
10, non useremo i pin negli spigoli perch hanno un collegamento interno maggiore e
quindi uninduttanza maggiore.
d) cercheremo di aumentare i tempi di salita e di discesa al massimo possibile: i pin di uscita
non li porto alla massima velocit possibile, ma porto la velocit ad un valore compatibile
col funzionamento del sistema complessivo
e) si schedulano le transizioni che commutano: se ho un bus ad esempio, faccio s che le
commutazioni non sono esattamente simultanee ma introduco dei ritardi piccolissimi.
f) utilizzare delle tecnologie di packaging pi avanzate
g) laddove ci non basti, si possono aggiungere delle capacit di disaccoppiamento sulla
scheda e sul chip. Le capacit di disaccoppiamento cosa sono? Sono condensatori messi
tra il terminale di Vdd ed il terminale di massa. Se sono di valore grande, la loro presenza
riduce in maniera sensibile i disturbi: pi grande la capacit di disaccoppiamento, meglio
sar! Dove si piazza? Sotto le linee di alimentazione che comunque utilizzerebbero area
sul chip. Il problema esiste allo stesso modo anche sul circuito stampato
Possono essere utilizzate anche tecniche di packaging particolari per ridurre il problema:
Nei system in package si cerca di fare una integrazione a livello di package: si cerca di integrare
pi chip allinterno dello stesso contenitore collegati con il bonding. Questi Chip possono essere
anche di produttori differenti.
Sistemi Combinatori
Layout & gate level
Dopo lo studio sulle interconnessioni, seguiamo lapproccio bottom up per capire come si
organizza il layout di un circuito semplice per vedere poi le celle che
utilizzeremo nelle esercitazioni. Il layout di un circuito integrato riporta tutti i
layer che servono per realizzare il circuito. Per disegnarli bisogna rispettare
delle regole di progetto.
Riporta tutti i layers necessari alla realizzazione delle maschere
fotolitografiche:
Deve rispettare le regole di progetto
Dimensione minima
Distanza minima
Composizione
Almeno in fase iniziale pi opportuno disegnare lo stick diagram ovvero una versione
semplificata del layout: segnamo i vari rettangoli con delle linee di colore diverso o tratteggio
diverso e non ci preoccupiamo delle distanze minime ecc. Quindi lo stick diagram ci d solo una
informazione su dove piazzare i vari rettangoli.
Scelta la convenzione sulle linee da utilizzare, cosa succede se due di queste
(una verticale ed
una orizzontale)
si intersecano?
Fra poly e
metal1 nulla. Se
vogliamo farci un
collegamento tra
queste due linee, bisogna piazzare
un quadratino. Se invece
intersechiamo due linee di poly,
queste saranno per forza collegate
tra loro, ovvero in corto. Se
intersechiamo invece una linea di
poly con una di diffusione, stiamo
creano un mos. Si noti che illegale intersecare una diffusione n ed una p: anzi, ricordiamo che
una delle regole pi stringenti la distanza tra una linea n ed una p per via della nwell da creare
per realizzare una linea p!
Per capire come ottenere il Cout, si esprimono i casi in cui si ha 1 e viene come in figura. in
pratica la or di 3 and. Se metto poi la c in evidenza ottengo laltra espressione. Si ottiene con una
AndOrInvert seguita con un invertitore. La somma un XOR, una OR esclusivo. Questa funzione
compare molto spesso nei circuiti digitali ma non si presta bene ad essere integrata! La XOR in
generale alta quando sono alti un numero dispari di ingressi, quindi la funzione disparit. Con
una AOI sarebbe molto complicato. Allora, facciamo cos: prendiamo la colonna di Cout negato
tanto ce labbiamo gi gratis: si vede che identica alla S tranne nel primo e nellultimo caso!! E
allora si pu scrivere come in slide. Un inconveniente che per calcolare S devo aspettare che
Cout negato sia disponibile!
nella rete di pull down abbiamo il parallelo di due reti, una che realizza
la and di A B e C e una che realizza la And tra NotCout e la or tra A,B
e C. La rete di pull-up poi si realizza per dualit. Il circuito ovviamente
calcola S negato, quindi necessario un invertitore per ottenere S.
Semplifichiamo: quando conduce il ramo di pull-up evidenziato?
Quando A B e C sono entrambi bassi, allora possiamo spezzare la rete e ottenere questo:
Cout va sul lato superiore della cella perch andr al fulladder successivo, il C invece va in basso.
Per la realizzazione delladder a 8 bit baster fare un array. Se la cella progettata bene, fare un
addizionatore a 16 o 64 bit semplicissimo: basta richiamare il comando array. Ovviamente
cambieranno le prestazioni del circuito, ma a livello di realizzazione di layout semplicissimo.
Questa una struttura bit-slice, ovvero realizzato con strisce di bit. La struttura duttile. In questo
caso abbiamo un flusso di dati. C poi un segnale di controllo che il riporto che si propaga, ed
proprio ortogonale al flusso di dati: bisogna stare attenti che nel layer questi viaggiano
ortogonalmente al flusso dati.
Struttura bit-slice
DATA-PATH
Sistemi Combinatori
Timing Analysis
Qui calcoliamo il cammino critico: calcoliamo la differenza tra il tempo richiesto e il tempo di arrivo
(questa differenza si chiama SLACK). Affinch tutte le specifiche saranno rispettate se su tutti i
nodi si avr uno SLACK > 0 (ovvero il segnale arriva prima di quanto necessario). Il nostro tool ci
dir, in questo caso, che tutti i vincoli saranno rispettati. Il cammino critico del circuito quello
evidenziato in verde, in cui lo slack per ogni
nodo assume lo stesso valore pari a 30 ed il
MINIMO! Essendo comunque un valore positivo,
non c bisogno di intervenire. Se per lo slack
fosse stato NEGATIVO, a quel punto bisognava
cambiare qualcosa nel nostro circuito SOLO sul
cammino critico, ovvero SOLO dove i vincoli non
sono rispettati. Unaltra forma di ottimizzazione
pu essere questa: se lo slack positivo (vincoli
temporali rispettati), vediamo se possibile
usare dispositivi pi piccoli e quindi che
occupano meno area, dissipano di meno ecc. E
allora, se nella libreria c, uso un dispositivo pi
piccolo! Quindi invece di rendere il dispositivo
pi veloce, se le specifiche vengono rispettate
posso ottimizzare il circuito in termini di efficienza (area occupata, potenza dissipata). Si sottolinea
che il parametro da osservare per questa analisi sempre lo SLACK.
slack=Trichiesto Tarrivo
Linsieme di nodi con slack minimo rappresenta il CAMMINO CRITICO del circuito, il cammino
critico si ottiene senza dover simulare il circuito: STATIC TIMING ANALYSIS.
Esiste per il problema dei cammini falsi: false path. Vediamo ora un esempio di un possibile
cammino falso. Si hanno 5 ingressi e 2 uscite. Per fare
lanalisi del circuito bisognerebbe assegnare tempi di
arrivo e tempi richiesti. Supponiamo tempi di arrivo tutti
pari a 0 e tempi richiesti tutti uguali. In questo caso, il
ritardo max sembrerebbe essere 50 + 10 + 15 + 10 = 85
MA non vero! Perch se si osserva il multiplexer,
questo cammino non si attiva MAI per una questione di
logica quindi nel grafo ci sar ma NON si attiver mai!
Questi cammini creano dei problemi abbastanza
fastidiosi nei tool di simulazione. Comunque, qui il cammino critico 20+10+15+10 = 55.
Tp=(n-1)Tcarry + Tsum
Possiamo allora ottimizzare il nostro addizionatore? Si, basiamoci sulle
funzioni logiche implementate nel full-adder. Qui, abbiamo due porte
logiche che calcolano i negati e noi ci abbiamo inserito i due invertitori
(vedi figura a sinistra). In un addizionatore ad n bit, sulla catena del riporto
ci sono n invertitori (che di volta in volta a partire da NotCout mi danno
Cout) che introducono n ritardi!! Come posso eliminarli?
Prendiamo la tabella di verit del full adder. Questa simmetrica rispetto alla linea tratteggiata in
figura. In sostanza, se nego gli ingressi, ottengo luscita negata!
Come esempio applicativo consideriamo la cella carry. Abbiamo visto che il ritardo di questa cella
rappresenta il cammino critico delladdizionatore a propagazione del riporto. Chiediamoci: qual la
condizione di ottimizzazione del circuito? Vediamo come si dimensiona la porta.
Nel secondo passaggio divido e moltiplico per la capacit Cgo. La riscrivo allora come:
Tp=Tp0*h
Tp0 quindi porta in conto la tecnologia (e quindi il costo), h porta in conto il dimensionamento.
Se aumentiamo le dimensioni del nostro invertitore di un fattore X che succede?
La capacit di ingresso sar maggiore di X, la R equivalente si ridurr del fattore X. Il prodotto
allora resta costante.
Se aumento il sizing allora, Tp0 rimane costante e h si riduce.
La formula Tp=Tp0*h ci fa capire che
facile calcolare il ritardo. Infatti, Tp0 lo
calcolo una volta per tutte poich vero
per tutta la tecnologia utilizzata, lh
invece lo calcolo volta per volta.
Facendone il prodotto ottengo il ritardo
dellinvertitore, o comunque della gate
considerata.
Tpo un parametro caratteristico della tecnologia mentre h il rapporto fra la capacit di carico e
la capacit di ingresso della gate => h dipende dal sizing.
Vediamo cosa accade se invece dellinvertitore consideriamo una porta logica, tipo una nand a 2
ingressi. Dimensioniamola in modo da renderla equivalente allinvertitore dimensionato prima:
Nellinvertitore avevamo un solo dispositivo di dimensione W 0, qui ne
ho 2 in serie quindi la loro dimensione sar pari a 2W 0 che in serie
equivalgono a W 0. Per i PMOS, la W sar ancora pari a 2W 0 in modo
tale che quando conduce un solo pmos esso equivalente
allinvertitore di prima. La capacit che vedo su uno degli ingressi della
nand maggiore. In particolare maggiore di 4/3. Il ritardo della nostra
nand, quando piloto una certa capacit di uscita, sar Tp. Come prima,
moltiplico e divido per la C di ingresso Cg,nand.
LOGICAL EFFORT
Il tutto lo riscrivo come Tp0*h*g dove g una costante e prende il nome di logical effort. Questo g
mi dice di quanto pi lenta una porta logica rispetto ad un invertitore a parit di
dimensionamento. Infatti, in questo caso la nand dimensionata in modo equivalente allinvertitore
ma pi lenta di un fattore 4/3!
Il logical effort ricordo il rapporto tra capacit di carico e capacit di ingresso. Per le varie porte
vale:
Nel caso di una NAND a 3 ingressi NAND3 per renderla equivalente allinvertitore, gli NMOS
hanno 3W perch ce ne sarannoo 3 in serie, i PMOS invece saranno uguali a prima perch nel
caso peggiore ne conduce sempre uno solo.
Calcoliamo la capacit relativa ad un ingresso e la capacit di ingresso dellinvertitore. Il rapporto
ci d g. Se considerassi una porta a N ingressi, si ha che la capacit complessiva pari a 2+ N e
h diventa 2+N/3 per una generica NAND a N ingressi.
Vediamo cosa accade per la NOR.
Dimensioniamo la porta affinch abbia la stessa resistenza di ingresso dellinvertitore:
Per gli NMOS la W W0, per i PMOS sar 4W0. Lh sar 4+1/3.
Se fosse una NOR a N ingressi, la W dei pmos sarebbe 2N, quindi g sar 2N+1/3.
Vediamo un esempio di ci che abbiamo detto. Le nand sono X volte pi grandi di quella ad area
minima. Quale sar il ritardo di questo circuito?
Tp0 sar un certo numero, g dipende dalla logica (NAND
a 2 ingressi: g=4/3) e h dipende da x. Per Cwire elevata,
conviene prendere una X elevata. Ad ogni modo, questo
ritardo non potr essere mai inferiore a 4/3Tp0. Quindi, in
sintesi, per collegamenti con capacit elevate conviene
prendere dispositivi grossi, in maniera tale da ottenere un
ritardo che non dipende dalla capacit delle
interconnessioni. Se le capacit delle interconnessioni sono brevi, si pu scegliere un
dimensionamento per i dispositivi non elevato cos da ridurre larea occupata.
In formule, avremo che il ritardo della prima NAND si scriver:
Aumentando x, riduco Tp
Il Tp minimo 4/3 Tpo
E necessario utilizzare celle con MOS grandi, quando si devono pilotare capacit elevate
Calcoliamo, come esempio, il ritardo su un cammino in cui abbiamo una cascata di diverse porte
logiche che in questo caso hanno tutte un dimensionamento uguale (x=1). Il ritardo per ogni porta
logica Tp=Tp0*gihi.
con:
Si noti che:
Si pu dimostrare che il dimensionamento ottimo si ha quando i ritardi di tutti gli stadi sono
uguali tra loro!
g1h1=g2h2= .. =(gh)opt
quindi:
Ricordiamo che i ritardi sono Tp0*g*h, quindi si deve avere che sono tutti uguali i vari g*h! Si
ottiene che il (gh)opt pari alla radice ennesima di GH. In questo caso, il ritardo minimo sar pari a
n volte il ritardo della singola porta logica della cascata.
Cerchiamo di dimensionare la nostra cella. Per farlo, vediamo dove inserita nelladdizionatore a
propagazione di riporto. Il cammino pi lungo
sappiamo che quello che prevede tante celle di
carry in cascata. Dobbiamo minimizzare il ritardo
della serie delle due porte logiche Xc e Xi.
Calcoliamo lelectrical effort complessivo (pari al
rapporto tra la capacit finale e la capacit
iniziale) e il logical effort complessivo che il
prodotto dei due. Il fattore gh ottimale la radice
quadrata di GH. Sfruttiamo questo risultato per
dimensionare Xi e Xc. Si noti che il ritardo minimo viene pari a 2*radicedi2 Tp0 (2 perch sono 2
porte in cascata di pari ritardo). Il nostro addizionatore a propagazione del riporto non potr mai
andare pi veloce di questo.
Imponendo il fattore trovato, si ha che le dimensioni dellinvertitore devono essere maggiori delle
dimensioni della cella carry di un fattore radicedi2. Si noti che non si ricava MAI il valore esatto
delle 2 porte, ma si ottiene un fattore dato dal rapporto tra le due dimensioni. Si noti che conviene
fare pi grande linvertitore piuttosto che la cella carry.
Ricordiamo che abbiamo
trascurato le capacit verso la
cella somma: posso farlo solo se
la Cs molto pi piccola della
capacit di ingresso
dellinvertitore. Da questa
condizione trovo una condizione
su Xi. In maniera analoga
ragiono per Xc. Dalle due
condizioni diciamo che: il ritardo minimo 2radice2Tp0 e lo ottengo quando le dimensioni
dellinvertitore e della cella carry sono abbastanza grandi in modo da poter trascurare le capacit
della cella somma ed inoltre devono essere in rapporto radice2. Una scelta ragionevole fare Xi 5
VOLTE pi grande del rapporto Cs/Cgo.
Valutiamo infine il ritardo in cui non ci siano
invertitori dal cammino critico (per portarli in
serie agli ingressi, visto nella lezione di ieri).
Se facciamo questa operazione, nel cammino
critico c solo la cella carry. Se trascuriamo le
capacit della cella somma, lelectrical effort
1 perch le 2 capacit sono uguali, quindi la Tp
viene 2Tp0. Xc lo dimensioniamo facendo in
modo che il contributo delle capacit della cella
somma siano trascurabili. In definitiva togliere linvertitore appagante, attenzione per perch le
dimensioni dei dispositivi della cella carry saranno pi grandi. vero che il circuito pi veloce ma
attenzione perch i dispositivi della cella carry saranno pi grandi rispetto al caso in cui ci sono gli
invertitori in serie.
Trascuriamo le capacit della cella somma:
Tp=Tp0*h*g=2Tp0
Per poter trascurare le capacit della cella somma:
ALU
Discutiamo della struttura dellunit logica aritmetica che realizzeremo nelle esercitazioni.
Questa ALU un sistema combinatorio che dispone di due ingressi A e B a N bit (noi utilizziamo
un data path a 8 bit) dove arrivano i due operandi da trattare. Laltro ingresso (codice operativo)
espresso su m bit definisce loperazione che si deve effettuare sui due operandi (somma,
differenza, ecc). Avendo m bit, possiamo codificare 2m operazioni possibili, anche se in realt c
ridondanza e le operazioni veramente
possibili saranno di meno. Avremo due
tipi di operazioni:
Le operazioni aritmetiche sono pi complicate delle logiche, saranno il collo di bottiglia della ALU in
termini di velocit.
Per le operazioni aritmetiche, importante vedere quale sar la rappresentazione utilizzata per i
numeri. Ne esistono diverse, ma noi utilizziamo quella in complementi alla base.
Noi dobbiamo trattare numeri con segno.
Vediamo la struttura interna della nostra ALU, particolarmente semplice. Dividiamo il nostro
sistema in due blocchi: uno effettua soltanto delle operazioni aritmetiche e un blocco che
progettato per eseguire solo operazioni
logiche. Per le aritmetiche abbiamo 3
bit di codice operativo, mentre ne
abbiamo 4 per le operazioni logiche. Il
multiplexer sceglier quale delle 2
uscite. Il bit di selezione far parte
anchesso del codice operativo.
Aritmetiche: con 3 bit di codice op. si
possono effettuare max 8 operazioni,
ne saranno di meno e lo vedremo.
Parte Aritmetica
Supponiamo di fare un circuito che sappia fare solo la somma o la differenza (addizionatore
sottrattore). Per fare la differenza, possiamo usare ancora un addizionatore realizzando
loperazioni A+(-B). Quindi, prima di sommare, bisogner cambiare segno alloperando B. Quindi,
dobbiamo complementare tutti i bit di B e aggiungere un LSB. Il circuito che realizza questa
operazione a lato: si hanno un insieme di XOR
dove uno degli ingressi liesimo bit di B e laltro
ingresso in comune e vale m (m ci dir se
voglio fare la somma o la sottrazione). La Xor
quindi un complementatore (vedi quad (a)). Se
m=1 faccio A-B, se m=0 faccio A+B.
Parte logica
La parte logica il blocco booleano ed ha 4 bit di codice op. Il cuore di questa parte logica
realizzata da multiplexer 4 a 1. Saranno
8 mux 4a1. Gli ingressi saranno f0f1f2f3
mentre i bit i-esimi di A e B saranno gli
ingressi di selezione. Con dei mux
possiamo realizzare qualsiasi funzione
logica degli ingressi perch sono blocchi
universali. Per dimostrarlo, usiamo la
Formula di Espansione di Shannon.
Supponiamo di avere una funzione
booleana (o logica) di n variabili. Questa
funzione, pu essere scritta come in
slide. La dimostrazione ovvia perch
se X1=1 sopravvive solo il primo termine
(x1*f(1,x2,x3,,xn) mentre se pari a 0 sopravvive solo il secondo termine.
Questa OR la posso vedere come un multiplexer. Se ho quindi una funzione booleana di n variabili
booleane la posso realizzare con un multiplexer e con 2 funzioni di n-1 variabili. Ragionando in via
iterativa:
Luscita della alu verr inviata ad un accumulatore, la cui uscita sar la parte A dellalu.
e il datapath complessivo:
Sistemi sequenziali:
temporizzazione
(cap.10)
In una logica sequenziale i registri sono comandati da un clock. Esistono due modi per realizzare
un sistema di memoria:
Con feedback positivo
basato su carica
In varie letterature un circuito sensibile ai fronti di commutazione del clock chiamato anche flip-
flop.
Un latch ha una fase di trasparenza e una fase di memorizzazione: nella trasparenza luscita
segue lingresso. In un registro o in un flip-flop invece, lingresso viene campionato in
corrispondenza del fronte e viene riportata in
uscita. Luscita non segue pi lingresso come
per il latch.
Esistono due tipi di latch:
positivo
negativo
quello che cambia il livello del clock su cui
sono in memorizzazione(e dualmente
trasparenti).
METASTABILITA'
Un'altra applicazione tipica quella in cui abbiamo un blocco combinatorio, un registro di ingresso
e un registro di uscita. In realt i vincoli che ora
scriviamo sono validi in generale, sia per una
macchina a astati disegnata in alto sia per un
circuito aperto come quello in basso.
Quali sono questi vincoli da rispettare affinch il
circuito operi correttamente?
Nellesempio, si ha un banco di registri a n bit, il
segnale X in uscita ancora a n bit, viene
elaborato dal blocco combinatorio e poi luscita Y
viene memorizzata nel registro 2. I parametri
necessari sono quelli dei registri: il clock to q, il
setup e lhold. Poi abbiamo bisogno dei parametri
del sistema combinatorio: ritardo combinatoriale
massimo e ritardo combinatoriale minimo. In figura
c una possibile evoluzione temporale. Il corrispondenza del primo pronte di discesa del clock il
dato X viene memorizzato
(osserviamo che X non cambia
subito dopo il clock, ma dopo
1p). Quando X varia, dopo un po
Y comincia a variare perch
lavora la logica combinatoria.
Dopo un po di tempo, la Y
smetter di commutare e sar
stabile, sar a regime dopo un
ritardo massimo. A questo punto,
il nuovo valore di Y viene
memorizzato nel registro numero
2.
tempo di hold: vediamo cosa accade in corrispondenza del fronte n-esimo del clock e non
n+1 come prima. Quando avviene il fronte, contemporaneamente memorizzo il valore
precedente yn delluscita perch il clock agisce su entrambi i 2 registri. Luscita, dopo il
fronte del clock, comincer a commutare: dobbiamo fare in modo che ci sia un tempo
sufficiente in cui luscita rimane stabile anche dopo il fronte del clock altrimenti yn non verr
memorizzato correttamente nel registro 2 di
uscita. Dopo quanto tempo luscita commuta?
Dopo il tq + il tcminimo. Affinch il circuito
funzioni bene allora, tq+tcmin deve essere
sufficientemente grande: luscita y deve
rimanere stabile per un tempo adeguato, pari al
tempo di hold. In questa osservazione non
entra il periodo del clock: pu essere verificata
o meno indipendentemente dal periodo del
clock! Se il vincolo sul tempo di hold non viene
soddisfatto, non potr mai fare in modo che il
circuito funzioni perch seppure abbassassi la
frequenza del clock, le cose non cambiano! Inoltre questo
vincolo legato al ritardo minimo del sistema
combinatorio! Quanto maggiore questo ritardo minimo,
meglio . Inoltre, sono presenti due tempi caratteristici del registro: tq e th. Quanto vale il
ritardo minimo? Dipende dal sistema. Ci possono essere situazioni in cui il tcmin nullo
(interconnessione): in questo caso il sistema funzioner o meno soltanto se verificata una
condizione che legata soltanto i registri: tq>th.
Warning: quando vedremo la non idealit del clock queste relazioni dovranno essere
riviste.
Riepilogando avremo:
Vincolo sul tempo di setup:
Vediamo cosa accade per i tempi richiesti: ci muoviamo da destra a sinistra e poi mettiamo il
massimo come valore su ogni nodo.
Per ogni nodo abbiamo il tempo richiesto, il tempo di arrivo e lo slack questa volta definito come il
tempo di arrivo meno il tempo richiesto. Infatti
il segnale deve arrivare dopo il tempo
richiesto. Si chiama Early slack. Osserviamo
che su Y1 il vincolo sul tempo non
rispettato, infatti lo slack negativo!! Abbiamo
quindi questo nodo con uno slack pari a -30.
Andando a ritroso, vediamo che ci sono altri
nodi con stesso slack e che costituiscono un
cammino tra ingresso e uscita. Questo
insieme di nodi mi definisce il cammino critico:
in sostanza il cammino pi veloce del
circuito!! Quando ci sono vincoli non rispettati,
bisogner cambiare il circuito in modo da rispettare questi vincoli.
Bisogner rendere pi lento quel cammino in verde.
Nel nostro caso abbiamo la cascata di una nand e di un invertitore. necessario aumentare il
cammino critico almeno di 30 Per rallentare, inserisco un
buffer! E ne aggiungo tanti in cascata fino a quando i
vincoli temporali vengono finalmente rispettati.
Immaginiamo il clock come segnale ideale: frequenza fissa e attiva simultaneamente tutti i registri
del circuito.
Non cos ovviamente, ecco
perch devo portare in conto varie
non idealit:
Clock skew: non idealit
dovuta al ritardo sul sistema
Clock Skew di distribuzione del clock, ha
una componente
deterministica(predicibili in
fase di progetto) ed una
casuale;
Clock jitter: Variazione temporale fra due fronti consecutivi del clock (frequenza non
Clock Jitter perfettamente costante): modulation + random noise. Si distinguono:
o Jitter cycle-to-cycle (short-term) tJS, massima differenza del periodo tra due cicli di
clock successivi
o Jitter assoluto
Se consideriamo due clock che si trovano nel mio circuito, essi saranno sfalsati tra loro, inoltre ci
sar una componente aleatoria nellistante di commutazione.
Il clock non ideale per molti motivi: normalmente ho un generatore di clock unico e una rete di
distribuzione che consiste in buffer, linee di interconnessione ecc. Ogni linea finir su flip flop pi
grandi o minori. Le cause quindi sono: generatore, incertezze legate ai dispositivi che pilotano le
linee, linee stesse, alimentazione che causa rimbalzi, accoppiamento capacitivo, temperatura, flip
flop di carico.
Quando si progetta lalbero di clock vorremmo
ottenere che il clock arrivi in maniera
SINCRONA a tutto il circuito. Non ci interessa
molto che ci sia ritardo tra il generatore e il pin
vero e proprio!
Clock skew
Lo skew ha alcune cause deterministiche: supponiamo di aver ottenuto le due situazioni in figura.
Nella prima figura abbiamo un delay crescente man mano che mi sposto lungo il datapath del
circuito, avremo quindi il cosiddetto Positive skew:
Nella figura in basso il delay decresce man mano che mi sposto lungo il datapath. La direzione di
riferimento quella lungo cui si propagano i dati, avremo quindi il cosiddetto Negative skew:
Positive skew
Negative Skew
Vediamo gli effetti del positive skew:
Per il tempo di hold, il delta deve essere minore di una certa quantit!
Ricapitolando:
Uno skew positivo (>0) benefico per le prestazioni (posso aumentare la frequenza di clock,
sebbene di poco) ma MOLTO pericoloso per il funzionamento del sistema (vincolo di hold).
Uno skew negativo (<0) peggiora di poco le prestazioni ma rende il sistema pi immune a
problemi sul tempo di hold.
Rispetto ad un sistema senza clock skew, l'effetto del ritardo sul clock equivalente ad una
variazione di tq.
Non sempre si pu scegliere quale skew avere (sempre positivo o sempre negativo). Se ho dei
loop non posso fare nulla! Ecco perch consideriamo sempre che lo skew sia PEGGIORATIVO nei
casi. Consideriamo che:
peggiori sempre le prestazioni
renda il circuito meno robusto (renda pi critico il vincolo di HOLD).
CLOCK JITTER
Non sapendo quando il periodo del clock sar maggiore del valore nominale e quando sar
minore, abbiamo entrambi i problemi evidenziati per lo skew:
peggiora le prestazioni
rende pi critico il vincolo sul tempo di hold.
Le formule da usare quale saranno? Supponiamo di conoscere in linea di massima lo skew e jitter:
Devo ragionare sempre in via peggiorativa. Nella formula sottraggo 2 volte il jitter perch ho due
fronti del clock. Si vede che il periodo di clock peggiore.
Ci dobbiamo assicurare che il tempo combinatoriale
minimo sia abbastanza grande. Se non dovesse
esserlo, aggiungiamo dei buffer.
Spesso, per fare ci, devo inserire della logica fittizia(buffer) per aumentare il ritardo
combinatoriale minimo:
Come distribuisco, quale strategia uso per distribuirlo in un circuito integrato con molti transistor e
molto estesi come superficie? La strategia deve ridurre lo skew nelle componenti note (non
aleatorie) e si pu usare una: strategia con distribuzione ad albero in modo che il ritardo tra il
generatore e il flip flop sia sempre uguale. I flip flop sono le foglie. Per fare ci, devo sapere dove
sono i flip flop sul silicio esattamente; una strategia con distribuzione a griglia: si cerca di fare i
ritardi quanto pi piccoli possibile. Si useranno dei buffer molto grossi in grado di erogare molta
corrente!
Immagino di avere 2 registri piazzati in due punti differenti. Dopo il buffer, ci saranno le 2 wire che
arrivano ai due registri. Avremo una C di carico dei registri diverse e quelle della linee diverse. Si
pu schematizzare la linea con una rete a T.
Per calcolare lo skew tra le due foglie dellalbero, bisogna valutare il ritardo che il clock impiega per
arrivare nei due punti e farne la differenza.
Dal circuito di sinistra ricaviamo(Elmore delay):
Quanto vale? Non si capisce, per il ritardo skew che si ottiene dipende dalle capacit di carico e
soprattutto dalle capacit e dalle resistenze delle LINEE di interconnessione!
Per avere una idea, mettiamo dei numeri e
vediamo cosa otteniamo: supponiamo di
avere dei flip flop realizzati con latch a porte
di trasmissione (quindi sono 8 pmos e
8nmos).
Calcolate le C, portiamo in conto anche la
resistenza per fare due conti. Ho linee in
metal1, supponiamo che la prima linea sia
anche pi corta e supponiamo di ottenere
quelle resistenze. Lo skew di 25.50 ps! Se
usassimo un registro da 64 lo skew diventa veramente grosso!! Se scambiamo per le 2 linee,
possiamo andare molto meglio, e otteniamo uno skew che pi piccolo del primo caso!
Si vorrebbe quindi bilanciare tutti i ritardi, tutte le foglie dellalbero. Una topologia realizzativa
dellalbero quello dellalbero ad h: ho il clock che tramite un buffer collegato alla parte centrale
dellh, poi alla fine di ogni linea verticale ho delle h, se si va a
vedere, i percorsi dal centro alla foglia sono sempre gli stessi! Se
sulla singola foglia dellalbero ho registri diversi, dovr compensare
usando dei buffer diversi. Se i nodi cui distribuire il clock non sono
perfettamente identici, si pu agire sul sizing degli invertitori e sulle
interconnessioni per bilanciare i ritardi.
Supponiamo queste 2 situazioni: il clock ha una capacit piuttosto
elevata (in alto) e linvertitore 4x. Le capacit indicate in basso
sono quelle delle linee di trasmissione. Per questo esempio e la
maggior parte dei progetti cos si comportano, si trascurano le
resistenze. Calcoliamo allora il ritardo con lelettrical effort (il logical
dovrebbe essere sempre 1 perch sono invertitori).
La capacit di gate di un invertitore 1X sia 10fF
Il tempo caratteristico della tecnologia (ritardo di un
inverter che pilota un altro inverter identico):
t0=10ps
Valutiamo la differenza:
Per migliorare questo skew, basta cambiare le dimensioni dellinvertitore in rosso. Lo porto da area
minima a 2x, cos ottengo che il primo ritardo nella Ta
peggiora ma migliora di molto e complessivamente il
ritardo verso il punto a diminuito quindi lo skew
passato a 7.5ps! cambiando le dimensioni dei buffer
ottengo miglioramenti notevoli!
Sempre nel p4, si usano tecniche specifiche: una delle cause era lalimentazione. Si filtrano allora
le variazioni sulle tensioni di alimentazioni. Quello che si sosteneva, che se si ha un rimbalzo del
10% sulla tensione di alim. Il buffer vede solo una variazione del 2%.
Vediamo ora come si genera il clock. I circuiti moderni funzionano con clock di alcuni GHz.
Questo crea 2 problemi:
1. generazione (generatori a ridotto jitter basati sulloscillatore al quarzo non forniscono GHz
ma al max 100MHz);
2. se porto il clock on board a 3GHz, devo far commutare delle capacit enormi!! Quello che
si fa generare un clock a frequenza pi bassa e poi portarlo su in frequenza.
La prima strada per generare il segnale di clock usare anelli ad aggancio di fase (PLL).
In pratica si utilizza un oscillatore a quarzo, per generare un segnale di riferimento a bassa
frequenza, poi degli anelli ad aggancio di fase (PLL) vengono utilizzati on-chip per moltiplicare il
segnale di riferimento esterno e generare il clock alla frequenza desiderata
Quindi il meccanismo degli anelli ad aggancio di fase permette di moltiplicare la frequenza di
unonda quadra. Sono fatti cos:
Sistema a ciclo chiuso. La frequenza prodotta dalloscillatore controllato in tensione (VCO) viene
controllata in modo tale che, in condizioni di aggancio i segnali reference clock e local clock
sono identici (stessa frequenza e fase).
Poich la frequenza del local clock pari a quella del system clock/N, in condizioni di aggancio
la frequenza del system clock N volte quella del reference clock.
I PLL sono sistemi misti Analogico-Digitali (la tensione di controllo del VCO un segnale
analogico, il filtro di anello un filtro RC ecc.).
Il filtro di anello deve essere progettato in modo da garantire la stabilit del sistema. Inoltre dal filtro
di anello, oltre che dal VCO, dipende il jitter del system clock.
I PLL:
1. vengono messi in ingresso ai circuiti digitali per elevare la frequenza del clock;
2. serve per distribuire il clock a due dispositivi digitali ed avere un sincronismo. Il pll fa da
buffer senza ritardo. I due clock in ingresso dei sistemi digitali sono esattamente in fase! Il
buffer ovviamente mi servir sempre, per rendere uguali i ritardi per annullo i ritardi dei
buffer con i pll.
3. posso usare il pll per sincronizzare il trasferimento dati tra 2 circuiti.
I PLL operano come dei buffer a ritardo nullo. Il trasferimento dati fra chip1 e chip2 avviene a
frequenza inferiore rispetto al system clock. I dati
trasmessi sono sincroni con il reference clock
Nel chip 2 si utilizza un PLL per annullare gli
effetti del ritardo del clock buffer (de-skewing): il
segnale di clock al registro del chip2
perfettamente allineato con il reference clock,
nonostante la presenza del clock buffer.
Ecco un modo per avere un buffer a ritardo nullo (VCDL: voltage controlled delay line):
Progetto di Latch e Registri a
livello Transistor
Cap. 7
In basso metto un invertitore standard al posto del clock inverted. Si risparmia il carico sul clock,
non tanto larea. Ottengo proprio un bistabile. In fase di memorizzazione non ci sono problemi.
Ora si alza il clock, siamo in fase di trasparenza. In questa fase c un problema di
DIMENSIONAMENTO!
Il W/L equivalente del clocked inverter (pilotato da D) deve essere pi grande rispetto ai dispositivi
che stanno nellinvetitore di feedback. Nel conflitto al nodo P deve essere pi forte il clocked
inverter!
Tq=Ti+Tm
Infine, vediamo il tempo di hold. Durante il fronte di salita, T2 si chiude e T1 si apre (disattiva). Se
ci accadesse istantaneamente, non avrei problemi.
Possiamo trarre 2 conclusioni:
1) la frazione di periodo consumata dal registro estremamente grande!
tsetup+tc=4ti+2tm ovvero si mangia 4 volte il ritardo di un invertitore e 2 volte il ritardo di
una porta di trasmissione. Il tempo minimo proprio il tempo di hold che per non rientra
nella figura di merito velocit del nostro sistema in esame.
2) Posso realizzare un registro a scorrimento? Il ritardo combinatoriale praticamente 0
(tcmin=0) e la condizione diventa quello di figura. Se per c un ritardo sul clock, la
condizione cambia!
In definitiva, sul master slave ho grande carico, il sistema lento perch il tempo di setup grande
(ma anche il tcq), robusto!
FUNZIONAMENTO CORRETTO
Il reset serve per inizializzare un registro, per portare tutte le uscite a 0. Non sincrono.
Se il reset alto, metto D a 0. Q non va a 0, andr a 0 al successivo fronte del clock. Il reset
SINCRONO non ha problemi di sorta riguardo la realizzazione hardware. Il mux non altro che
una and.
Il reset serve per portare il registro in uno stato predefinito (Q=0)
Reset asincrono: cambia lo stato del registro, portando Q=0, indipendentemente dal clock
Il reset asincrono deve funzionare anche
quando non c clock. Si deve modificare
quindi la struttura interna del registro.
Per effettuare il reset asincrono devo:
spezzare i loop di reazione
portare lo stato dei nodi interni ai valori
in figura
La soluzione al problema riportata in figura a lato: al posto dellaltro invertitore che stava nel loop
di retroazione metto una NOR il cui ulteriore
ingresso il reset. Se questo reset vale 0,
dobbiamo verificare che il sistema si comporti
normalmente: in questo caso,la NOR a tutti gli
effetti un invertitore. Quando il reset 1, i nodi
in uscita alle NOR si resettano e vanno a 0. Si
noti che rispetto a prima non ci sono invertitori
in serie, in questo modo ho fatto una struttura
NON invertente nel complesso data dalla
cascata di due blocchi invertenti.
Molto spesso necessario introdurre un segnale di enable che consente, se attivo, di caricare il
registro.
La soluzione pi intuitiva il clock-gating che per:
RICHIEDE PARTICOLARE ATTENZIONE
Si introduce un clock skew rilevante
Il registro pu acquisire i dati in corrispondenza delle commutazioni di
en, invece che del clock!
Il clock gating utile per ridurre la dissipazione di potenza (lo
studieremo in quel contesto).
Caricamento condizionale di un registro: inserisco un nuovo segnale di
abilitazione che consente di caricare il registro o meno. Con la soluzione di figura, introduco un
ritardo sul clock e un problema relativo allenable (leggi in rosso). Questa tecnica per utile per
ridurre la dissipazione di potenza: sappiamo che il segnale di clock uno dei pi critici. In questo
modo, applicando per esempio lenable ad un intero modulo, si riduce di molto la pd. Bisogna
comunque stare molto attenti quando si adotta tale soluzione.
Se voglio evitare di usare lenable sulla linea di clock, uso un multiplexer
sul dato di ingresso!
In vhdl il caricamento condizionale segue proprio questo schema. Se ho un
processo, questo si attiva solo se cambia il clock. Avr lif prioritario che
sul fronte attivo del clock e un if pi interno che agisce sul dato iniziale.
Registri avanzati
SRAM-based
Addizionatori
Moltiplicatori
Laddizionatore ad N bit viene suddiviso in P blocchi,ognuno dei quali opera su M bit, con: N=P*M
Il primo blocco un adder carry-ripple su M=4bit. I blocchi successivi includono due adder carry
ripple da M=4bit (unocon Cin=1 e laltro con Cin=0) e dei multiplexer.
T=MTa + (P-1)Tm
Come posso scegliere in modo ottimale M e P, dato N?
Sostituisco M=N/P e derivo rispetto a P:
Il ritardo proporzionale alla radice di N. Il miglioramento rispetto al carry ripple sensibile quando
N sufficientemente elevato
Esempio: tm=ta/2; n=32, m*=4, p*=8, da cui un ritardo pari a: t*=7.5 ta (carry-ripple: 32 ta
miglioramento di un fattore 4).
C per un prezzo da pagare: aumento dellarea (circa doppia rispetto ad un carry ripple)
E possibile ridurre ulteriormente il ritardo, eliminando il vincolo che tutti i blocchi siano della
stessa dimensione.
Esempio. Supponiamo che Tm=Ta=1 e consideriamo la struttura iniziale
(non migliorata) in cui tutti i blocchi siano da 4 bit
Il segnale C8 e disponibile al tempo 5. Tutti i segnali giungono contemporaneamente al
multiplexer che fornisce C8.
Consideriamo il multiplexer che genera C12: Il segnale di selezione disponibile al tempo 5,
mentre gli altri due ingressi (prodotti dai due adder carry-ripple) sono disponibili al tempo 4
E possibile portare il terzo blocco da 4 ad 5 bit senza peggiorare il ritardo.
Cerchiamo di ricare un espressione in via ricorsiva per il calcolo dei carry di ogni bit.
Introduciamo poi il Block Generate e il Block Propagate.
Avevamo scritto:
Nota Importante: il riporto prodotto dal blocco dipende dal riporto entrante se e solo se:
BP=1; in questo caso riporto uscente coincide con il riporto entrante
Se BP=0 il riporto del blocco potr essere 0 oppure 1, ma non dipender dal valore di Cin.
Adder carry-skip
Abbiamo visto che il riporto prodotto da un blocco dipende dal riporto entrante se e solo se: BP=1;
in questo caso riporto uscente coincide con il riporto entrante.
Dunque, Se BP=1 non necessario attendere che il riporto venga calcolato allinterno del blocco,
si pu immediatamente riportare il riporto entrante alluscita del blocco.
Questa osservazione alla base delladder carry-skip.
Come per il carry-select, laddizionatore ad N bit viene suddiviso in P blocchi, ognuno dei quali
opera su M bit, con: N=P*M.
Ogni blocco (anche il primo) composto da un adder a propagazione del riporto e da un mux, ogni
blocco, inoltre, deve valutare il segnale di block propagate, BP.
In uscita viene fornito il riporto di ingresso (se BP=1) oppure il carry calcolato dalladder a
propagazione del riporto (se BP=0).
Consideriamo la configurazione in figura. Dopo quanto tempo sar disponibile il segnale C12?
Il riporto C12 uguale a C8, mentre C8 non dipende da C4. Il caso peggiore che pu presentarsi
che il riporto si generi nel primo bit del secondo stadio, si propaghi attraverso tutti i full-adder del
secondo stadio, attraversando due multiplexer fino a giungere a C12.
In definitiva, possibile aumentare di un bit le dimensioni del secondo e del terzo blocco, senza
aumentare il ritardo.
Si pu dimostrare che, in generale, possibile aumentare le dimensioni dei blocchi compresi fra il
secondo ed il penultimo. I blocchi di dimensione massima sono quelli al centro delladdizionatore e
la distribuzione delle lunghezze dei blocchi la seguente:
Ben si adatta su circuiti che devono sommare un numero significativo di bit. La struttura di base
include 3 blocchi :
1. calcola i segnali di generazione e propagazione di ogni bit
2. sfruttando questi segnali , va a calcolare i riporti per ogni bit ( quelli entranti)
3. calcola le somma con il segnale C calcolato nel secondo blocco
Il primo e lultimo blocco non sono critici : entrambi operano solo con la cifra i-esima . (cifre che
stiamo sommando) . Il ritardo sar concentrato nel secondo blocco che calcola i riporti e lo deve
fare nella maniera pi veloce possibile .
Come possiamo calcolare i segnali di riporto?
Una prima opzione sarebbe di usare le equazioni di generazione e propagazione usate laltra volta
e di espanderle.
C1 = primo bit
C2 = secondo bit : lo posso espandere mettendo al posto di c1 la prima formula.
Calcolo tutti i riporti in parallelo e con il ritardo di un'unica gate. Se proseguo ad espandere queste
funzioni per tutti i bit che dobbiamo sommare riusciamo a fare un circuito in cui il tempo per fare la
somma non dipende da N : ho N porte logiche , per ognuna , sfruttando g e p , possibile
calcolare il carry e poi con altre XOR faccio la somma e potrebbe in teoria non dipendere da
N questa operazione.
Questo risultato teorico perch si vede che le funzioni logiche che calcolano i riporti diventano
pi complicate quando lindice cresce. Pertanto , vero che ci vuole un'unica porta logiche
per calcolare C4 , ma il ritardo di questa
porta diventa grande perch il logical
effort diventa grande ( ovvero il numero
di transistori e aree crescono in maniera
incontrollata) . Posso adottare questo
approccio solo per pochi bit.
BG e BP non
dipendono da Cin
Stima dei ritardi; indico con:TGP il ritardo dei blocchi per il calcolo di gi e pi; TCLA il ritardo del
blocco CLA e TXOR il ritardo della xor per calcolare la somma finale.
Adder parallel-prefix
Posso calcolare quindi tutti i carry , poi faccio le XOR e ho tutte le somme.
Se risolvo il problema parallel prefix con tempo di propagazione ridotto, riesco a fare anche la
somma nello stesso tempo Log di N . il nostro problema cambiato ed quello di capire come
calcolare tutte le uscite in un tempo proporzionale al numero di bit da sommare. Vediamo che
loperatore non gode della propriet commutativa. Se scambio di posto gli ingressi, luscita
cambia!
Prima di fare questo dobbiamo vedere se loperatore gode di propriet associativa. Facciamo
allora la verifica :
Nel caso superiore applico loperatore prima allingresso di indice 0 e 1 e poi il risultato
allingresso di indice 2 e ottengo un uscita.
Nella versione dopo, applico prima loperatore agli ingressi 1 e 2 e il risultato allingresso 0 e
ottengo un'altra uscita. Se l operatore associativo le uscite sono uguali perch non importa
lordine.
Dimostriamo lassociativit visto che della propriet commutativa non mi interessa.
Applico prima gli ingressi in un modo e poi li applico al contrario. Sono identici. Le uscite sono i
segnali di BP e BG sempre sui 3 bit. Dobbiamo vedere come calcolare tutte le N uscite come ci
richiede il problema parallel prefix in un tempo rapido possibilmente .
Focalizziamoci sul calcolo dellultima uscita ( dove applico loperatore a tutti gli ingressi ) . Questi
ingressi sono vettoriali. Una prima soluzione mettere in cascata N-1 blocchi in questo modo
che vediamo a lato.
La seconda soluzione la pi rapida : consiste nel disporre gli operatori secondo una struttura ad
albero ovvero gli ingressi vengono elaborati in parallelo. Nella struttura ad albero se ho N ingressi ,
al secondo stadio ne ho N/2 , N/4 a quello successivo e cosi via. I segnali dopo ogni stadio si
dimezzano di volta in volta : il numero di stadi va come il log 2 di N.
Questo vantaggio! In questo esempio non lo si vede perch abbiamo 4 bit => 2 stadi. 64 bit =>
numero stadi da attraversare una frazione piccola rispetto alla struttura ripple.
Caso di 8 ingressi :
Dopo 3 stadi ho
calcolato i segnali di
BP e BG.
Effettivamente
disponendo ad albero i
blocchi logici , calcolo i
riporti con tempo log N.
Inconveniente : nella
struttura di slide calcolo
luscita da 0 a 7 ma a
noi servono tutte! Di
uscite valide abbiamo
la banale g0,p0 ,le due
uscite BP e BG di slide
e poi quella che va da
0,1 . Questa struttura
non completa! Non
riesco a calcolare tutti i
riporti ma solo alcuni.
Per calcolare tutte le uscite , devo aggiungere altri blocchi che usano loperatore <>.
Nellaggiungere questi blocchi che servono a calcolare le altre uscite intermedie , devo fare
attenzione a non incrementare il ritardo rispetto a quello relativo allultima uscita . In questo caso il
ritardo massimo 3 e non devo uscire fuori altrimenti perdo vantaggio.
Vediamo in grigio scuro i blocchi che avevamo prima.. Per calcolare altre uscite intermedie ,
aggiungo blocchetti in grigio chiaro . La particolarit che questi blocchetti sono tali che ad ogni
livello ho sempre lo stesso numero di blocchi , il layout regolare anche se le interconnessioni non
lo sono. Luscita in rosso , rappresenta gli ingressi da 0 a 2. Per gli indici da 0 a 3 quello in blu,.
Da 0 a 4 quella in arancio.
Supponiamo vogliamo vedere luscita che rappresenta gli ingressi da 0 a 6 devo trattare tutti gli
ingressi con pedice che va da 0 a 6.
In realt esistono differenti modi con i quali possibile collegare questi blocchetti per risolvere il
problema parallel prefix. Queste tipologie si ottengono collegando in maniera diversa questi blocchi
:
Lo schema iniziale (in
alto a sinistra) viene
riportato in forma
semplificata con grafo in
verde. Non entriamo nel
dettaglio.
Tutte queste varie strutture hanno tutte lo stesso ritardo log 2 di N ma differiscono di qualcosa.
(slide 48).
Carry select (ritardo proporzionale alla radice quadrata di N). Ha unarea circa doppia
rispetto ad un carry-ripple.
Carry skip (ritardo proporzionale alla radice quadrata di N).Poco pi lento di un carry-
select. Occupa meno area di un carry select.
Strutture adoperate in sistemi VLSI: parallel-prefix con celle base molto semplici e veloci. Kogge-
Stone: fast CLA (fan-out minimo per ogni cella). Elevata occupazione di area. Scarsa regolarit del
layout.
I carry lookhead sono i pi veloci ; c della logica semplice ( porta AND e porta ANDOR ). Alcune
come la kogge stone riducono il fan out per ogni cella.
Addizionatori multi-operando
Supponiamo di fare la
somma di 4 word. Come
faccio? Uso un certo
numero di addizionatori non
uno solo . Lapproccio pi
semplice di usare un ADD
per calcolare A+B , un altro
per sommare al risultato C ,
laltro per sommare D .
Altra soluzione fare A+B
parallelamente alla somma
C+D per poi sommare.
Supponiamo che gli adder sono a propagazione del riporto. Usiamo la struttura pi semplice
con ladder pi semplice :
Notiamo che la somma tra A e B mi
produce bit aggiuntivo : questo perch
bisogna tener presente che 2 termini
da 4 bit danno luogo ad un uscita su 5
bit. Quelli aggiuntivi li metto a massa.
Il ritardo massimo mi aspetto sia di
12. Nessun cammino individuabile
per passa attraverso tutti gli ADD .
Vediamo in slide diversi cammini
critici . Per quanto possiamo
cambiare le possibilit , il cammino
attraversa solo 8 full. Il ritardo
massimo meno pesante! Per come
realizzata la struttura quindi , non si
sommano i ritardi dei 3 full adder. Il
problema che se vogliamo
rendere questo adder multi
operando pi veloce , devo rendere pi veloci tutti gli adder che lo compongono.
Ci viene allora in
soccorso la tecnica
carry-save che viene
usata per fare delle
somme di pi operandi.
Questa tecnica segue
anchessa lalgoritmo
come la scuola
elementare se devo
somare pi numeri, ad
esempio 324 e 741,
come faccio?
Manualmente non
sommo i primi
due(324 e 741) , ma
comincio a sommare
tutte le cifre dello
stesso peso che si
trovano in verticale.
Ottengo una cifra di somma e un riporto che devo sommare sulla colonna a sinistra. Questa
tecnica viene adottata nelle strutture carry save. Comincio a sommare tutti i bit di peso 0. Sono 4 :
a0 d0 . non esiste un full adder con 4 ingressi ecco perch ci vuole qualcosa di pi complicato.
Ottengo un bit somma che ha lo stesso peso degli altri ( 0 visto che abbiamo iniziato con ingressi
a0-d0) e un bit di riporto che ha peso 1. Il risultato della somma , va sommato con d0 (bit a peso
0) che mi da y0 che la cifra meno significativa.
Bit peso 1 : sono a1 b1 c1 a cui sommo il riporto precedente di peso 1 e laltro bit d1. Il bit di
riporto non lo invio al full adder che si trova a sinistra, ma lo invio al full di sotto. la stessa cosa
perch in quella colonna sommo bit di peso 1 ! quelli che vengono dagli stadi precedenti li sommo
pi in basso in modo che arrivano segnali gi ritardati.In questo caso mettendolo sotto ottengo
risultato con ritardo pi piccolo. Ho 2 termini di peso 1 .
Bit peso 2 ,3 4 : i segnali di peso 2 3 e 4 si devono sommare tra di loro. Uso addizionatore VMA
(Vector Merging Adder) e serve per fare somma complessiva per ottenere uscita complessiva.
Il vantaggio di questa struttura che ho un unico addizionatore dove il riporto effettivamente si
propaga da uno stadio alladdizionatore . Laddizionatore lelemento critico e lo posso fare con
tecnica veloce ( se devo andare veloce ) .
I full che stanno sopra danno luogo a propagazione verticale e il ritardo massimo in verticale
pari al numero
di termini ( 10
parole da 64 bit
da sommare ,
ritardo
proporzionale a
10. ) il ritardo va
con log di
ognuna delle
parole da
sommare . Il
ritardo della
struttura.
Moltiplicatori
Questo tipo di
circuito
realizza uno a
uno lalgoritmo
elementare
della
moltiplicazione
. Porto un
esempio di
due operandi
a 3 bit.
Il circuito che
viene fuori
riportato sulla
destra.
Abbiamo un
insieme di
cellette. Ce ne
sono 3 su ogni
riga. Una ogni riga sfalsata dalla superiore di una unit . gli ingressi a0 a1 a2 , viaggiano in
orizzontale su queste righe ma gli altri ingressi vanno in diagonale.
Cosa ci sar in questa generica celletta? Nella cellette ci sar una porta AND , che calcola il
prodotto parziale bj and ai .Se ho N^2 cellette ,avr N^2 prodotti parziali che devono essere
sommati fra di loro.
Per sommarli introduco nella celletta un full adder. Questo , somma il prodotto parziale con altri
due segnali uno che viene alla destra della cella e uno che viene dalla parte superiore della cella
stessa.
Visivamente queste celle sono
posizionate cosi come erano
posizionati i termini prodotti parziali
di 4. Devo avere cura di sommare
termini dello stesso peso.
Vediamo una struttura che realizza la somma dei prodotti parziali con tecnica carry save che
abbiamo visto prima :
Ottengo in uscita i bit significativi direttamente mentre , per le altre coppie di bit di peso omologo,
esse devono essere sommate nel VMA in maniera analoga nel caso dell addizionatore multi
operando carry save.
Le celle elementare sono le stesse ma abbiamo lelemento in pi ovvero il VMA addizionatore che
non cera e che ora compare. Qual il ritardo di questo sistema? Dobbiamo attraversare N
blocchi per avere gli ingressi del VMA quindi il ritardo pari a N Tb + VMA ritardo.
Questo un
esempio del
possibile cammino
critico. Le celle le
attraverso in
diagonale o in
verticale tanto
comunque sono
sempre N per
ottenere gli
operandi del VMA.
Il VMA opera su 2
ingressi che sono
da N bit. Luscita
complessiva 2n
bit. Se faccio
questo ADD a
propagazione del
riporto il ritardo
proporzionale a N ,
quindi il ritardo di questo va con 2N. avremmo gi un miglioramento rispetto alla struttura a matrice
di prima dove cera 3n. il miglioramento massimo l abbiamo se anzich carry ripple mettiamo
addizionatore veloce.
Seconda formula , predomina il fattore NTB.
Con questo tipo di circuito riesco a realizzare contemporaneamente una modifica : un
moltiplicatore accumulatore. Un circuito che calcola al tempo stesso a per b e la somma. A*B +
C.
Cio utile perch calcola somma e prodotto nello stesso tempo nel quale calcolerei solo il prodotto
: la somma ci viene gratis.
Se riprendo la struttura carry save di prima osservo che sulla prima riga e anche su due celle a
sinistra diagonale , ci sono ingressi posti a zero che non servono , inutilizzati. Nel caso del
moltiplicatore accumulatore , posso sfruttare questi ingressi per sommare la parola C come in
slide 12 :
In questo modo il mio sistema calcola prodotto e somma e la complessit esattamente la stessa.
I moltiplicatori sono importanti nel calcolo di operazioni signal processing. Spesso devono operare
a frequenze di clock molto elevate. Abbiamo visto a suo tempo che per aumentare la f di clock di
un sistema si pu usare la tecnica del pipelining : essa spezza il cammino critico quando si hanno
pi blocchi combinatori in cascata introducendo 2 registri in grigio scuro dellesempio :
Il ritardo si riduce perch il ritardo massimo combinatorio nel primo caso la somma nel secondo
quello che gioca il massimo di quei 3 ritardi. Si pu avere un miglioramento che viene pagato in
latenza perch luscita non disponibile immediatamente ma ci vogliono pi cicli di clock per avere
luscita.
Questa techica efficace se blocchi FGH hanno lo stesso ritardo. Per spezzare in maniera
uniforme il ritardo.
Vediamo se riesco ad applicare la tecnica al moltiplicatore carry save : devo ricostruire la struttura
iniziale ovvero tanti blocchi combinatori uno dietro l altro , inserisco tagli per spezzare il cammino
dei dati e dove ci sono i tagli inserisco i registri di pipelining.
Per realizzare correttamente e il pipelining del moltiplicatore dobbiamo riconduci a quella
struttura :
Nella struttura di partenza in 12 non ovvio perch alcuni dati piovono da sopra ( B e C) altri
arrivano a met ( a1 , a2 ) apparentemente non seguono quella struttura in cascata vista prima.
Per ricondurci , dobbiamo fare operazioni su questo schema 12 altrimenti il risultato scorretto.
Riporto tutti i segnali di ingresso da una stessa parte come in slide . Devo riportare sopra
perch e gi ci stanno. Lo stesso per . Una prima modifica di riportare in 14 tutti i
segnali sopra. Posso pensare di inserire un registro di pipeline usando taglio in ---------- spezza in
due il flusso dei dati e ogni volta in cui linea orizzontale interseca segnale metto un registro di
pipeline , registri che sono segnati con dei pallini neri .
Quanti cicli per risultato? 5 cicli ( considerando anche ingresso).
Quale il ritardo del circuito? Vogliamo cio sapere la F di clock al quale si pu far operare
questo sistema. Bisogna vedere cosa c tra registro e registro successivo. Vediamo che in questi
primi tagli , tra un registro e laltro c un singolo blocco dove c nd e full adder. Questo ritardo lo
stesso in questi primi 3 tagli riportati. Nellultimo taglio trovo il VMA tra registro e suo successivo. Il
periodo di CK allora come lo stimo ?
Questa formula mi da il periodo del CK. Nel massimo normalmente vince Tvma perch il ritardo
del singolo blocco non compete con un ritardo di un addizionatore a N bit. Da questo punto di vista
, questo pipeline stato fatto in maniera perfetta o migliorare? Nel caso migliore , tanti blocchi in
cascata sono in grado di spezzare in modo che ho ritardo fra i vari blocchi uguale. In questo caso
ho che il ritardo del blocco una frazione del ritardo del VMA , non ha senso spezzare in
maniera cosi fine
Posso eliminare la seconda e la terza linea di taglio in modo da lasciare 3 registri : registro iniziale
, registro VMA e quello finale. Se levo queste due linee come cambia la formula di prima? Al posto
di tb avrei 3tb , magari dello stesso ordina di grandezza + Tvma , la freq di CK non la modifico ma
risparmio registri e riduco la latenza.
Se voglio salire ancora in fequenza posso pensare di introdurre pipelining nel VMA. VMA
pipelined. Dobbiamo allora mettere anche registri su uscite accanto a VMA per bilanciare le
latenza sulluscita Y finale.
Osservazione importante: il risultato finale del nostro prodotto sar su 6 bit, quindi nelleffettuare
questa operazione bisogna stare attenti a
rappresentare questi due termini negativi
sui 6 BIT complessivi!!!
Ricordiamo che il numero di bit del
prodotto finale ovviamente la somma
del numero di bit dei due termini.
Lestensione in segno necessaria.
Per i termini col segno negativo quindi,
complementiamo tutti i bit, aggiungiamo
1 e poi estendiamo in segno:
Ora, dopo aver complementato i due termini negativi, non mi resta che sommare tutto.
Osservazione: la sottrazione di questi 2 termini la posso ottenere anche come in slide, in cui ho
messo da parte laggiunta degli 1 dellestensione e l1 che si deve sommare ogni volta che
complemento. Si noti che i termini sono costanti!! E allora, possiamo sommare a parte questo
fattore correttivo che sar costante.
Fatto ci:
in definitiva sommer tutto e aggiunger questa costante alla fine che tiene conto della
complementazione e dellestensione in segno!!! In pratica il prodotto viene ottenuto semplicemente
sommando questi termini e aggiungendo quel fattore correttivo finale. Il vantaggio che alcuni di
questi termini vengono realizzati con delle NAND e non AND, in pi ovviamente devo sommare
una costante.
Posso ordinare i vari termini per vedere il tutto su 4 righe. Questa rappresenta la matrice dei
prodotti parziali, ovvero linsieme dei termini per realizzare il prodotto di due numeri con segno.
Il circuito corrispondente uguale a quello di prima, ma alcune celle INVECE DELLA AND hanno
la NAND! In pi devo sommare il termine costante. Osservando il termine costante, si scoprir che
questo avr soltanto 2 cifre diverse da 0. Se avessi fatto il calcolo su 12 bit, avrei avuto sempre
solo 2 bit diversi da 0!!! Il peso di questi termini : uno la cifra pi significativa del VMA, laltro il
riporto entrante. Si noti che il VMA aveva sia il MSB che il riporto entrante LIBERI (quando avevo
numeri unsigned infatti questi erano posti a massa). Quindi laggiunta di questa costante ulteriore
non comporta nessun aggravio!!
Il moltiplicatore signed solo una VARIANTE dellunsigned, ha allora la stessa complessit e non
richiede nessun aggravio particolare di hw.
Come esercizio, pensiamo a quale potrebbe essere la struttura di un moltiplicatore in cui uno dei
due operandi
unsigned e laltro
signed! Sar unaltra
variante. Si noti che
la struttura del
moltiplicatore non
sempre la stessa, per
decidere quale
architettura
implementare devo
sapere a priori quali
numeri trattare!
La velocit del nostro circuito rimane vincolato alla velocit del VMA e a NTb, dove Tb il ritardo
del singolo blocco e N c perch ho il riporto che si propaga in N blocchi. Nella struttura carry-
save infatti il riporto si propaga in verticale e orizzontale. Il ritardo del VMA lo facciamo logaritmico
usando gli adder veloci studiati, il collo di bottiglia rimane allora la propagazione del riporto nei
blocchi. Rimane quindi una funzione lineare di N. importante avere dei moltiplicatori veloci,
sono state sviluppate tecniche per avere moltiplicatori con ritardo funzione del log(N).
Consideriamo di nuovo la moltiplicazione tra numeri unsigned. Le stesse tecniche possono essere
adoperate anche con i signed, le differenze sono minimali. Ovviamente il punto su cui agire il
termine NTb. Consideriamo un esempio di
moltiplicatore 5x5. Rappresentiamo i
termini con puntini. Linsieme di puntini lo
chiamo matrice dei prodotti parziali.
Laltezza il numero di righe della matrice,
pari proprio al numero di bit dei numeri.
Applico una serie di trasformazioni sulla
matrice ottenendo matrici equivalenti nel
senso che poi sommandole ottengo lo stesso risultato.
Moltiplicatore di Wallace
difficile fare i conti in generale: per, si vede che passando da un livello al succesivo, riduco
laltezza della matrice di un fattore 3/2 perch il full-adder un compressore 32! (considerazione
euristica!!) In generale allora il ritardo sar come in slide. Nota ke K funzione del numero di bit
secondo un logaritmo in base 3/2! Abbiamo allora un ritardo ke cresce secondo un log di N (in
base 3/2). Il moltiplicatore di Wallace molto pi veloce di quello a matrice, linconveniente che
tende ad usare un numero eccessivo di half-adder!! Esistono delle tecniche pi efficienti che
mantenendo lo stesso ritardo, riducono il numero di half-adder utilizzati per realizzare il
moltiplicatore.
In generale, il tempo di propagazione :
Moltiplicatore Dadda
Nel confronto si vede che la velocit la stessa, larea diversa: il Dadda pi piccola. Daltra
parte, il VMA ha 8 bit nel Dadda ed pi complicato. Esistono tantissimi algoritmi che sono varianti
che cercano di ottenere il meglio dai circuiti!! In ogni caso comunque, il ritardo funzione del
logaritmo di N.
Facendo un confronto con un moltiplicatore carry-save, questultimo non richiede meno hardware
rispetto a quello ad albero, facendo i conti sulle aree il carry-save in vantaggio rispetto al Dadda,
pi piccolo!
I moltiplicatori ad albero sono pi veloci degli array carry-save, senza richiedere un particolare
aumento di hardware.
La differenza di velocit diviene sempre pi grande al crescere del numero di bit da sommare
I moltiplicatori ad albero possono essere facilmente modificati in modo da realizzare moltiplicatori-
accumulatori o per moltiplicare numeri in complementi alla base.
Lunico vantaggio dei moltiplicatori array carry-save la regolarit, che consente di realizzare
circuiti full-custom molto compatti.
Con metodologie basate su celle standard, conviene sempre adoperare strutture ad albero.
I moltiplicatori ad albero in generale non sono pi grandi di quelli a matrice ma sono molto pi
veloci. Quando un moltiplicatore viene sintetizzato e realizzato con celle standard, in pratica viene
SEMPRE REALIZZATO CON UNA STURTTURA AD ALBERO perch non ho vantaggi con una
struttura a matrice, larea sempre la stessa ma molto pi veloce!
Allora perch li abbiamo studiati? Perch se dobbiamo realizzare moltiplicatori in maniera custom,
proprio perch le strutture carry-save sono regolari, io mi progetto la cella e poi faccio larray delle
celle! Nella struttura ad albero non ho regolarit, i full adder sono piazzati un po ovunque! Se li
devo progettare a mano ha quindi senso la struttura carry-save.
Se uso il vhdl, verr realizzata una struttura ad albero perch pi efficiente. I moltiplicatori ad
albero sono quindi vincenti. Lunico vantaggio delle carry-save la regolarit dal punto di vista di
layout.
Che cambia se devo fare un moltiplicatore di numeri con segno o un moltiplicatore-addizionatore?
Per esempio se volessi fare: Y=A*B+C. Posso farlo con una struttura ad albero?
semplice, basta aggiungere unaltra riga nella matrice dei prodotti parziali dove ci sommo proprio
il termine C. se devo fare Y=A*B+C+D aggiungo unaltra riga per D.
Se devo fare A*B con A e B in complementi alla base, signed, cosa cambia?
Alla fine comunque devo sommare dei termini, in pratica ci saranno dei termini con delle AND e
altri con delle NAND. I famosi 1 da sommare per il complemento, sono delle semplici costanti da
sommare.