Qui trovi il documento tecnico completo.

SECONDA UNIVERSITA’ DEGLI STUDI DI NAPOLI
Facoltà di Ingegneria
Corso di Laurea Magistrale in Ingegneria Informatica
Corso di Elettronica dei Sistemi Digitali
Progetto
Progettazione di un IC per la risoluzione di disequazioni di primo grado in
Pipeline
Docente
Prof. Aldo Minardo
Studenti
Andrea Cirillo Matr. A18000046
Pasquale Cirillo Matr. A18000045
Anno Accademico 2011-2012
1
Introduzione
Nel corso del progetto ci si è rivolti alla progettazione e alla simulazione di un IC per la
risoluzione di disequazioni di primo grado sfruttando la tecnica della Pipeline. L’obiettivo
è quello di ottenere, dati tre ingressi A, B, C su quattro bit, il risultato delle disequazioni:
A+B ≤C
A+B ≥C
(1)
Il layout del sistema è stato realizzato seguendo un approccio modulare per cui, di
seguito, si procederà illustrando singolarmente il funzionamento dei diversi dispositivi
per passare, infine, alla composizione degli stessi. In particolare, i dispositivi sono stati
progettati in tecnologia CMOS da 0.25µm con 6 livelli di metal con l’ausilio del software
Microwind 3.1 : esso consente al progettista di simulare e progettare un circuito integrato
a livello fisico.
La struttura in Pipeline è stata progettata con la tecnologia a Pass-Transistor seguendo lo schema generale riportato in Figura 1, dove la logica combinatoria contrassegnata
con F corrisponde ad un Adder Ripple Carry a 4 bit realizzato sfruttando la tecnologia
a Gate di Trasmissione, mentre quella contrassegnata con G corrisponde ad un Comparatore a 4 bit. In realtà, alla struttura basilare illustrata sono state apportate alcune
modifiche che verrano descritte nei paragrafi successivi.
2
Invertitore
La Figura 2(a) mostra lo schema circuitale di un invertitore CMOS statico. Il suo funzionamento è facilmente intuibile a partire dal modello a interruttore del transistor MOS
mostrato in Figura 2(b). In prima approssimazione, il transistor può essere rappresentato da un interruttore con una resistenza infinita quando è aperto (|VGS | < |VT |) e una
resistenza finita quando è chiuso (|VGS | > |VT |). Ciò si traduce nella seguente interpretazione dell’invertitore: se Vin ha un valore logico alto uguale a VDD , il transistore NMOS è
attivo e il transistor PMOS è interdetto. In queste condizioni esiste un cammino diretto
tra l’uscita e la massa del circuito; a regime l’uscita assume una tensione Vout = 0 V .
Figura 1: Pipeline
1
(a)
(b)
Figura 2: Invertitore statico CMOS: (a) Schema circuitale, (b) rappresentazione
dell’invertitore mediante interruttori.
Figura 3: Analisi della risposta dinamica dell’invertitore CMOS
Invece, quando la tensione di ingresso ha un valore logico basso (0 V ) i transistor NMOS
e PMOS sono rispettivamente spento e acceso; l’uscita è connessa attraverso il PMOS
all’alimentazione e assume un valore di tensione Vout = VDD . Questa porta realizza la
funzione logica NOT.
Utilizzando lo stesso modello ad interruttore del transistore MOS, è possibile fare
un’analisi qualitativa del comportamento dinamico della porta logica (Figura 3). La risposta dinamica è dominata principalmente dalla capacità di uscita CL , che è composta
dalle capacità parassite dei drain dei due transistor, dalla capacità delle piste di interconnessione e dalle capacità di ingresso delle porte logiche che l’invertitore sta pilotando.
Supponendo che la tensione di ingresso commuti istantaneamente e considerando una
transizione basso-alto, avremo che la risposta dinamica è determinata dal tempo che la
porta impiega a caricare la capacità CL attraverso la resistenza Rp . La dipendenza della
resistenza e della capacità dalla tensione Vout può essere eliminata rimpiazzando entrambi gli elementi con i loro corrispondenti lineari. In questo modo, il calcolo del tempo di
propagazione del circuito si semplifica in un’analisi di una rete RC. Per cui:
2
Figura 4: Invertitore statico CMOS: Layout realizzato in Microwind 3.1
tpHL = 0, 69Reqn CL
tpLH = 0, 69Reqp CL
tpHL + tpLH
Reqn + Reqp
= 0, 69CL
tp =
2
2
(2)
Per avere che i tempi di propagazione di una porta logica siano gli stessi per entrambe
le commutazioni del segnale di ingresso è necessario realizzare i due transistor in modo
che abbiano approssimativamente lo stesso valore di resistenza equivalente. A tale scopo,
la realizzazione riportata nella Figura 4 mostra un invertitore composto da un transistor
1.5
PMOS con un rapporto di aspetto W
L = 0.25 e da un transistor NMOS con un rapporto
0.5
di aspetto W
L = 0.25 . Considerando un carico sul nodo di uscita di 0.01 pF , la porta
logica mostra un tempo di ritardo per le due transizioni molto simili tra loro (Figura 5):
per la transizione basso-alto la porta mostra un ritardo di circa 22 ps, mentre per la
transizione alto-basso il ritardo è di circa 34 ps.
3
Figura 5: Invertitore statico CMOS: test del dispositivo
3
Il sommatore
L’addizione è l’operazione aritmetica usata più frequentemente e costituisce spesso il fattore limitante per la velocità computazionale di un sistema. Dunque, l’ottimizzazione
accurata dei blocchi sommatori riveste il ruolo di massima importanza nel progetto di
un’unità di elaborazione. L’ottimizzazione procede sia a livello logico sia a livello circuitale. A livello logico è possibile riorganizzare la struttura delle varie relazioni booleane
in modo da ottenere un circuito più piccolo e veloce. D’altra parte, a livello di circuito
è possibile manipolare le dimensioni dei transistor e la topologia delle porte logiche in
modo tale da ottimizzare ciascun elemento che compone il sommatore. La Tabella 1
mostra la tabella di verità di un sommatore binario (full adder ): A e B sono i due bit
da sommare, Ci è il riporto in ingresso, S rappresenta il risultato della somma e Co è
il riporto di uscita risultante dalla somma A + B. Le relazioni booleane che legano gli
ingressi A, B e Ci alle uscite S e Co si possono esprimere come segue:
S = A ⊕ B ⊕ Ci
= AB̄ C̄i + ĀB C̄i + ĀB̄Ci + ABCi
(3)
Co = AB + BCi + ACi
Molto spesso è utile dal punto di vista dell’implementazione definire i segnali di
somma e riporto di uscita S e Co in funzione di tre segnali intermedi: G (Generate),
D (Delete) e P (Propagate). G = 1 significa che il riporto in uscita (Co ) è generato,
cioè posto a 1 indipendentemente dal valore di Ci ; D = 1 rappresenta il caso opposto in
4
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
Ci
0
1
0
1
0
1
0
1
S
0
1
1
0
1
0
0
1
Co
0
0
0
1
0
1
1
1
Tabella 1: Tabella di verità di un sommatore binario
cui Co è posto a 0 indipendentemente da Ci ; P = 1 significa che il valore del riporto di
uscita sarà uguale a quello di ingresso, cioè che il valore del riporto all’ingresso Ci viene
propagato verso l’uscita Co . Dando uno sguardo alla tabella di verità, possiamo ricavare
le espressioni booleane che legano i segnali G, D e P ai valori logici dei bit in ingresso A
e B:
G = AB
D = ĀB̄
(4)
P =A⊕B
Da queste relazioni si possono ricavare S e Co in funzione di P e G:
Co (G, P ) = G + P Ci
S (G, P ) = P ⊕ Ci
(5)
Notiamo che i segnali G e P sono funzione dei solo ingressi A e B, ma non del
segnale di riporto Ci . Un sommatore a N bit può essere realizzato nel modo più semplice
mettendo in cascata N blocchi full-adder, connettendo l’uscita del riporto del blocco
k − 1 (Co,k−1 ) al riporto di ingresso del blocco k (Ci,k ), con k = 1, 2, . . . N − 1, mentre il
riporto di ingresso del primo blocco (Ci,0 ) è costante a 0. Questo tipo di architettura è
detta sommatore ripple-carry (sommatore a propagazione del riporto), poichè il riporto
si propaga da uno stadio all’altro. Il tempo di ritardo del circuito dipende dal numero di
stadi logici che devono essere attraversati che a sua volta è funzione della configurazione
dei bit in ingresso: per alcune coppie di ingressi non vi è alcuna propagazione, mentre per
altre coppie il riporto deve propagarsi attraverso l’intera catena dal bit meno significativo
al bit più significativo. Il tempo di propagazione di questa struttura è definito come il
ritardo calcolato in condizioni di caso peggiore tra tutte le combinazioni possibili degli
ingressi. Nel sommatore ripple-carry, il caso peggiore si verifica quando il riporto è
generato nel bit meno significativo e propagato lungo tutta la catena fino al bit più
5
Figura 6: Circuito a gate di trasmissione che realizza un full-adder con tempi di
propagazione simili per il segnale di somma e riporto
significativo. Il valore del riporto è usato, infine, nell’ultimo stadio per calcolare il bit
più significativo della somma. Il tempo di ritardo è, quindi, proporzionale al numero N
di bit delle parole di ingresso ed è approssimativamente dato da:
tadd = (N − 1) tC + tS
(6)
dove tC è il tempo per il calcolo del riporto (carry) da Ci a Co e tS quello della somma
da Ci a S.
Un full-adder può essere costruito usando multiplexer e porte logiche XOR. Sebbene
questo approccio non sia facilmente praticabile in logica complementare, diventa abbastanza semplice usando la logica a gate di trasmissione. Una possibile implementazione di
un full-adder basato su questa tecnica è mostrato nella Figura 6 e impiega 24 transistor.
Questa realizzazione fa uso dei segnali intermedi di propagazione (P ) e generazione (G)
del riporto presentati nelle (4). Il segnale P , che deriva dall’operazione XOR tra A e B, è
usato per selezionare il valore diretto o negato del riporto in ingresso come nuovo valore
della somma. Inoltre, in funzione del valore del segnale P , il riporto in uscita assume
il valore del riporto in ingresso oppure quello dell’ingresso A (in alternativa è possibile
usare anche B). Una delle caratteristiche più interessanti di questo tipo di realizzazione
è la simmetria tra i tempi di propagazione della somma e del riporto in uscita.
Seguendo un approccio modulare verranno di seguito illustrate le singole parti che
compongono il sommatore partendo dall’elemento principale, il gate di trasmissione, e
procedendo gradualmente alla composizione delle funzioni più complesse utilizzate per il
calcolo della somma e del riporto.
6
Figura 7: Gate di trasmissione CMOS
3.1
Il gate di trasmissione
Il gate di trasmissione fonda il suo funzionamento sulle proprietà complementari dei
transistor NMOS e PMOS: i dispositivi NMOS trasmettono bene gli 0 logici e male gli
1; invece, i dispositivi PMOS trasmettono correttamente gli 1 logici, ma male gli 0. Il
gate di trasmissione sintetizza in un unico componente le proprietà migliori di entrambi
i transistor, combinando un NMOS e un PMOS in parallelo come mostrato in Figura 7.
I segnali di controllo, C e C̄, sono complementari: quando C = 1, entrambi i MOSFET
sono attivi, permettendo al segnale di passare attraverso il gate di trasmissione, per cui:
A = B se C = 1
Al contrario, con C = 0, entrambi i transistor sono interdetti e il gate di trasmissione
diventa un circuito aperto tra A e B.
Consideriamo il processo di carica del nodo B da 0 a VDD attraverso il gate di
trasmissione in figura Figura 8a. Il nodo A è mantenuto a VDD e il gate di trasmissione è
abilitato (C = 1 e C̄ = 0). Se fosse presente il solo dispositivo NMOS, il nodo B sarebbe
caricato solamente fino a VDD − VT n , cioè fino al punto in cui il transistor NMOS si
spegne. Tuttavia, essendo presente e acceso anche il transistor PMOS (VGSp ≈ −VDD ),
l’uscita viene caricata fino a VDD . La Figura 8b mostra il caso opposto, cioè, la scarica
del nodo B da VDD a 0. Il transistor PMOS da solo può scaricare il nodo B fino a
|VT p | e poi si spegne. Il transistor NMOS in parallelo rimane comunque acceso (essendo
VGSn = VDD ) e consente di scaricare completamente il nodo B a massa. Sebbene il gate
di trasmissione richieda due transistor e due segnali di controllo, esso consente di ottenere
l’escursione logica massima tra massa e alimentazione.
Nella Figura 9 è riportato il layout del gate di trasmissione
implementato utilizzando
1.5
un transistor PMOS con un rapporto di aspetto W
=
e
un transistor NMOS con
L
0.25
W
0.5
un rapporto di aspetto L = 0.25 . In queste condizioni, considerando una capacità
di carico sul nodo di uscita pari a 0.01 pF , il tempo di propagazione per la transizione
basso-alto è di circa 42 ps, mentre per la transizione alto-basso è di circa 46 ps. Dalla
Figura 10 è possibile notare come sulla commutazione basso-alto del segnale di controllo
Clock collegato al Gate del transistor NMOS (e la corrispondente transizione alto-basso
del segnale ∼Clock collegato al terminale Gate del PMOS) l’impulso sull’ingresso DataIn
si propaghi sull’uscita DataOut.
7
Figura 8: Il gate di trasmissione fornisce un’escursione logica completa tra massa e
alimentazione
Figura 9: Layout del Gate di trasmissione realizzato in Microwind 3.1
3.2
Generazione del segnale di propagazione del riporto
Come descritto precedentemente, il segnale di propagazione del riporto è calcolato applicando l’operazione XOR tra il segnale A e B. La funzione logica XOR è facilmente
implementabile con la tecnica a gate di trasmissione: la soluzione della Figura 6 fa uso
di due gate di tramissione e due invertitori in modo da ottenere, oltre al segnale di
propagazione P , anche il segnale P̄ . Analizziamo, ora, il comportamento del circuito
considerando l’ingresso A = 1 (Ā = 0) e B = 0: il gate di trasmissione in alto risulta
essere spento, per cui la tensione al nodo P è imposta dal primo invertitore pilotato
dall’ingresso B (il segnale Ā collega il transistor NMOS a massa) ed è uguale al valore
logico 1; il gate di trasmissione in basso è acceso, mentre il secondo invertitore risulta
essere spento, per cui il nodo P̄ verrà scaricato dal gate di trasmissione e portato al
valore logico 0. Quando l’ingresso B commuta da 0 a 1, l’invertitore in alto pone il nodo
P al valore logico 0 e il gate di trasmissione in basso traferisce il valore logico alto sul
nodo P̄ . Analogamente, le stesse analisi possono essere effettuate quando l’ingresso A è
8
Figura 10: Gate di trasmissione: test del dispositivo
uguale a 0.
Nella Figura 11 è riportato il layout del circuito implementato, mentre nella Figura 12
è riportato un test che illustra le analisi effettuate precedentemente.
3.3
Circuiti per la somma e per il riporto
L’implementazione di un sommatore con gate di trasmissione prevede tempi di propagazione simili per il segnale di somma e riporto perchè entrambi i segnali attraversano al
massimo un gate di trasmissiione e un invertitore. Il segnale P , che deriva dall’operazione
XOR tra A e B, è usato per selezionare il valore diretto o negato del riporto in ingresso
come nuovo valore dell’uscita della somma. Inoltre, in funzione del valore del segnale P ,
il riporto di uscita assume il valore del riporto in ingresso oppure quello dell’ingresso A.
Il circuito che realizza tutto ciò, è formato da due multiplexer che realizzano le funzioni
logiche seguenti:
S̄ = (Ci · P + C̄i · P̄ )
C̄o = (C̄i · P + Ā · P̄ )
Nelle seguenti condizioni di funzionamento:
9
(7)
Figura 11: Layout del circuito per la generazione del segnale di propagazione realizzato
in Microwind 3.1
• Ci = 1 (C̄i = 0)
• A = 1 (Ā = 0)
si ha: quando P = 1 il secondo gate di trasmissione (dall’alto nella Figura 6) è acceso
e lascia passare il valore in ingresso Ci che, dopo essere stato negato dall’invertitore in
cascata, rappresenterà il nuovo valore della somma; il nuovo valore per il riporto di uscita
sarà ottenuto negando il valore di C̄i in ingresso al quarto gate di trasmissione (in basso
nella Figura 6). Nella Figura 13 è riportato il layout del circuito che calcola la somma
e il riporto di uscita, mentre nella Figura 14 è mostrato un test che sintetizza l’analisi
appena effettuata.
3.4
Full-Adder a 1 bit
Il Full-Adder per la somma di due operandi ad un bit viene ottenuto dalla composizione
dei circuiti analizzati nelle sezioni precedenti. La Figura 15 mostra il layout del dispositivo, mentre la Figura 16 mostra un test realizzato inserendo in ingresso al sommatore
dei segnali variabili per A, B e Cin : in particolare la simulazione mette in evidenza come
i tempi di propagazione per il segnale di somma e di riporto uscente siano molto simili
tra loro. Da come è possibile notare il dispositivo risponde seguendo il comportamento
atteso: quando i tre ingressi hanno un valore logico alto, sia il segnale di somma che di
riporto uscente assumono un valore logico alto, mentre quando i tre ingressi sono bassi
sia la somma che il segnale di riporto uscente commutano da 1 a 0.
10
Figura 12: Circuito per la generazione del segnale P: test del dispositivo
3.5
Full-Adder a 4 bit
Un sommatore a 4 bit ripple carry (propagazione del riporto) è ottenibile collegando
quattro full-adder a 1 bit in cascata connettendo l’uscita del riporto del blocco k − 1
(Co,k−1 ) al riporto di ingresso del blocco k (Ci,k ). Come espresso dalla (6), il tempo di
ritardo è proporzionale al numero N di bit delle parole di ingresso. Precedentemente
è stato accennato che nel sommatore ripple carry il caso peggiore si verifica quando il
riporto è generato nel bit meno significativo e propagato lungo tutta la catena fino al bit
più significativo e, inoltre, il valore del riporto è usato nell’ultimo stadio per calcolare il
bit più significativo della somma. Un’analisi sul caso peggiore richiede, quindi, che sia
A0 che B0 siano uguali a 1, dato che il riporto in ingresso alla catena è sempre 0, mentre
tutti gli altri stadi devono essere in stato di propagazione (uno e solo uno tra Ai e Bi deve
essere 1). Infine, è necessario che l’uscita della somma del bit più significativo esegua
una transizione: se assumiamo che il valore iniziale di SN −1 sia 0, esso dovrà commutare
a 1. A tale scopo è sufficiente che AN −1 e BN −1 siano entrambi alti o bassi in modo da
ottenere un valore alto della somma quando arriva un riporto con valore 1. Ad esempio,
i seguenti valori di A e B danno luogo al caso peggiore per la somma di due numeri interi
a 4 bit (LSB a destra):
A: 0001
B: 0111
Per misurare il tempo di propagazione al caso peggiore è sufficiente mantenere costanti
tutti i bit ad eccezione di A0 che può essere fatto commutare tra 0 e 1. La Figura 17
11
Figura 13: Layout del circuito per il calcolo di somma e riporto di uscita realizzato in
Microwind 3.1
mostra il sommatore implementato, mentre nella Figura 18 è riportata la simulazione
effettuata per il calcolo del ritardo di propagazione. Considerando i valori di A e B
riportati nella (3.5) si ha:
tpLH = 944 ps
tpHL = 588 ps
tpLH + tpHL
tp =
= 766 ps
2
(8)
Il ritardo di propagazione calcolato sarà utilizzato, in seguito, per calcolare la frequenza
massima a cui il circuito completo in pipeline dovrà lavorare.
4
Il comparatore
Un comparatore digitale o comparatore magnitudo (magnitude comparator) è un dispositivo elettronico che, presi due numeri in ingresso in formato binario, determina se un
numero è maggiore, minore o uguale all’altro. Il comparatore è uno dei dispositivi più
usati nelle central processing units (CPU) e nei microcontrollori. Un comparatore è mostrato nella Figura 19 e si può notare come l’uscita sia usualmente una variabile di tre
bit.
12
Figura 14: Circuito per il calcolo di somma e riporto di uscita: test del dispositivo
Ai
0
0
1
1
Bi
0
1
0
1
Ei
1
0
0
1
Tabella 2: Tabella di verità per la funzione di uguaglianza
Per semplicità, la progettazione del dispositivo, come per il sommatore, è avvenuta
seguendo un approccio modulare, ossia è stato prima progettato un comparatore ad 1
bit implementando la sola funzione di uguaglianza e poi, usando tale modulo come componente base, è stato progettato il comparatore di nibble (4 bit) completo. Le funzioni
G (A > B), E (A = B) e L (A < B) sono state ricavate utilizzando le corrispondenti tabelle di verità e mediante la semplificazione delle funzioni logiche tramite la tecnica delle
Mappe di Karnaugh. Viene riportato di seguito un esempio per il calcolo delle funzioni
G, E e L basato su un comparatore a 2 bit (l’estensione al caso generale risulta essere
alquanto semplice). Un comparatore a 2 bit è un dispositivo con quattro ingressi (A0 , B0 ,
A1 , B1 ). Si può affermare che A = B solo se tutti i bit della stessa posizione sono uguali,
quindi Ai = Bi per ogni i. Dalla Tabella 2 si ricava, quindi, che E0 = A0 B0 + Ā0 B̄0 e che
E1 = A1 B1 + Ā1 B̄1 . Dire che A = B implica che Ai = B
i (Ei = 1), ossia
che E0 E1 = 1.
Per cui si ricava che la funzione E = A0 B0 + Ā0 B̄0 A1 B1 + Ā1 B̄1 . Notando che
13
Figura 15: Layout del Full-Adder a 1 bit realizzato in Microwind 3.1
Ai
0
0
1
1
Bi
0
1
0
1
Gi
0
0
1
0
Tabella 3: Tabella di verità per la funzione di maggioranza
(x ⊕ y) = (xy + x̄ȳ) e notando che:
Ei = Ai Bi + Āi B̄i ⇒
⇒ Ai B̄i + Āi Bi =
= Āi + Bi Ai + B̄i =
= Āi Ai + Āi B̄i + Ai Bi + Bi B̄i =
= Ai Bi + Āi B̄i
si può pensare di implementare la funzione Ei con: la cascata di due invertitori che
negano gli ingressi Ai e Bi ; due porte AND a due ingressi che effettuano la AND logica
Ai B̄i e B̄i Ai ; una NOR a due ingressi che effettua la somma Ai B̄i + Ai B̄i .
A > B se A1 > B1 o A1 = B1 AN D (A0 > B0 ). Dalla Tabella 3 si può ricavare la
funzione logica G come:
14
Figura 16: Full-Adder a 1 bit: test del dispositivo
G = A1 B̄1 + E1 A0 B̄0 = Y1 + E1 Y0
Dualmente A < B se B1 > A1 o A1 = B1 AN D (B0 > A0 ), ossia:
L = Ā1 B1 + E1 Ā0 B0
Le funzioni G, E e L, come detto, sono facilmente ricavabili anche per il comparatore
a 4 bit seguendo le stesse considerazioni fatte. La Figura 20 mostra il comparatore a 4
bit realizzato. Il dispositivo ha otto ingressi (A3 − A0 , B3 − B0 ) e restituisce il risultato
su 3 bit. A = B se A3 = B3 , A2 = B2 , A1 = B1 , A0 = B0 per cui la funzione logica E
può essere facilmente espressa come:
E = E3 E2 E1 E0
Le funzioni logiche G e L sono, invece:
G = A3 B̄3 + E3 A2 B̄2 + E3 E2 A1 B̄1 + E3 E2 E1 A0 B̄0
L = Ā3 B3 + E3 Ā2 B2 + E3 E2 Ā1 B1 + E3 E2 E1 Ā0 B0
La Tabella 4 riporta la tabella di verità del dispositivo completo, mentre nella Figura 21
è mostrato il layout realizzato. L’analisi effettuata tramite il test di Figura 22 mostra
il comportamento del comparatore a 4 bit quando esso viene sollecitato dai seguenti
ingressi: A = C000, B = 0000 (LSB a destra) dove C indica che il valore varia tra 0
e 1. Trascurando il transitorio iniziale, si può notare come i segnali E0 , E1 , E2 e E3
hanno una transizione 0-1 via via sempre più lenta: ciò è causato dalla struttura delle
interconnesioni la cui lunghezza cresce (da sinistra a destra nella Figura 21 - E0 vede un
carico minore, mentre E3 vede un carico maggiore) causando un aumento della capacità
15
A3 , B3
A3 > B3
A3 < B3
A3 = B 3
A3 = B 3
A3 = B 3
A3 = B 3
A3 = B 3
A3 = B 3
A3 = B 3
A2 , B2
X
X
A2 > B2
A2 < B2
A2 = B2
A2 = B2
A2 = B2
A2 = B2
A2 = B2
A1 , B1
X
X
X
X
A1 > B1
A1 < B1
A1 = B1
A1 = B1
A1 = B1
A0 , B0
X
X
X
X
X
X
A0 > B0
A0 < B0
A0 = B0
A>B
H
L
H
L
H
L
H
L
L
A<B
L
H
L
H
L
H
L
H
L
A=B
L
L
L
L
L
L
L
L
H
Tabella 4: Tabella di verità per il comparatore 4 bit. H = High Voltage Level, L = Low
Voltage Level, X = Don’t Care.
parassita che diventa sempre più importante. Sulla commutazione 0-1 del segnale A3 ,
il dispositivo risponde commutando le uscite in modo che la funzione A = B risulti
falsa, mentre la funzione A > B diventa vera. In particolare, il ritardo di propagazione
t HL+t LH
= 489+323
ps = 406 ps che è un tempo
dell’uscita A = B risulta essere tp = p 2 p
2
inferiore al ritardo calcolato nel caso peggiore per il sommatore a 4 bit. Questa analisi
risulterà determinante per il calcolo della massima frequenza computazionale a cui potrà
lavorare il circuito in pipeline.
Verranno di seguito riportati alcuni dettagli implementativi utilizzati per la progettazione del comparatore a 4 bit in modo da ridurre le capacità parassite delle singole porte
logiche. Un esempio molto significativo è rappresentato dalla porta AND a 4 ingressi utilizzata per il calcolo della funzione di uguaglianza. La Figura 23 mostra come per ridurre
le capacità di diffusione siano state utilizzate diffusioni in comune sia per la connessione
in serie dei transistor NMOS sia per la connessione in parallelo dei transitor PMOS. Per
il secondo caso, le interconnessioni sono state realizzate utilizzando alternativamente i
contatti collocati tra le piste di polisilicio: il primo come contatto di alimentazione, il
secondo per l’uscita della porta, il terzo per l’alimentazione e così via.
5
Pipeline
La pipeline è una tecnologia utilizzata nell’architettura hardware dai microprocessori per
incrementare il throughput, ovvero la quantità di istruzioni eseguite in una data quantità
di tempo, parallelizzando i flussi di elaborazione di più istruzioni: essa aumenta lo sfruttamento delle risorse e il flusso di dati in uscita. Se si considera un blocco combinatorio
formato da tre funzioni logiche più o meno complesse e tra di esse si interpongono dei
registri che permettono di trattare i dati come un flusso continuo, il vantaggio rispetto all’approccio convenzionale risulta evidente. Il blocco combinatorio viene, in questo
modo, suddiviso in tre sezioni ciascuna delle quali ha un tempo di propagazione minore
rispetto alla logica originaria. Questo riduce effettivamente il valore del minimo periodo
16
di clock ammissibile:
Tmin,pipe = tc−q + max {tp,logic1 , tp,logic2 , tp,logic3 } + tsu
(9)
dove tc−q è il tempo di progazione dei registri, tsu è il tempo di setup dei registri e tp,logic1 ,
tp,logic2 , tp,logic3 sono i tempi di ritardo delle singole sezioni della logica combinatoria.
Un sistema pipeline può essere realizzato usando latch positivi e negativi a passtransistor al posto di registri edge-triggered. Ad esempio, nella Figura 24, la logica è stata
introdotta tra il latch master e quello slave in un sistema master-slave. I sistemi basati
su latch offrono maggiore flessibilità per la realizzazione di un pipeline e permettono di
ottenere prestazioni migliori. Quando i CLK e CLK sono non sovrapposti si ottiene il
corretto funzionamento pipeline: il dato in ingresso viene campionato in C1 sul fronte
di discesa di CLK e l’elaborazione del blocco logico F comincia; il risultato del blocco
logico F viene immagazzinato su C2 al fronte di discesa di CLK e quindi l’elaborazione
del blocco logico G comincia.
Nella particolare applicazione presentata in questo progetto, il precedente circuito
pipeline è stato leggermente variato: i pass-transistor lasciano passare un valore logico
degradato (VDD − VT n ) causando un consumo statico di potenza per i circuiti collegati
in cascata e comportando una degradazione dei margini di rumore; inoltre, la logica implementata per il sommatore e il comparatore è stata pensata per funzionare su valori
logici diretti e non negati, per cui i segnali di ingresso non possono essere prelevati dall’uscita degli invertitore riportati in Figura 24, ma devono essere ritenuti validi all’uscita
dei pass-transistor. L’idea sviluppata ha consentito il riutilizzo degli invertitori per pilotare un transistor PMOS di level restorer in modo da ripristinare il valore logico alto
(risolvendo in questo modo anche i problemi legati al consumo statico di potenza). Per
il corretto funzionamento del circuito, il transistor di level restorer deve essere dimensionato adeguatamente affinchè il pass-transistor possa, durante la fase di scarica, portare
la tensione sul proprio nodo di uscita ad un valore inferiore alla tensione di commutazione dell’invertitore. Avendo realizzato il pass-transistor con
minime, il level
dimensioni
0.50
restorer è stato realizzato con un rapporto di aspetto W
=
.
Nella
Figura 25 e
L
0.25
nella Figura 26 sono riportati le simulazioni del pass-transistor senza e con level restorer:
nel secondo caso il segnale p in uscita dal pass-transistor recupera la massima escursione
logica a discapito di una piccola perdita di prestazioni. Inoltre, quando la tensione di
controllo clock del pass-transistor assume il valore logico basso, l’uscita p assume valori
di tensione diversi da 0 a causa di correnti di sottosoglia del transistor NMOS. Ciò comporta delle correnti di cammino diretto tra alimentazione e massa nell’invertitore posto
in cascata causando un consumo statico di potenza.
Sulla base delle considerazioni fatte nei paragrafi precedenti, il minimo periodo di
clock usato per il controllo delle funzioni logiche in pipeline viene imposto dal ritardo di
propagazione del sommatore che risulta essere più elevato del tempo di propagazione del
comparatore (tali tempi di propagazione sono stati calcolati considerando i due dispositivi
singolarmente e ponendo sul nodo di uscita una capacità parassita di 0.01 pF ). Quando,
invece, i due dispositivi vengono inseriti all’interno del circuito completo, essi vedranno
un carico maggiore dovuto ai parassiti delle piste di interconnessione aggiuntive e al
17
fanout più elevato. Il periodo minimo di clock è stato tarato sulla base dei tempi di
propagazione relativi al worst case verificati sperimentalmente inserendo come ingresso
al dispositivo i valori di A e B tali da ottenere il maggior numero di riporti propagati
all’interno della catena di ripple-carry. In queste condizioni, il ritardo di propagazione
del segnale Sum3 (il bit più significativo in uscita dal sommatore) è di circa 12 ns, come
si può osservare dalla Figura 27. Sulla base di queste considerazioni, il periodo minimo
del segnale di sincronizzazione è stato scelto di 30 ns. Nella figura Figura 29 è mostrata
una simulazione del dispositivo completo dove gli ingressi sono stati scelti come segue:
A3 = 0, A2 = 0, A1 = 0, A0 = V ariabile;
B3 = 0, B2 = 0, B1 = 0, B0 = 0;
Cin = 0;
C3 = V ariabile, C2 = 0, C1 = 0, C0 = 0.
La scelta di tali ingressi ha permesso di ottenere uno scenario semplice da poter analizzare
e nel contempo, ha permesso di mostrare il comportamento del dispositivo nel caso in cui
gli input sollecitino tutte le uscite. A0 e C3 sono stati ottenuti con forme d’onda le cui
transizioni non avvengono in corrispondenza dei fronti di salita e di discesa dei segnali di
sincronizzazione CLK e CLK, poichè essi devono essere mantenuti stabili nel momento
in cui il latch commuta ed entra in memorizzazione.
La Figura 28 mostra il layout del circuito completo: l’occupazione di area non è stata
una delle figure di merito principalmente prese in considerazione; tuttavia è possibile
notare come l’intero circuito occupi circa 94x100 µm2 .
6
La progettazione in VHDL
Il VHDL, insieme al Verilog, è il linguaggio più usato per la progettazione di sistemi
elettronici digitali. Esso rappresenta uno degli strumenti che ha consentito lo sviluppo di
tecniche automatiche usate per la progettazione dei circuiti digitali dalle quali, oramai,
non è possibile prescindere soprattutto a causa dell’aumento, anno per anno, della complessità circuitale. Il VHDL permette di descrivere il circuito ad un più alto livello di
astrazione tramite un approccio comportamentale, tramite funzioni logiche, o un approccio strutturale che fa uso di elementi più semplici ed elementari. Il successo delle tecniche
automatiche è comunque dovuto allo sviluppo di strumenti di sintesi che permettono di
tradurre questa descrizione in una rete di porte logiche, minimizzando una funzione di
costo specifica, quale area, ritardo o potenza.
L’intero circuito in pipeline, è stato progettato in un secondo momento tramite una
descrizione VHDL, per mostrare come un approccio di semi-automatico possa ridurre
il tempo di progettazione e facilitare il lavoro del progettista di sistemi digitali rispetto
ad un approccio puramente dedicato. Di seguito è riportato il codice per i vari moduli,
mentre per brevità sarà effettuata un’analisi dettagliata, tramite l’ausilio di un testbench,
solo del dispositivo completo.
Di seguito è riportata l’implementazione del Full-Adder a 1 bit con la tecnologia a
gate di trasmissione, secondo l’appoccio data-flow (ingressi ed uscite sono definiti come un
18
flusso concorrente di segnali). Il segnale di propagazione del riporto è calcolato mediante
la funzione logica XOR tra i due operandi in ingresso al sommatore, mentre il segnale di
somma e riporto uscente tramite la funzione logica che implementa un multiplexer.
ENTITY f u l l a d d e r 1 b i t IS
PORT( x i , y i , r i p _ i n : IN s t d _ l o g i c ; rip_usc , somma : OUT s t d _ l o g i c ) ;
END ENTITY;
ARCHITECTURE f u l l a d d e r 1 b i t _ a r c OF f u l l a d d e r 1 b i t IS
SIGNAL p , rip_usc_neg , rip_adder , somma_neg : s t d _ l o g i c := ’ 0 ’ ;
BEGIN
p <= x i XOR y i ;
rip_usc_neg <= ( (NOT r i p _ i n ) AND p ) OR ( (NOT x i ) AND (NOT p ) ) ;
r i p _ u s c <= NOT rip_usc_neg ;
somma_neg <= ( r i p _ i n AND p ) OR ( (NOT r i p _ i n ) AND (NOT p ) ) ;
somma <= NOT somma_neg ;
END ARCHITECTURE;
Il sommatore a 4 bit è stato progettato tramite un approccio strutturale, dove l’elemento basilare utilizzato è il full-adder a 1 bit.
ENTITY sommatore4bitRC IS
PORT( c_in : IN s t d _ l o g i c ; A, B : IN s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ;
c_out : OUT s t d _ l o g i c ; s : OUT s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ) ;
END ENTITY;
ARCHITECTURE sommatore4bitRC_arc OF sommatore4bitRC IS
COMPONENT f u l l a d d e r 1 b i t PORT( x i , y i , r i p _ i n : IN s t d _ l o g i c ;
rip_usc , somma : OUT s t d _ l o g i c ) ;
END COMPONENT;
SIGNAL co0 , co1 , co2 , co3 : s t d _ l o g i c := ’ 0 ’ ;
BEGIN
c0 : f u l l a d d e r 1 b i t PORT MAP(A( 0 ) , B( 0 ) , c_in , co0
c1 : f u l l a d d e r 1 b i t PORT MAP(A( 1 ) , B( 1 ) , co0 , co1 ,
c2 : f u l l a d d e r 1 b i t PORT MAP(A( 2 ) , B( 2 ) , co1 , co2 ,
c3 : f u l l a d d e r 1 b i t PORT MAP(A( 3 ) , B( 3 ) , co2 , co3 ,
c_out <= co3 ;
19
, s (0));
s (1));
s (2));
s (3));
END ARCHITECTURE;
Il comparatore è stato implementato con un approccio data-flow sulla base delle
funzioni logiche G, L ed E introdotte precedentemente.
ENTITY c o m p a r a t o r e 4 b i t IS
PORT( x1 , x2 : IN s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ;
g , e , l : OUT s t d _ l o g i c ) ;
END ENTITY;
ARCHITECTURE c o m p a r a t o r e 4 b i t _ a r c OF c o m p a r a t o r e 4 b i t IS
SIGNAL e0 , e1 , e2 , e3 :
BEGIN
e0 <= ( x1 ( 0 ) AND x2 ( 0 ) )
e1 <= ( x1 ( 1 ) AND x2 ( 1 ) )
e2 <= ( x1 ( 2 ) AND x2 ( 2 ) )
e3 <= ( x1 ( 3 ) AND x2 ( 3 ) )
s t d _ l o g i c := ’ 0 ’ ;
OR
OR
OR
OR
( (NOT
( (NOT
( (NOT
( (NOT
x1 ( 0 ) )
x1 ( 1 ) )
x1 ( 2 ) )
x1 ( 3 ) )
AND
AND
AND
AND
(NOT
(NOT
(NOT
(NOT
x2 ( 0 ) ) ) ;
x2 ( 1 ) ) ) ;
x2 ( 2 ) ) ) ;
x2 ( 3 ) ) ) ;
e <= e0 AND e1 AND e2 AND e3 ;
g <= ( x1 ( 3 ) AND (NOT x2 ( 3 ) ) )
OR ( e3 AND x1 ( 2 ) AND (NOT x2 ( 2 ) ) )
OR ( e3 AND e2 AND x1 ( 1 ) AND (NOT x2 ( 1 ) ) )
OR ( e3 AND e2 AND e1 AND x1 ( 0 ) AND (NOT x2 ( 0 ) ) ) ;
l <= ( (NOT x1 ( 3 ) ) AND x2 ( 3 ) )
OR ( e3 AND (NOT x1 ( 2 ) ) AND x2 ( 2 ) )
OR ( e3 AND e2 AND (NOT x1 ( 1 ) ) AND x2 ( 1 ) )
OR ( e3 AND e2 AND e1 AND (NOT x1 ( 0 ) ) AND x2 ( 0 ) ) ;
END ARCHITECTURE;
L’ultimo modulo implementa il segnale di sincronizzazione clock, con un periodo di
30 ns, tramite un approccio comportamentale. Il VHDL tramite il costrutto Process,
permette di descrivere il comportamento di un dispositivo tramite una serie di statement
che verranno eseguiti sequenzialmente e non concorrentemente come, invece, avviene per
l’approccio data-flow.
ENTITY c l o c k IS
PORT( c l k : OUT s t d _ l o g i c ) ;
END ENTITY;
ARCHITECTURE c l o c k _ a r c OF c l o c k IS
20
SIGNAL c l k _ s i g : s t d _ l o g i c := ’ 1 ’ ;
BEGIN
PROCESS( c l k _ s i g )
VARIABLE c l o c k _ v a l : s t d _ l o g i c := ’ 1 ’ ;
BEGIN
IF c l o c k _ v a l = ’ 0 ’ THEN
c l o c k _ v a l := ’ 1 ’ ;
ELSE
c l o c k _ v a l := ’ 0 ’ ;
END IF ;
c l k _ s i g <= c l o c k _ v a l AFTER 15 ns ;
END PROCESS;
c l k <= c l k _ s i g ;
END ARCHITECTURE;
Ottenuti gli elementi che implementano la nostra logica funzionale, il dispositivo
completo può essere ottenuto facilmente tramite un approccio strutturale, componendo i moduli presentati precedentemente. Il comportamento dei pass-transistor è stato
modellato lasciando commutare gli ingressi alla logica combinatoria sugli opportuni livelli e fronti del segnale di sincronizzazione utilizzando usando la clausola W HEN del
linguaggio VHDL.
ENTITY p i p e l i n e IS
PORT( Op1 , Op2 , Op3 : IN s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ;
gr , eq , l o : OUT s t d _ l o g i c ) ;
END ENTITY;
ARCHITECTURE p i p e l i n e _ a r c OF p i p e l i n e IS
COMPONENT sommatore4bitRC PORT( c_in : IN s t d _ l o g i c ;
A, B : IN s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ;
c_out : OUT s t d _ l o g i c ;
s : OUT s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ) ;
END COMPONENT;
COMPONENT c o m p a r a t o r e 4 b i t PORT( x1 , x2 : IN s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ;
g , e , l : OUT s t d _ l o g i c ) ;
END COMPONENT;
COMPONENT c l o c k PORT( c l k : OUT s t d _ l o g i c ) ;
END COMPONENT;
SIGNAL in1 , in2 , in3 , in4 , r i s 1 : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) := " 0000 " ;
SIGNAL r i s g , r i s e , r i s l , clk_in , c o u t : s t d _ l o g i c := ’ 0 ’ ;
BEGIN
c0 : sommatore4bitRC PORT MAP( ’ 0 ’ , in1 , in2 , cout , r i s 1 ) ;
c1 : c o m p a r a t o r e 4 b i t PORT MAP( in3 , in4 , r i s g , r i s e , r i s l ) ;
21
TestBench VHDL
clk_in
op1
op2
op3
in1
in2
in3
in4
equal
greater
lower
Analisi in Microwind 3.1
Clock
A
B
C
A-IN
B-IN
C-IN
Sum-IN
Out0
Out1
Out2
Tabella 5: Corrispondenza tra i segnali del testbench VHDL e i segnali dell’analisi del
layout completo
c2 : c l o c k PORT MAP( c l k _ i n ) ;
i n 1 <= Op1 WHEN c l k _ i n = ’ 1 ’ OR ( c l k _ i n = ’ 0 ’ AND clk_in ’ e v e n t ) ;
i n 2 <= Op2 WHEN c l k _ i n = ’ 1 ’ OR ( c l k _ i n = ’ 0 ’ AND clk_in ’ e v e n t ) ;
i n 3 <= Op3 WHEN c l k _ i n = ’ 0 ’ OR ( c l k _ i n = ’ 1 ’ AND clk_in ’ e v e n t ) ;
i n 4 <= r i s 1 WHEN c l k _ i n = ’ 0 ’ OR ( c l k _ i n = ’ 1 ’ AND clk_in ’ e v e n t ) ;
g r <= r i s g WHEN c l k _ i n = ’ 1 ’ OR ( c l k _ i n = ’ 0 ’ AND clk_in ’ e v e n t ) ;
eq <= r i s e WHEN c l k _ i n = ’ 1 ’ OR ( c l k _ i n = ’ 0 ’ AND clk_in ’ e v e n t ) ;
l o <= r i s l WHEN c l k _ i n = ’ 1 ’ OR ( c l k _ i n = ’ 0 ’ AND clk_in ’ e v e n t ) ;
END ARCHITECTURE;
Per analizzare il comportamento del dispositivo, è stato implementato tramite un
testbench lo stesso esempio riportato per il circuito progettato in Microwind 3.1 (Figura 29). I segnali in1, in2, in3 e in4 (vettori di 4 elementi) sono rispettivamente: il primo
operando del sommatore a 4 bit prelevato dopo il pass-transistor in ingresso; il secondo
operando del sommatore a 4 bit prelevato dopo il pass-transistor in ingresso; il primo
operando del comparatore a 4 bit prelevato dopo il corrispondente pass-transistor; il secondo operando in ingresso al comparatore a 4 bit prelevato dopo il pass-transistor il cui
ingresso è collegato all’uscita del sommatore. I segnali Op1, Op2 e Op3 sono gli operandi
in ingresso al circuito in pipeline, quindi i segnali posti in ingresso ai pass-transistor. La
Tabella 5 mostra la corrispondenza tra i segnali utilizzati nel testbench di Figura 30 e i
segnali riportati nel test di Figura 29.
ENTITY t e s t IS
22
END ENTITY;
ARCHITECTURE t e s t _ a r c OF t e s t IS
COMPONENT p i p e l i n e PORT( Op1 , Op2 , Op3 : IN s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) ;
gr , eq , l o : OUT s t d _ l o g i c ) ;
END COMPONENT;
SIGNAL op1_val , op2_val , op3_val : s t d _ l o g i c _ v e c t o r ( 3 downto 0 ) := " 0000 " ;
SIGNAL g r e a t e r , e q u a l , l o w e r : s t d _ l o g i c := ’ 0 ’ ;
BEGIN
c0 : p i p e l i n e PORT MAP( op1_val , op2_val , op3_val , g r e a t e r , e q u a l , l o w e r ) ;
op1_val <= " 0001 " AFTER 0 ns , " 0000 " AFTER 33 ns , " 0001 " AFTER 66 ns ,
" 0000 " AFTER 99 ns ,
" 0001 " AFTER 132 ns , " 0000 " AFTER 165 ns ;
op2_val <= " 0000 " ;
op3_val <= " 1000 " AFTER 0 ns , " 0000 " AFTER 19 ns , " 1000 " AFTER 38 ns ,
" 0000 " AFTER 57 ns ,
" 1000 " AFTER 76 ns , " 0000 " AFTER 95 ns ,
" 1000 " AFTER 114 ns , " 0000 " AFTER 133 ns ,
" 1000 " AFTER 152 ns , " 0000 " AFTER 171 ns ;
END ARCHITECTURE;
23
Figura 17: Layout del sommatore a 4 bit realizzato in Microwind 3.1
24
Figura 18: Sommatore a 4 bit: test del dispositivo
Figura 19: Schematizzazione di un comparatore
25
Figura 20: 4-Bit Magnitude Comparator
26
Figura 21: 4-Bit Magnitude Comparator realizzato in Microwind 3.1
Figura 22: 4-Bit Magnitude Comparator: test del dispositivo
27
Figura 23: Dettaglio implementativo: AND a 4 ingressi
Figura 24: Funzionamento del circuito pipeline a due fasi che utilizza registri dinamici
28
Figura 25: Layout Pass-Transistor: test del dispositivo
Figura 26: Layout Pass-Transistor con level restorer: test del dispositivo
29
Figura 27: Worst Case usato per il calcolo dei tempi di ritardo
30
Figura 28: Layout del circuito completo in pipeline
31
Figura 29: Test del dispositivo finale
32
Figura 30: TestBench dell’implementazione VHDL del dispositivo
33