1 Introduzione 2 Schematico

annuncio pubblicitario
Università degli Studi di Cagliari
Dipartimento di Ingegneria Elettrica ed Elettronica
Corso di Circuiti Integrati
Anno Accademico 2015/2016
1
Introduzione
In questo breve tutorial utilizzeremo il software Virtuoso della suite Cadence per simulare
la funzionalità di uno specchio di corrente in tecnologia CMOS.
Il software è installato su una macchina virtuale Linux e per poter lanciare il software è
necessario aprire un terminale, posizionarsi nella directory home digitando il comando
“cd” e lanciare lo script di avvio mediante il comando “source start_cadence_NCSU”
2
Schematico
2.1
Creazione di un nuovo schematico
Una volta avviato il software appariranno due finestre, una chiamata Command Interpreter
Window (CIW) permette di vedere i messaggi di errore, aprire nuove finestre e far partire
tool utili per il design, l’altra chiamata Library Manager permette di creare nuove librerie,
nuove celle o aprire quelle già esistenti.
CIW
Library Manager
Per cominciare sarà necessario creare una nuova libreria all’interno della quale andremo a
salvare tutti i progetti. Per farlo è necessario utilizzare il Library Manager e selezionare dal
menù file la voce opportuna
Menu
File -> New -> Library
Pulsante barra strumenti
A questo punto apparirà una finestra in cui sarà necessario specificare il nome da dare
alla Libreria, per esempio MyLibrary, e cliccare OK. Nella nuova finestra che apparirà sarà
possibile decidere quale tecnologia associare alla Libreria che stiamo creando. Tra le varie
voci selezione quindi “Attach to an existing technology library” e successivamente tra
le varie tecnologie disponibili scegliere NCSU_TechLib_FreePDK45 come mostrato nelle
immagini sottostanti.
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
A questo punto la nostra Libreria comparirà nell’elenco delle librerie disponibili all’interno
del Library Manager e sarà possibile creare al suo interno nuove celle. Per creare una
cella utilizzare l’apposito comando del Library Manager
Menu
File -> New -> Cell View
Pulsante barra strumenti
Comparirà la seguente schermata dalla quale sarà possibile selezionare la Libreria in cui
andare a salvare la nuova cella, il nome della cella e il tipo di cella. In questo caso noi
vogliamo creare uno schematico quindi il typo dovrà essere schematic. Una volta scelto il
nome, per esempio current_mirror, possiamo cliccare OK e a questo punto apparirà un
nuovo foglio di lavoro all’interno del quale potremmo andare a disegnare il circuito.
Per salvare lo schematico appena creato e in generale per salvare lo schematico dopo
ogni modifica si deve utilizzare il comando “Check and Save”.
Menu
File -> Check and Save
Pulsante barra strumenti
2.2
Piazzamento dei componenti
Il primo passo della creazione dello schematico è il piazzamento dei componenti sul foglio
di lavoro. Per fare questo bisognerà prendere i componenti da una libreria standard
oppure da una creata appositamente. Nel nostro caso utilizzeremo i dispositivi della
libreria NCSU_Devices_FreePDK che contiene al suo interno diverse tipologie di transistor
caratterizzati da diverse tensioni di soglia (VTL per transistor con basse tensioni di soglia,
VTG per tensioni di soglia intermedie e VTH per alte tensioni di soglia). Per piazzare un
componente utilizzare l’apposito menù o pulsante sulla barra degli strumenti oppure
semplicemente schiacciare la lettera “i”
Menu
Create -> Instance
Pulsante barra strumenti
Si aprirà una finestra di scelta come quella mostrata in Figura 1:
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Per ogni nuova istanza è necessario
specificare
a) La libreria in cui risiede il
componente da istanziare
b) Il nome della cella da istanziare
c) La view della cella da istanziare che
in questo caso sarà symbol (in
quanto nello schematico andremo a
piazzare il simbolo del componente)
d) Un nome significativo da assegnare
all’istanza
Per specificare tutti i parametri è possibile
schiacciando il tasto Browse aprire una
interfaccia grafica che permette di
scegliere in maniera semplificata il
componente da istanziare come mostrato
sotto
Per istanziare un NMOS, scegliamo la Libreria NCSU_Devices_FreePDK45, la Cell
NMOS_VTG e la View symbol. Una volta selezionate tutte le voci cliccare close per
ritornare alla schermata precedente
Nella finestra mostrata a sinistra è possibile
a questo punto selezionare le dimensioni da
dare al transistor mediante i parametri width
e length. Le dimensioni minime della
tecnologia utilizzata corrispondono a 50 nm
per la lunghezza e a 90 nm per la larghezza
del transistor
Figura 1: Istanziare un componente
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Per piazzare il componente dopo aver premuto hide è necessario scegliere dove
posizionarlo e cliccare col tasto sinistro del mouse. A questo punto si possono continuare
a piazzare nuovi componenti dello stesso tipo fino a che non si preme il tasto ESC.
Figura 2: Componente piazzato
Una volta piazzato il componente, come mostrato in Figura 2, se ne possono ancora
modificare le proprietà (i parametri). Per farlo, posizionare il cursore sul componente (M1,
in Figura 2) e selezionarlo premendo il tasto sinistro del mouse. Una volta selezionato è
possibile cliccarci sopra col tasto desto e scegliere la voce properties nel menu che si
apre. A questo punto comparirà una finestra identica a quella utilizzata per l’impostazione
dei parametri mostrata in Figura 1. I parametri obbligatori sono la L (Length) e la W
(Width), gli altri sono opzionali. Nel compilarli si tenga conto della sintassi per gli ordini di
grandezza che sono esprimibili con le seguenti lettere (colonna 1 della Tabella 1) oppure
con la notazione scientifica (colonna 2):
Tabella 1: sintassi ordini di grandezza
LETTERA FORMATO SCIENTIFICO VALORE
f
E-15
Femto (10-15)
p
E-12
Pico (10-12)
n
E-09
Nano (10-9)
u
E-06
Micro (10-6)
m
E-03
Milli (10-3)
k
E+03
Chilo (10+3)
M
E+06
Mega (10+6)
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
2.3
Aggiunta dei fili di interconnessione
Dopo avere piazzato tutti i componenti si aggiungono i fili di interconnessione tramite il
comando:
Menu
Create -> Wire (narrow)
Pulsante barra strumenti
Si clicca col tasto sinistro del mouse sul terminale da cui parte il filo (wire), ogni volta che
si vuole fare una curva a 90° si preme nuovamente il tasto sinistro. Per terminare di
disegnare il wire bisogna arrivare ad un altro terminale oppure fare doppio click col tasto
sinistro del mouse.
Figura 3: Aggiunta di un wire (a), schematico completo (b)
Ad ogni filo disegnato è possibile assegnare un nome. E’ bene dare un nome significativo
ai nodi principali, in modo che sia poi semplice visualizzare ed interpretare le forme d’onda
generate dalla simulazione (che saranno etichettate col nome del file di cui si vuole
misurare la tensione). Per assegnare un nome ad un wire:
Menu
Pulsante barra strumenti
Create -> Wire Name
Lanciando questo comando si apre la finestra in Figura 4:
Figura 4: Assegnazione del nome ad un wire
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Per assegnare un nome è sufficiente scrivere il nome nell’apposita casella e cliccare Hide;
a questo punto basterà cliccare sul filo a cui si vuole assegnare il nome perchè il comando
venga eseguito. Una volta assegnato il nome desiderato premere il tasto ESC. Per i nodi
di massa e alimentazione invece dell’assegnazione classica del nome possono essere
utilizzati dei componenti presenti nella libreria AnalogLib che assegnano in automatico i
nomi corretti. Ad esempio per realizzare il collegamento a massa del circuito realizzato
sinora, è possibile istanziare il componente gnd della libreria AnalogLib per arrivare alla
situazione mostrata in Figura 5. Analogamente se avessimo voluto collegare il terminale di
alimentazione avremmo potuto utilizzare il componente di libreria vdd. Questi componenti
non fanno altro che assegnare al terminale a cui sono connessi il nome gnd! per la massa
e il nome vdd! per l’alimentazione.
Oltre al nome, per tutti i nodi che risultino essere di ingresso/uscita, è necessario creare
una porta che specifichi la direzione del segnale su quel pin. Gli ingressi saranno di tipo
Input, le uscite Output, le alimentazioni sono bidirezionali (Inout). Quando si definisce una
direzione per il nome del filo (Input, Output, Inout) comparirà il simbolo del terminale (una
piccola freccia con l’orientazione determinata dalla direzione del terminale), mentre se il
nodo è interno allora comparirà solo il nome. Per creare un pin:
Menu
Pulsante barra strumenti
Create -> Pin
definire il nome del pin e la direzione, cliccare Hide e piazzare il pin nello schematico
come mostrato in Figura 5.b. Per il nodo di massa non è necessario definire un pin di
ingresso/uscita in quanto il componente di gnd istanziato assegna al nodo di massa un
nome globale (gnd!) che può essere quindi visto ad ogni livello della gerarchia. In generale
tutti i nodi che terminano con un punto esclamativo (!) sono nodi globali.
Figura 5: (a) Piazzamento della massa e degli altri terminali (b) e creazione dei pin
Il collegamento fra i terminali può avvenire disegnando tutto il wire oppure, per non
complicare troppo il disegno, usando la connessione per nome: due wire risultano
connessi fra loro se hanno lo stesso nome.
2.4
Editing
Il menu Edit fornisce la possibilità di modificare lo schematico, tramite comandi di copia
(Edit -> Copy), di cancellazione (Edit -> Delete) e di spostamento. In particolare, esistono
due tipologie di spostamento: il move e lo stretch:
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Menu
Pulsante barra strumenti
Edit -> Move
Edit -> Stretch
Il comando move sposta un componente staccando tutti gli eventuali collegamenti e
connessioni di fili, mentre il comando stretch trascina il componente lasciando connessi i
fili.
2.5
Symbol
Per poter utilizzare lo schematico che abbiamo creato come blocco di libreria da poter
istanziare successivamente in altri schematici è necessario associare allo schematico un
simbolo. Per fare questo:
Menu
Create -> Cellview -> From Cellview
Pulsante barra strumenti
si aprirà una nuova finestra, come mostrato in Figura 6.a.
(a)
Figura 6 Creazione del simbolo
(b)
da questa finestra è possibile creare una nuova vista a partire da una già esistente. Nel
nostro caso la vista di partenza sarà lo schematico che abbiamo creato e la vista di
destinazione sarà il simbolo. Premendo OK comparirà la finestra mostrata in Figura 6.b.
Da questa finestra è possibile selezionare la posizione dei pin presenti nello schematico,
nell’esempio i pin Iin e Iout verranno posizionati nella parte superiore del simbolo. Una
volta premuto OK il simbolo sarà creato e verrà visualizzato sullo schermo.
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
3
Testbench
Per simulare il circuito è buona norma creare una nuova cella di testbanch all’interno della
quale verrano istanziati la cella da testare e i generatori di segnale. Quindi come fatto in
precedenza, dal Library Manager si creerà all’interno della nostra Liberia una cella di
nome tb_current_mirror. All’interno della cella creeremo una istanza del simbolo dello
specchio di corrente precedentemente creato e poi aggiungeremo i generatori che si
trovano tutti nella libreria AnalogLib. Nel nostro caso ci vorrà sicuramente un generatore
di tensione che fornisce l’alimentazione in continua (1 V nel processo in esame), un
generatore di corrente che generi la corrente di ingresso allo specchio e un altro
generatore di tensione costante che generi una opportuna tensione sul nodo di uscita della
corrente Iout. A seconda del tipo di analisi quest’ultimo generatore potrà avere un valore
fisso o un valore parametrico ad esempio se volessimo andare a visualizzare come varia
la corrente di uscita al variare della tensione sul nodo di uscita.
Per piazzare i generatori si procede come per un normale componente ricordandosi che si
trovano tutti nella libreria AnalogLib e che i generatori di tensione costanti sono chiamati
vdc e quelli di corrente costante idc. I generatori vanno piazzati nello schematico, collegati
alla massa da un lato ed all’opportuno terminale dall’altro. In Figura 7 è mostrata lo
schematico con i generatori, da notare che è stato modificato il nome di ciascun
generatore per dargli un valore significativo (VDD, VOUT e IIN) e la connessione è stata
fatta per nome anzi che tracciando tutto il filo (ossia si è dato il nome Iin al pezzo di filo
connesso al terminale del generatore Iin ed il nome Iout al pezzo di filo connesso al
terminale positivo del generatore VOUT). Da notare infine che poichè il nodo di massa
all’interno dello specchio di corrente precedentemente creato è stato definito come
nodo globale non è necessario effettuare un collegamento fisico in quanto il
collegamento avviene per nome a tutti i livelli della gerarchia utilizzando la label
gnd! o equivalentemente il componente gnd della libreria AnalogLib.
Figura 7: Piazzamento dei generatori
Per un generatore costante sia esso di tensione o di corrente è sufficiente specificare
solamente il valore della tensione desiderata. Per modificare il valore dei generatori inseriti
una volta selezionati si potrà cliccare col tasto destro e scegliere la voce properties. Si
aprirà un menù come quello mostrato in Figura 8 dove il parametro DC Voltage
rappresenta appunto il valore di tensione continua erogato dal generatore.
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Figura 8 Modifica parametri generatore continua
Per creare un generatore il cui valore possa essere poi variato parametricamente in fase
di simulazione è possibile invece di indicare un valore numerico, assegnare una variabile
per il parametro DC Voltage. Ad esempio per il generatore di tensione VOUT è possibile
definire il parametro DC Voltage con il valore testuale “vout” il cui valore sarà definito in
fase di simulazione.
Tuttavia inizialmente i generatori verranno settati con i seguenti parametri
VDD -> 1 V
VOUT -> 0.5 V
IIN -> 1 μA
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
4
Simulazione
Una volta completato lo schematico del testbench è possibile procedere con la
simulazione del circuito. Per fare questo usare il comando:
Menu
Launch -> ADE L
Pulsante barra strumenti
e si aprirà la finestra mostrata in Figura 9 dalla quale è possibile settare il tipo di analisi da
effettuare, i segnali da visualizzare e i parametri da far variare.
Figura 9 Interfaccia grafica per l’impostazione della simulazione
4.1
Definizione del tipo di analisi
Definito il circuito e gli stimoli (i generatori) non resta che definire le analisi da compiere
per stimare i parametri di interesse. Nella nostra prima simulazione calcoleremo il punto di
lavoro del circuito quando la tensione di uscita vout è pari a Vdd/2 cioè nel nostro caso 0.5
V. Un’analisi di questo tipo richiede un’analisi in continua (dc). Per definire il tipo di analisi
richiesto:
Menu
Analyses -> Choose
Pulsante barra strumenti
Si aprirà una finestra che consente di scegliere uno dei possibili tipi di analisi (continua,
transistorio, alternata e così via). La finestra di scelta è mostrata in Figura 10, bisogna
selezionare la voce che corrisponde all’analisi desiderata (nel nostra caso, analisi in
continua, dc).
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Figura 10: Setup di una simulazione dc (continua)
Per effettuare una analisi in continua è sufficiente scegliere la voce dc e spuntare la
casella Save DC Operating Point e premere OK. A questo punto la simulazione è pronta
per essere eseguita mediante il comando:
Menu
Simulation -> Netlist and Run
Pulsante barra strumenti
Una volta terminata, la simulazione di punto di lavoro non produce alcun output di tipo
grafico. Per visualizzare i risultati è necessario selezionare il comando:
Menu
Pulsante barra strumenti
Results -> Print -> DC Operating Point
A questo punto cliccando su qualsiasi componente nello schematico è possibile
visuallizare il suo punto di lavoro. Se ad esempio dopo aver eseguito il comando
precedente si clicca sul generatore di tensione VDD si otterrà il suo punto di lavoro, cioè la
tensione presente ai suoi capi, la corrente che sta erogando. Poiché però i transistor dello
specchio di corrente sono racchiusi gerarchicamente all’interno del simbolo nel testbench,
per poter visualizzare il loro punto di lavoro è necessario dapprima scendere nella
gerarchia. In generale per qualsiasi blocco istanziato in uno schematico mediante il
simbolo è possibile vedere la sua implementazione mediante il comando
Menu
Edit -> Hierarchy -> Descend Edit
Pulsante barra strumenti
cliccando poi successivamente sul simbolo del componente di cui si vuole visualizzare il
contenuto. A questo punto una finestra permetterà di scegliere la vista all’interno del quale
si vuole discendere,nel nostro caso siamo interessati a visualizzare lo schematico e quindi
dopo aver verifichiamo che la voce view corrisponda a schematic cliccando OK apparirà lo
schematico. Per tornare al testbench si potrà usare il comando:
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Menu
Edit -> Hierarchy -> Return
Pulsante barra strumenti
Per vedere il punto di lavoro del transistor M2 dello specchio di corrente sarà dunque
necessario dapprima discendere la gerarchia come visto e poi mediante il comando:
Menu
Results -> Print -> DC Operating Point
Pulsante barra strumenti
Cliccare sul transistor M2 per ottenere la seguente schermata:
Dove sono presenti tutti i parametri più significativi del transistor come ad esempio la
tensione di soglia (Vth) la gm la Rout e molti altri. Tali valori possono essere anche utilizzati
per ricavare alcuni parametri dei transistor utili in fase di progetto. Si proceda ad esempio
con la stima dei parametri mostrati nella tabella successiva per il transistor M2 dello
specchio di corrente (per farlo si ricordino le equazioni che governano il funzionamento di
un transistor MOS).
PARAMETRO
μnCox
Vthn
λn
Simulazione di circuiti integrati – Uso di VIrtuoso
VALORE
CI 2015/16 - Massimo Barbaro
4.2
Analisi in continua con variazione parametrica di un valore
Per effettuare analisi parametriche è possibile definire il valore di uno o più dello
schematico parametri (ad esempio la tensione di un generatore o la lunghezza di un
transistor) come etichette testuali il cui valore sarà poi definito di volta in volta prima di
lanciare la simulazione. Ad esempio se volessimo visualizzare come varia la corrente in
uscita dallo specchio di corrente al variare della tensione di uscita potremmo definire il
valore di tensione del generatore VOUT con l’etichetta testuale “vout”. Una volta fatto
questo potremmo eseguire il comando per effettuare una simulazione come nel caso
precedente:
Menu
Launch -> ADE L
Pulsante barra strumenti
A questo punto per importare nella simulazione tutti i parametri definiti nello schematico è
sufficiente cliccare col tasto destro nell’area chiamata Design Variables e selezionare la
voce Copy Frome Cellview in modo tale che tutti i parametri definiti nello schematico
siano importati nella simulaione e si possa procedere alla definizione del loro valore. È
necessario definire SEMPRE un valore per ogni parametro definito. A questo punto
se volessimo effettuare un’analisi in continua per diversi valori del parametro “vout”
dovremmo nuovamente definire un’analisi in continua come prima ma questa volta
dovremmo anche spuntare la voce Design Variables come mostrato in Figura 11.
Figura 11 Analisi in DC con variazione parametrica
Si dovrà poi procedere a compilare i campi corrispondenti: nel campo Variable Name
bisogna indicare il nome dato alla variabile, nel nostro caso vout, nel campo Start il valore
iniziale del parametro, nel nostro caso 0, e nel campo Stop il valore finale, nel nostro caso
1. Una volta terminato premere OK.
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
4.3
Scelta della forme d’onda da visualizzare
Non appena cliccato su OK si ritorna alla schermata principale da cui si può procedere alla
definizione delle forme d’onda da visualizzare attraverso il comando:
Menu
Outputs -> Setup
Pulsante barra strumenti
A questo punto compare la finestra di scelta delle forme d’onda da visualizzare, mostrata
in Error! Reference source not found.Cliccando sul pulsante From Design sarà
possibile selezionare direttamente dallo schematico le tensioni e le correnti che si vogliono
visualizzare.
Figura 12 Schermata di scelta delle forme d’onda da visualizzare
Cliccando sul filo la corrispondente tensione sarà aggiunta ai segnali da visualizzare
(Figura 12.a), cliccando invece sul terminale di un componente (Figura 12.b) si andrà a
visualizzare la corrente che entra in quel nodo.
(a)
(b)
Figura 13 Selezione forme d’onda da visualizzare. (a) selezione di una tensione e (b)
di una corrente
Nel nostro caso selezioniamo per la visualizzazione le correnti di ingresso e uscita dallo
specchio (Iin e Iout) e poi clicchiamo ESC per terminare la selezione dei segnali da
visualizzare. A questo punto la simulazione è impostata completamente e può essere
lanciata mediante il comando:
Menu
Pulsante barra strumenti
Simulation -> Netlist and Run
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Una volta terminata la simulazione comparirà una nuova finestra contente i grafici delle
forme d’onda dei segnali scelti per la visualizzazione come mostrato in Figura 14.
Figura 14 Plot of the input/output current in a current mirror
Per esercizio si potrebbe vedere come varia la corrente di uscita al variare della lunghezza
di canale (fissando questa volta la tensione di uscita a 0.5 V) definendo la lunghezza dei
transistor dello specchio in maniera param
Simulazione di circuiti integrati – Uso di VIrtuoso
CI 2015/16 - Massimo Barbaro
Scarica