Sei sulla pagina 1di 42
UNIVERSITA’ DEGLI STUDI DI PALERMO FACOLTA’ DI INGEGNERIA DIPARTIMENTO ENERGIA, INGEGNERIA DELL’INFORMAZIONE E MODELLI MATEMATICI Electric

UNIVERSITA’ DEGLI STUDI DI PALERMO

FACOLTA’ DI INGEGNERIA

DIPARTIMENTO ENERGIA, INGEGNERIA DELL’INFORMAZIONE E MODELLI MATEMATICI

Electric VLSI Design System Tutorial

Redatto da:

Ing Gineuve Alieri

Indice:

  • 1 Introduzione

3

  • 2 Download ed installazione

5

  • 2.1 Electric & plugins:

5

  • 2.2 Controllo della Memoria:

6

  • 2.3 LTSpice:

7

  • 3 Circuit and Layout Design

8

  • 3.1 Esempio – Nand a due ingressi:

9

  • 4 Consigli utili per il Layout

30

  • 5 Creazione completa di una cella a partire dal VHDL............................................................33

  • 6 Come inserire una nuova tecnologia in Electric

....................................................................

40

1

Introduzione

Electric VLSI Design System è un software EDA (Electronic Design Automation) open-source che permette il design di diversi tipi di circuiti (MOS, Bipolari, Hardware Description Language, etc.), è dotato di diversi strumenti utili alla progettazione e al design e permette l’interfacciamento ai CAD più diffusi includendo i formati EDIF, LEF/DEF, VHDL, CIF, GDS. Nella tabella seguente sono evidenziati i tools, le tecnologie e le interfacce di Electric.

Tabella 1: Tools, Tecnologie e Interfacce di Electric.

Tools

Technologies

Interfaces

Design Rule Checking (many options)

nMOS

CIF I/O

Electrical Rules Checking (many options)

CMOS (many variations)

GDS I/O

Simulation

Bipolar

EDIF I/O

Simulation Interface (many options)

BiCMOS

DXF I/O

Layout Generation (many options)

Thin film

SUE Input

Compaction

Schematics

VHDL I/O

Placement (many options)

Printed Circuits

Verilog Output

Routing (many options)

Digital Filters

CDL Output

VHDL Compilation

FPGA

EAGLE Output

Silicon Compilation

PADS Output

Network Consistency Checking (LVS)

Applicon/860 Input

Logical Effort Analysis

Bookshelf Input

Project Management (2 options)

ECAD Output

Gerber Input

HPGL Output

PostScript Output

Electric è basato sulla connettività per tutti i tipi di design, ICs (Integrated Circuits) compresi. Per connettività si intende il posizionamento dei componenti ed il loro collegamento, questi rimangono collegati anche se vengono spostati. Questo tipo di approccio ha dei pro e dei contro brevemente rappresentati nella tabella seguente, questi sono da tenere in considerazione in base al tipo di lavoro/utilizzo che si vuol fare del software.

Tabella 2: Possibili vantaggi e svantaggi di Electric.

Connectivity Approach

Pro

Contro

Immediata visualizzazione dei collegamenti. Ad esempio: cliccando su un nodo/filo si evidenziano tutti

Essendo obbligati alla connettività spesso non si possono utilizzare le strutture “disegnate” nei livelli gerarchici

quelli collegati. Utile per il routing automatico.

sottostanti complicando il layout. Richiede lavoro aggiuntivo per creare le singole strutture.

Esistono alcuni plugins che aumentano le funzionalità di Electric, in particolare al momento sono disponibili i seguenti plugins:

Static Free Software extra, comprende il simulatore IRSIM e le interfacce per le opzioni di animazione 3D. Bean Shell, può essere aggiunto a Electric per attivare gli script Java e la valutazione dei parametri. Operazioni avanzate che fanno uso dei parametri di cella avranno bisogno di questo plugin. Jython può essere aggiunto per attivare lo scripting Python. 3D, consente di visualizzare un circuito integrato in tre dimensioni, questo non è un plugin, ma piuttosto un accessorio all’installazione di Java. Richiede il pacchetto Java3D. Animazione, un altro extra che può essere aggiunto alla struttura 3D è l'animazione 3D. Richiede Java Media Framework (JMF). Le modalità di download e installazione dei plugins saranno specificate nei prossimi paragrafi. Electric include due simulatori, ALS e IRSIM, e la possibilità di interfacciarsi con simulatori esterni generando netlist (Tabella 3). IRSIM è un simulatore gate-level che usa modelli RC, sviluppato dall’Università di Stanford originariamente scritto in C, è stato tradotto in Java in modo da poter essere inserito in Electric; come detto precedentemente esso non è nativo in Electric ma è facilmente installabile attraverso il plug-in Static Free Software. ALS è un simulatore gate-level in grado di simulare gli schemi, layout IC, o descrizioni VHDL. L'utente deve essere consapevole che il simulatore ALS traduce il circuito in VHDL, poi compila il VHDL in una netlist per la simulazione. Ciò significa che quando un layout o schema viene simulato, vengono create due nuove visioni di quella cella: {VHDL} e {net.als}.

Tabella 3: Tipi di Netlist generabili con Electric.

Simulator

Level

Netlist Command

CDL

circuit

Tools / Simulation (Spice) / Write CDL Deck ...

COSMOS

Switch

Tools / Simulation (Others) / Write COSMOS Deck ...

ESIM/RNL

Switch

Tools / Simulation (Others) / Write ESIM/RNL Deck ...

FastHenry

Inductance

Tools / Simulation (Others) / Write FastHenry Deck ...

IRSIM

Switch

Tools / Simulation (Others) / Write IRSIM Deck ...

Maxwell

Circuit

Tools / Simulation (Others) / Write Maxwell Deck ...

MOSSIM

Switch

Tools / Simulation (Others) / Write MOSSIM Deck ...

PAL

Gate

Tools / Simulation (Others) / Write PAL Deck ...

RSIM

Switch

Tools / Simulation (Others) / Write RSIM Deck ...

SILOS

Functional

Tools / Simulation (Others) / Write SILOS Deck ...

Spice

circuit

Tools / Simulation (Spice) / Write Spice Deck ...

Tegas

Functional

Tools / Simulation (Others) / Write Tegas Deck ...

Verilog

functional

Tools / Simulation (Verilog) / Write Verilog Deck ...

2

Download ed installazione

  • 2.1 Electric & plugins:

Per scaricare la versione di Electric più recente ed i relativi plugins bisogna accedere al sito della staticfreesoft nella sezione “Product”-“Code”, http://www.staticfreesoft.com/productsFree.html. Electric è scritto in linguaggio Java (*.jar) dunque necessita di un software opportuno per essere

letto, quale OpenJDK, Apache Harmony, o Oracle Java (minima versione 1.6). Si consiglia il software

Oracle Java essendo il programma di sviluppo dello stesso Electric. Dopo aver scaricato e salvato il file di Electric (electric-9.05.jar) per avviare il programma:

Windows: Doppio click sul file electric-9.05.jar salvato, questo avvierà Electric con 64MB di memoria. Vedremo di seguito come poter ampliare la memoria disponibile per poter effettuare simulazioni e layout anche di grandi circuiti. Linux-Unix: Apri un terminale, vai nella cartella dove hai salvato il file e scrivi “java – Xmx512m –jar electric-9.05.jar &”, questo avvierà Electric con 512MB di memoria. Mac: Doppio click sul file electric-9.05.jar salvato, se non si avvia utilizzare le linee di comando per Linux/Unix precedenti in un xterm. Dopo aver scaricato i plugins, per avviarli insieme ad Electric bisogna creare una classpath. Per fare questo devi aprire una finestra di comando, andare nella cartella dove hai salvato i file (electric e plugins) e digitare “java –classpath electric-9_04.jar:electricSFS-9.04.jar:bsh-2.0b4.jar:jython- 2.5.3.jar com.sun.electric.Launcher”. In Windows si deve usare “;” per separare i file .jar e si devono inserire le virgolette, la linea di comando sarà dunque “java -classpath "electric- 9_04.jar;electricSFS-9.04.jar;bsh-2.0b4.jar;jython-2.5.3.jar" com.sun.electric.Launcher”. La linea di comando precedente può essere inclusa in un file *.bat avviabile con un doppio click, si può anche aggiungere l’estensione della memoria ad 1GB inserendo il comando –mx1000m. Ricapitolando per windows: aprire il blocco note, scrivere “java -classpath "electric- 9_04.jar;electricSFS-9.04.jar;bsh-2.0b4.jar;jython-2.5.3.jar" –mx1000m com.sun.electric.Launcher” e salvare il file come .bat, inserirlo nella cartella dove sono racchiusi tutti i file .jar, avviarlo con il doppio click. Per verificare quali plug-ins sono installati, cliccare nel menù in alto a destra “Help” poi “About Electric” e infine “plugins”.

2.2

Controllo della Memoria:

La Java Virtual Machine ha un limite nella memoria utilizzabile, settata a 64MB. Per aumentare la memoria utilizzabile da Electric, oltre ad inserire l’opzione nella linea di comando come visto in precedenza, si può modificare l’opzione all’interno del programma andando in File/Preferences/General/General, Figura 1.

2.2 Controllo della Memoria: La Java Virtual Machine ha un limite nella memoria utilizzabile, settata a

Figura 1: Preferenze Generali di Eletric.

La sezione “Memory” ha due campi Maximum Memory e Maximum Permanent Space, il primo è il più importante perché aumenta la memoria disponibile (nei sistemi windows a 32bit non può essere superiore a 1500) mentre il secondo è una sezione di memoria addizionale che può essere utilizzata ad esempio per il design di Chip molto grandi (un valore di 200 è sufficiente in questa sezione).

2.3

LTSpice:

Per poter simulare con Spice i circuiti progettati (schematic e layout) Electric ha bisogno di un simulatore esterno a cui collegarsi, ne esistono diversi qui si prende in considerazione l’installazione dell’LTSpice (Linear Technology Spice). LTSpice è scaricabile dal seguente link “http://www.linear.com/designtools/software/#LTspice”, dopo averlo installato si devono impostare alcune opzione all’interno di Electric come di seguito riportato. Aprire Electric ed andare in “File/Preference/Tools/Spice-CDL”, settare le impostazioni come mostrato in Figura 2. Nel campo Run Program inserire il path dove si trova il file di esecuzione dell’LTSpice “C:\Program Files (x86)\LTC\LTspiceIV\scad3.exe” Nel campo with args (notare che questo campo è case sensitive) inserire “-i ${FILENAME} -r ${FILENAME_NO_EXT}.raw –o ${FILENAME_NO_EXT}.out”.

2.3 LTSpice: Per poter simulare con Spice i circuiti progettati (schematic e layout) Electric ha bisogno

Figura 2: Preferenze Spice di Electric.

Per maggiori informazioni sul settaggio dell’LTSpice in Electric è possibile consultare il link:

http://cmosedu.com/cmos1/ltspice/ltspice_electric.htm.

3

Circuit and Layout Design

Il modo in cui Electric gestisce tutti i tipi di design circuitale è rappresentandoli in un insieme di nodi, archi e porte. I nodi sono componenti elettrici quali transistor, contatti e porte logiche; gli archi sono invece i fili che collegano due componenti; mentre le porte sono i siti di connessione sui nodi dove vengono collegati i fili. Dato che Electric utilizza nodi ed archi è importante che questi siano usati per creare tutte le connessioni infatti, anche se nel layout (o schematico) può sembrare che due componenti siano collegati quando si toccano, ci deve sempre essere un filo (arco) ad interconnetterli per garantire la connettività in Electric. Questo tipo di approccio richiede uno sforzo ed una attenzione maggiore nella fase di design ma garantisce il corretto collegamento del circuito successivamente anche se si verificano, ad esempio, degli spostamenti dei nodi (componenti); questi sono i famosi pro e contro a cui avevamo accennato in precedenza. Gli archi che formano i fili di collegamento possono contenere dei vincoli che aiutano a controllare le modifiche geometriche (ad esempio un collegamento può essere rigido o flessibile), questi vincoli si propagano attraverso i livelli gerarchici del design. Si definisce Cell (Cella) l’insieme dei nodi e degli archi che descrive un circuito, ci possono essere differenti viste di una stessa cella (schematic, layout, icon, vhdl, etc.) ed ogni vista può avere differenti versioni. La gerarchia è implementata instanziando una cella all’interno di un’altra, la cella instanziata ha un livello gerarchico più basso di quella che la contiene; da notare che la cella instanziata rappresenta in questo caso un nodo per la cella che la contiene. Definendo gli exports all’interno di una cella questi diventano i siti di connessione o porte (ports) sull’istanza di tale cella. Un insieme di celle costituisce una libreria (library) ed è trattata sul disco come file singolo, un circuito completo può essere memorizzato in una libreria singola, o esso può essere suddiviso in più librerie. Introdurremo l’uso di Electric con un esempio: il design (schematic e layout) e la simulazione di una porta nand a due ingressi.

3.1

Esempio – Nand a due ingressi:

Aprire Electric, la schermata principale è mostrata in Figura 3.

3.1 Esempio – Nand a due ingressi: Aprire Electric, la schermata principale è mostrata in Figura

Figura 3: Schermata Principale di Electric.

Per modificare il colore dello sfondo andare al menù “Window / Color Scheme”, si consiglia lo sfondo bianco per una migliore visualizzazione ed eventuale stampa dei circuiti disegnati. Settiamo adesso Electric per l’uso del processo tecnologico C5 della ON Semiconductor’s e fabbricazione attraverso MOSIS, per fare questo aprire il menu “File / Preference / Technology / Tecnology” e settare le impostazione come mostrato in Figura 4. Da notare che l’opzione “Analog” è settata, questo permette la visualizzazione di resistenze e capacità nel menù dei componenti. Il processo C5 ha due layers di polisilicio (poly1 e poly2), tre livelli di metal (metal1, metal2, metal3) e un layer hi-res per bloccare l’impianto del poly2 in modo da creare resistenze di alto valore in poly2.

Figura 4: Preferenze della Tecnologia in Electric. Rimane solo da settare la scala (lambda), il processo

Figura 4: Preferenze della Tecnologia in Electric.

Rimane solo da settare la scala (lambda), il processo C5 usa le regole di design sub micrometrico (submicron design rules) della MOSIS Scalable CMOS (tecnologia mocmos in Electric) con λ=300nm, per fare ciò andare al menù “File / Preferences / Technology / Scale” e settare la scala della mocmos uguale a 300nm. Adesso abbiamo settato l’ambiente di lavoro per fabbricare dispositivi con il processo C5 tramite MOSIS, salviamo la libreria corrente con il nome di Tutorial andando in “File / Save Library As” come mostrato in Figura 5.

Figura 4: Preferenze della Tecnologia in Electric. Rimane solo da settare la scala (lambda), il processo

Figura 5: Come salvare una Libreria in Electric.

Creiamo adesso una nuova Cella dove disegneremo il circuito della nand a due ingressi, andiamo in “Cell / New Cell”, scegliamo la vista schematic e chiamiamo la nuova cella nand_2, come mostrato in Figura 6.

Creiamo adesso una nuova Cella dove disegneremo il circuito della nand a due ingressi, andiamo in

Figura 6: Creazione di una nuova Cella.

Per mostrare la griglia nella pagina di editing si può usare il comando rapido ctrl+G oppure nel menù “Windows / Toggle grid”. Iniziamo a disegnare il circuito, la porta nand a due ingressi è formata da due transistor nmos e due transistor pmos, per inserire i transistor andare nella colonna “Component” e selezioniamo e piazziamo un transistor nmos ed uno pmos a tre terminali, Figura 7. Per adattare lo zoom è possibile utilizzare il comando ctrl+9, oppure fare lo zoom-in con ctrl+7 o lo zoom-out con ctrl+0.

Creiamo adesso una nuova Cella dove disegneremo il circuito della nand a due ingressi, andiamo in

Figura 7: Inserimento componenti in Electric.

Per modificarne le dimensioni possiamo o fare doppio click sul componente, o utilizzare il comando rapido ctrl+I oppure andare al menù “Edit / Properties / Object Properties”, inserire W=10 (3µm) e L=2 (600nm), ricordando che la nostra scala è 1 unit=300 nm. La W così grande è dovuta, come vedremo nei prossimi paragrafi, al fatto che i nostri modelli Spice per effettuare le simulazioni richiedono una W min pari a 3µm. A questo punto selezioniamo i due componenti ed effettuiamo un copia ed incolla, inseriamo successivamente vdd e gnd e disponiamo i componenti come mostrato in Figura 8. Per inserire il modello Spice ai transistor selezionare il componente e andare al menù “Tools / Simulation (Spice) / Set Model Spice”, successivamente evidenziare la scritta “SPICE-Model” utilizzare il comando rapido ctrl+I oppure il menù “Edit / Properties / Object Properties” e modificare il testo in NMOS per i transistor di tipo n e PMOS per i transistor di tipo p (Figura 8).

Per modificarne le dimensioni possiamo o fare doppio click sul componente, o utilizzare il comando rapido

Figura 8: Posizionamento componenti, vdd e gnd e inserimento Model in Electric.

Se si vuole modificare la dimensione di componente rispetto agli altri bisogna selezionare il componente e utilizzare il comando rapido ctrl+B oppure tramite il menù “Edit / Size / Interactively”. Per effettuare i collegamenti elettrici selezionare la porta del componente cliccando con il pulsante sinistro del mouse, poi tenendo premuto il tasto destro disegnare il filo (arc connection), Figura 9. Per inserire gli ingressi e l’uscita posizionare dalla sezione “Component” tre pin e collegarli come mostrato in Figura 9. Per generare gli export, cioè gli input e gli output della cella, bisogna cliccare sul pin ed utilizzare o il comando rapido ctrl+E oppure il menù “Export / Create Export” inserire il nome dell’input/output (Export name) e la tipologia (Export characteristic), Figura 9.

Figura 9: Inserimento Pin e creazione Export della cella in Electric. E’ bene creare sempre un

Figura 9: Inserimento Pin e creazione Export della cella in Electric.

E’ bene creare sempre un export anche per vdd e gnd in modo da garantire il corretto collegamento e funzionamento nelle gerarchie superiori. Finito il circuito cerchiamo eventuali errori di design con il tool DRC (Design Rule Cheching) tramite il comando rapido F5 oppure dal menù “Tools / DRC / Check Hierarchically”, alla fine del DRC compare una finestra con il numero di errori e warning (Figura 10); per vedere il tipo di errori si devono usare i tasti > e < questi verranno mostrati nella finestra Electric Message.

Figura 9: Inserimento Pin e creazione Export della cella in Electric. E’ bene creare sempre un

Figura 10: Funzione DRC in Electric.

Spesso gli errori di DRC sono provocati da pin superflui creatisi durante la formazione dei collegamenti elettrici (Figura 11), per pulire la cella da questi pin andare in “Edit / Cleanup Cell / Cleanup Pins”.

Spesso gli errori di DRC sono provocati da pin superflui creatisi durante la formazione dei collegamenti

Figura 11: Errore di DRC “Unnecessary Pin”.

Per generare la vista icona (icon view), così da poter istanziare gerarchicamente il circuito, andare nel menù “View/Make icon View”; anche nella vista schematic troverete l’icona corrispondente al vostro circuito, Figura 12.

Spesso gli errori di DRC sono provocati da pin superflui creatisi durante la formazione dei collegamenti

Figura 12: Creazione della vista icona.

Per modificare l’icona si deve aprire la vista icona facendo doppio click in nand_2{ic}, dalla vista icona si possono modificare le dimensioni dell’icona stessa, del testo o dei pin, ruotare i pin (comando ctrl+J) e molte altre funzioni grafiche. Se vogliamo, ad esempio, creare un’icona che rappresenti il simbolo della nand dobbiamo seguire i passi (Figura 13):

Selezionare il rettangolo e cancellarlo;

Disegnare un cerchio. Andando nelle proprietà del cerchio (ctrl+I) in degrees of circle scrivere 180, così otterremo un semicerchio. Ruotarlo (ctrl+J) fino alla posizione verticale destra. Disegnare un altro cerchio e modificarne le dimensioni x=1 e y=1, sarà il pallino della negazione. Posizionarlo successivamente al semicerchio. Disegnare adesso la spezzata per chiudere il simbolo. Nella sezione component selezionare ed istanziare l’opened polygon. Per cambiarne la forma selezionarlo e premere y oppure andare in Edit/Modes/Edit/Toggle Outline Edit. Modificarlo in modo da ottenere il rettangolo aperto a completamento del semicerchio. Muovere i pin così da posizionarli in modo corretto. Si ricorda che per evidenziare più di un elemento si deve tenere premuto il tasto shift, mentre per passare dalla selezione di un elemento ad un altro sovrapposti bisogna tenere premuto il tasto ctrl.

Per modificare l’icona si deve aprire la vista icona facendo doppio click in nand_2{ic} , dalla

Figura 13: Disegno del simbolo della nand (icon view).

Prima di procedere con il layout verifichiamo il funzionamento del nostro schematic con una simulazione spice. Per inserire un codice spice andare nella sezione component, nell’icona misc,

selezionare spice

code

ed

istanziarlo

nello

schematic;

adesso

comparirà

una

scritta

“text”,

selezionarla e andare in proprietà (ctrl+I), spuntare la Multi-Line Text (in alto a destra) e scrivere i

comandi spice come in Figura 14. Il comando .include deve contenere il percorso dove è salvato il

file

con

i

modelli

spice,

scaricabili

http://cmosedu.com/cmos1/electric/C5_models.txt.

al

seguente

link

Prima di procedere con il layout verifichiamo il funzionamento del nostro schematic con una simulazione spice.

Figura 14: Comandi Spice.

Avendo preventivamente settato l’LTSpice in Electric, come mostrato nel paragrafo precedente, si può simulare. Per avviare la simulazione andare nel menù Tools/Simulation (Spice)/Write Spice Deck oppure utilizzare il comando rapido alt+S. Avviando la simulazione si aprirà in automatico il programma LTSpice, la cui schermata è riportata in Figura 15. Per scegliere le tensioni/correnti da plottare (Va, Vb, Vy) andare al menù “Plot Settings/Visible Traces” oppure cliccare l’icona evidenziata in Figura 15.

Figura 15: LTSpice - Plotting delle forme d’onda. Dalle forme d’onda visualizzate, Figura 16, si evince

Figura 15: LTSpice - Plotting delle forme d’onda.

Dalle forme d’onda visualizzate, Figura 16, si evince il corretto funzionamento del circuito con queste sollecitazioni; ovviamente in fase di simulazione bisogna verificare tutte le combinazioni di ingresso possibili. Se nelle opzioni del menù “Tools/Control Panel/Operation” non è settata la cancellazione automatica dei *.raw file, quando LTSpice viene chiuso si apre automaticamente il visualizzatore di forme d’onda di Electric così da poter continuare a vedere la simulazione effettuata.

Figura 15: LTSpice - Plotting delle forme d’onda. Dalle forme d’onda visualizzate, Figura 16, si evince

Figura 16: Simulazione Spice del circuito nand_2.

Passiamo adesso alla creazione del layout del circuito progettato. Per prima cosa dobbiamo creare la vista layout della nostra cella, per fare questo andare al menù “Cell/New Cell” ed in name inserire lo stesso nome della cella fin qui utilizzata (nand_2) e in view selezionare layout. Avremo adesso una vista layout del nostro circuito e nella sezione component tutte le strutture per poterlo costruire, vedi Figura 17.

Passiamo adesso alla creazione del layout del circuito progettato. Per prima cosa dobbiamo creare la vista

Figura 17: Vista Layout in Electric.

Iniziamo il disegno del nostro layout inserendo un transistor pmos (P-Transistor) ed uno nmos (N- Transistor), selezionare il transistor pmos ed entrare nelle proprietà (ctrl+I), modificarne le dimensioni W=10 (vedi schematic), Figura 18, eseguiamo le stesse operazioni per il transistor nmos.

Passiamo adesso alla creazione del layout del circuito progettato. Per prima cosa dobbiamo creare la vista

Figura 18: Inserimento transistor nella vista layout e modifica della W.

Per creare gli altri due mos necessari selezioniamo l’ nmos ed il pmos già disegnati (tasto shift) e facciamo un copia e incolla (ctrl+c, ctrl+v, oppure dal menù edit) otterremo così i transistor già con le giuste dimensioni. Dobbiamo adesso creare le contattature di source e drain dei vari transistor, per fare questo inserire un quadrato di nAct (per il pmos) e uno di pAct (per l’nmos), adattiamo adesso le dimensioni selezionando i contatti, entrando nelle proprietà (ctrl+I) e in Y size inserire 10 (come la W del mos), Figura 19.

Per creare gli altri due mos necessari selezioniamo l’ nmos ed il pmos già disegnati (tasto

Figura 19: Inserimento contatti di source e drain (pActive e nActive).

Selezionare entrambi i contatti e fare un copia ed incolla due volte così da ottenere il circuito come in Figura 20, adesso selezionare il primo source/drain e collegarlo al contatto come mostrato in Figura 21, ricordiamo che per effettuare i collegamenti bisogna selezionare il componente cliccando con il pulsante sinistro del mouse, poi tenendo premuto il tasto destro disegnare il filo (arc connection).

Figura 20: Mos e contatti della porta nand a due ingressi. Figura 21: Collegamento fra contatto

Figura 20: Mos e contatti della porta nand a due ingressi.

Figura 20: Mos e contatti della porta nand a due ingressi. Figura 21: Collegamento fra contatto

Figura 21: Collegamento fra contatto e source/drain.

Selezionare l’arco (collegamento) appena creato, aprire le proprietà (ctrl+I) e modificarne la fine dell’estensione in “neither end”, Figura 22, questo serve a non far proseguire l’arco oltre i punti di collegamento iniziale e finale così da evitare corto circuiti non voluti. Questa procedura è sempre da applicare nei collegamenti di source e drain per evitare sovrapposizioni sul canale, nei normali collegamenti bisogna fare molta attenzione e selezionare l’end extension più opportuno.

Figura 20: Mos e contatti della porta nand a due ingressi. Figura 21: Collegamento fra contatto

Figura 22: Selezione delle proprietà del collegamento (arco).

Effettuare i restanti collegamenti come mostrato in Figura 23, ed inserire il modello Spice ai transistor. Ricordiamo che per inserire il modello Spice bisogna selezionare il componente ed andare al menù “Tools / Simulation (Spice) / Set Model Spice”, successivamente evidenziare la scritta “SPICE-Model” utilizzare il comando rapido ctrl+I oppure il menù “Edit / Properties / Object Properties” e modificare il testo in NMOS per i transistor di tipo n e PMOS per i transistor di tipo p.

Effettuare i restanti collegamenti come mostrato in Figura 23, ed inserire il modello Spice ai transistor.

Figura 23: Collegamenti circuitali e inserimento modelli Spice nel layout della Nand a 2 ingressi.

Effettuati i collegamenti ed inseriti i modelli Spice controlliamo che tutte le regole di layout siano state rispettato avviando il DRC (tasto F5 oppure dal menù “Tools / DRC / Check Hierarchically”), se il DRC viene superato avviciniamo il più possibile le strutture rispettando l’allineamento così da compattare il layout, Figura 24, ed inseriamo un’area di pwell e una di nwell per i contatti di vdd e gnd. Man mano che avviciniamo le strutture o creiamo nuovi componenti è consigliabile effettuare il DRC così da individuare eventuali problemi passo passo. Allarghiamo le strutture nwell e pwell appena inserite così da essere leggermente più grandi dei MOS sottostanti, in questo caso con il layout minimo inseriamo una X=27, ed effettuiamo l’export. Come spiegato precedentemente per la versione schematic bisogna cliccare sulla struttura ed utilizzare o il comando rapido ctrl+E oppure il menù “Export / Create Export” inserire il nome dell’input/output (Export name), nel nostro caso vdd e gnd, e la tipologia (Export characteristic), nel nostro caso power e ground. Per ingrandire il testo degli export creati, così da essere facilmente visibili, selezionare il testo (eventualmente aiutarsi con il comando ctrl) ed aumentare il text size a 6 units, Figura 24.

Figura 24: Creazione nwell e pwell ed export per le alimentazioni. Creiamo adesso, seguendo lo schematic,

Figura 24: Creazione nwell e pwell ed export per le alimentazioni.

Creiamo adesso, seguendo lo schematic, i collegamenti in Metal 1, Figura 25, e i collegamenti fra le gate in polisilicio, Figura 26.

Figura 24: Creazione nwell e pwell ed export per le alimentazioni. Creiamo adesso, seguendo lo schematic,

Figura 25: Collegamenti in Metal 1.

Figura 24: Creazione nwell e pwell ed export per le alimentazioni. Creiamo adesso, seguendo lo schematic,

Figura 26: Collegamenti in Polisilicio tra le gate.

Aggiungiamo adesso due contatti Metal 1-Poly che serviranno per gli ingressi a e b e creiamo i collegamenti con le gate, Figura 27. Avviamo il DRC, ci darà sicuramente errore sulla distanza fra le Metal-1 (per la tecnologia C5 On-Semi devono essere ad una distanza minima di 3 unit), modifichiamo allora il circuito per soddisfare le regole di layout date dalla tecnologia in uso, Figura

28.

Aggiungiamo adesso due contatti Metal 1-Poly che serviranno per gli ingressi a e b e creiamo

Figura 27: Inserimento contatti Metal 1-Poly e collegamenti.

Aggiungiamo adesso due contatti Metal 1-Poly che serviranno per gli ingressi a e b e creiamo

Figura 28: Spostamento contatti per rispettare le regole tecnologiche.

Per completare il circuito manca ancora il contatto per l’uscita del circuito y (vedi schematic) e il relativo esport degli input/output. Inseriamo quindi un Pin in Metal 1, Figura 29, e creiamo il collegamento con la Metal 1 al source del PMOS (drain dell’NMOS; vedi schematic), Figura 30. Ricordiamo sempre di avviare il DRC ad ogni modifica/inserimento nel circuito.

Per completare il circuito manca ancora il contatto per l’uscita del circuito y (vedi schematic) e

Figura 29: Inserimento Pin in Metal 1 per il contatto d’uscita y.

Per completare il circuito manca ancora il contatto per l’uscita del circuito y (vedi schematic) e

Figura 30: Collegamento in Metal 1 del Pin al circuito.

Spostiamo il Pin appena creato e collegato sopra il contatto di drain, e facciamo l’export degli ingressi a e b e dell’uscita y, Figura 31. Per fare l’export, come spiegato precedentemente, cliccare sul contatto/Pin da esportare ed usare il comando rapido ctrl+E oppure il menù “Export / Create Export” inserire il nome dell’input/output (Export name) e la tipologia (Export characteristic). Per ingrandire il testo degli export creati, così da essere facilmente visibili, selezionare il testo (eventualmente aiutarsi con il comando ctrl) ed aumentare il text size a 4 units.

Spostiamo il Pin appena creato e collegato sopra il contatto di drain, e facciamo l’export degli

Figura 31: Creazione export degli input/output nel layout.

Avviare il DRC, in caso di esito negativo correggere gli errori evidenziati, successivamente effettuare l’NCC (Network Consistency Checking), chiamato anche in altri tools LVS (Layout Versus Schematic). Come potrete vedere l’NCC segnala un errore, Figura 32, si aprirà in automatico una finestra contenente le informazioni sul tipo di errore, mismatch nella topologia relativa ad un NMOS, riguardando con attenzione lo schematic ed il layout e facendone il paragone ci accorgiamo di aver scambiato gli ingressi a e b. In questo caso l’errore non varia la funzionalità del circuito, scambiare gli ingressi di una nand non provoca variazioni, ma la funzionalità dell’NCC è proprio quella di evidenziare qualsiasi discrepanza fra schematic e layout. Scambiamo dunque gli ingressi, cancellandoli e ricreando l’export con i nomi opportuni, e riavviamo DRC ed NCC, come si può vedere dalla Figura 33 adesso il circuito ha superato l’NCC.

Figura 32: Failed NCC - Network Consistency Checking. Figura 33: Passed NCC. 26

Figura 32: Failed NCC - Network Consistency Checking.

Figura 32: Failed NCC - Network Consistency Checking. Figura 33: Passed NCC. 26

Figura 33: Passed NCC.

Se avete precedentemente installato il plug-in 3D e il necessario software Java3D potete visualizzare tridimensionalmente la struttura del vostro layout andando in “Window/3D Window/3D View”, il mouse è usato per ruotare la vista mentre la rotellina per lo zoom-in e zoom- out, in Figura 34 è mostrata la struttura 3D.

Se avete precedentemente installato il plug-in 3D e il necessario software Java3D potete visualizzare tridimensionalmente la

Figura 34: 3D Layout View.

Come per lo schematic anche il layout di una cella è simulabile con Spice seguendo le stesse procedure viste prima cioè inserendo i modelli, il testo per la simulazione Spice ed avviando la simulazione stessa. Vediamo adesso come poter instanziare una cella già costruita in tutte le sue parti (schematic, layout, icon, etc.) all’interno di un’altra, per fare questo useremo la cella nand_2 appena terminata.

Creiamo con ctrl+N oppure dal menù “Cell/New Cell” una nuova cella con vista schematic la chiamiamo Sim_nand_2. Instanziamo adesso la cella creata in precedenza utilizzando il comando rapido N oppure il menù “Cell/Place Cell Instance”, si aprirà una finestra dove bisogna scegliere la libreria da cui vogliamo instanziare la cella (Tutorial), ricordiamo che in Electric si possono creare celle/sistemi utilizzando librerie diverse, la vista che vogliamo utilizzare (schematic), selezioniamo la cella (nand_2) ed infine diamo il comando New Instance & Close, Figura 35. Il programma in automatico vi aprirà una finestra in cui vi chiede se volete instanziare la vista icona, Figura 35, cliccare si. Avrete adesso nello schematic l’icona della nand che avevamo creato prima, se volete vedere il circuito che sta all’interno cliccate sul componente e poi utilizzate il comando rapido ctrl+D oppure dal menù “Cell/Down Hierarchy/Down Hierarchy” per tornare al livello gerarchico superiore utilizzate il comando rapido ctrl+U oppure il menù “Cell/Up Hierarchy/Up Hierarchy”.

Creiamo con ctrl+N oppure dal menù “Cell/New Cell” una nuova cella con vista schematic la chiamiamo

Figura 35: Livelli Gerarchici – Instanziare una cella all’interno di un’altra.

Creiamo la vista layout di questa nuova cella, sempre con ctrl+N oppure dal menù “Cell/New Cell”, e la chiamiamo Sim_nand_2, instanziamo adesso il layout della nand_2 utilizzando il comando rapido N oppure il menù “Cell/Place Cell Instance”. Come potete notare dalla Figura 36 quando instanziate una cella con vista layout non vedrete il layout interno della cella, ma solamente gli export precedentemente creati con i relativi nomi. Quando all’interno del layout dobbiamo effettuare il routing delle strutture instanziate o inserire nuove strutture è bene poter vedere il layout dei livelli gerarchici inferiori così da ottimizzare gli spazi ed i collegamenti ed evitare soprattutto collegamenti involontari e non voluti, per fare questo bisogna selezionare il componente e cliccare sull’icona dell’occhio aperto in alto a destra nella barra dei menù oppure dal menù “Cell/Expand Cell Instance/One Level Down”, per tornare al livello gerarchico superiore cliccare sull’icona dell’occhio chiuso oppure dal menù “Cell/Expand Cell Instance/One Level Up”, Figura 37.

Creiamo la vista layout di questa nuova cella, sempre con ctrl+N oppure dal menù “Cell/New Cell”,

Figura 36: Livelli gerarchici - Instanziare una cella con vista layout.

Creiamo la vista layout di questa nuova cella, sempre con ctrl+N oppure dal menù “Cell/New Cell”,

Figura 37: Vista del layout all’interno dei livelli gerarchici.

4

Consigli utili per il Layout

Per creare un buon layout, facilmente utilizzabile gerarchicamente, è bene seguire alcune piccole regole. Vediamo allora come si può modificare il layout appena creato per renderlo “migliore”, innanzitutto creiamo una nuova vista layout andando nel menù Explorer sulla vista layout clicchiamo il tasto destro del mouse e selezioniamo “Create New Version of Cell”, Figura 38, avremo adesso una nuova cella di layout identica alla precedente denominata nand_2;1{lay}.

4 Consigli utili per il Layout Per creare un buon layout, facilmente utilizzabile gerarchicamente, è bene

Figura 38: Creazione di una nuova vista layout della Cella nand_2.

La prima accortezza da dover tenere quando si disegna un layout, così come quando si crea un circuito stampato, riguarda le linee di alimentazione e massa. Queste, infatti, devono sempre essere di dimensioni maggiori rispetto agli altri contatti/metal. Per modificare il nostro layout clicchiamo sul contatto di vdd e poi su quello di gnd e aumentiamo la Y size da 5 a 9, abbiamo così ottenuto delle linee di alimentazione/massa più grandi.

Un’altra regola generale nel disegno del layout è quella di mantenersi al livello metal più basso possibile, questo influisce direttamente negli export (input/output) della nostra cella. Dunque se non strettamente necessario o direttamente richiesto è buona norma non creare contatti o pin su livelli metal superiori (es. metal1/metal2 contact, metal1 pin, etc.). Nel nostro layout, ad esempio, avevamo creato per l’uscita y un pin in metal1 su cui poi avevamo creato l’export, così facendo al livello superiore abbiamo limitato l’area di contatto. Selezioniamo quindi il pin in metal1 dell’uscita y e cancelliamolo, selezioniamo il metal1/n active contact ed eseguiamo l’export direttamente, in questo modo abbiamo aumentato l’area di contatto per il routing al livello gerarchico superiore. In Figura 39 è mostrato il nuovo layout della cella nand_2 (nand_2;1{lay}) con le modifiche appena effettuate.

Un’altra regola generale nel disegno del layout è quella di mantenersi al livello metal più basso

Figura 39: Layout modificato della cella nand_2.

In Figura 40 è mostrata la vista al livello gerarchico superiore del nuovo layout della cella nand_2 (nand_2;1{lay}) da cui di evince l’aumento dell’area di contatto sia delle alimentazioni (vdd, gnd) sia dell’uscita y.

In Figura 40 è mostrata la vista al livello gerarchico superiore del nuovo layout della cella

Figura 40: Vista al livello gerarchico superiore della cella nand_2;1{{{{lay}}}}.

5

Creazione completa di una cella a partire dal VHDL

Un'altra importante funzione di Electric è quella di poter accettare listati VHDL di tipo strutturale, potere di questo fare simulazioni e riuscire, grazie a delle celle primitive, a generare il layout automatico della cella, ma analizziamo tutto con ordine, proviamo a creare un tipico circuito che si utilizza per gestire le abilitazioni esclusive, un decoder 2 ingressi 4 uscite. Per creare una cella VHDL come fatto precedentemente utilizziamo il comando ctrl+N oppure dal menù “Cell/New Cell” e la chiamiamo DEC_2x4 con vista VHDL, Figura 41.

5 Creazione completa di una cella a partire dal VHDL Un'altra importante funzione di Electric è

Figura 41: Creazione della cella DEC_2x4 con vista VHDL.

Per generare il VHDL di tipo strutturale del decoder dobbiamo conoscerne lo schema logico circuitale; per ricavarlo creiamo prima la tabella di verità del circuito, Figura 42, tramite questa otteniamo le espressioni funzionali delle singole uscite e con esse possiamo disegnare il circuito logico, Figura 43.

 

Input

 

Output

 

EN

Sel<1>

Sel<0>

Output<3>

Output<2>

Output<1>

Output<0>

0

X

X

0

0

0

0

1

0

0

0

0

0

1

1

0

1

0

0

1

0

1

1

0

0

1

0

0

1

1

1

1

0

0

0

Figura 42: Tabella di verità del DEC_2x4.

Figura 43: Schema logico circuitale del DEC_2x4. Grazie allo schema logico circuitale e alle primitive previste

Figura 43: Schema logico circuitale del DEC_2x4.

Grazie allo schema logico circuitale e alle primitive previste da Electric, che analizzeremo in dettaglio successivamente, possiamo scrivere il listato VHDL strutturale che viene riportato nella Figura 44.

Figura 43: Schema logico circuitale del DEC_2x4. Grazie allo schema logico circuitale e alle primitive previste

Figura 44: Listato VHDL di tipo strutturale del DEC_2x4.

A partire dal listato VHDL di tipo strutturale, grazie alla libreria sclib parte integrante di electric, si può generare automaticamente il layout della cella tramite il comando “Tools/Silicon Compiler/Convert Current Cell to Layout” con le impostazioni riportate in “File/Preference/Silicon Compiler”, Figura 45, prima di fare il layout automatico verificare che le impostazioni nel vostro PC siano uguali a quelle riportate in figura.

A partire dal listato VHDL di tipo strutturale, grazie alla libreria sclib parte integrante di electric,

Figura 45: Impostazioni del Silicon Compiler per il Layout automatico.

Utilizzando le impostazioni standard si ottiene il layout automatico riportato in Figura 46, si nota che esso non è ottimizzato (Area Minima) questo è un limite del layout automatico, si può però agendo sulle impostazioni del Silicon Compiler migliorare il layout risultante.

Figura 46: Layout Automatico con impostazioni standard. 36

Figura 46: Layout Automatico con impostazioni standard.

Il principale parametro su cui si può agire è il Number of row of Cell (default=4), se modifichiamo questo parametro ponendolo pari a 2 e riavviamo il Silicon Compiler per il layout automatico si può vedere dalla Figura 47 che abbiamo ottenuto un layout più compatto ma ancora migliorabile. In particolare notiamo che le linee di alimentazione e massa sono della stessa dimensione delle altre, che i pin di input/output sono annidati all’interno, che i contatti fra metal 1 e metal 2 delle linee di alimentazione sono singoli ed infine per una maggiore intelligibilità dovremmo aumentare, come fatto in precedenza, le scritte degli export di input/output. Per modificare la dimensione delle linee di alimentazione dal menù delle preferenze bisogna modificare i valori del Power wire width e del Main power wire width e porli uguali a 9, tutte le altre modifiche bisogna farle manualmente direttamente sul layout, in particolare la dimensione dei contatti fra metal 1 e metal 2 deve essere 9x9 e la dimensione del testo degli export è pari a 8 units; il layout completo di tutte le modifiche è riportato in Figura 48.

Il principale parametro su cui si può agire è il Number of row of Cell (default=4),

Figura 47: Layout automatico con impostazioni modificate.

Figura 48: Layout Automatico con successive modifiche manuali per l’ottimizzazione. 38

Figura 48: Layout Automatico con successive modifiche manuali per l’ottimizzazione.

Analizziamo adesso con maggiore dettaglio la libreria sclib, questa comprende 15 primitive:

Inverter;

And a 2, 3 e 4 ingressi;

Nand a 2, 3 e 4 ingressi;

Or a 2, 3 e 4 ingressi;

Nor a 2, 3 e 4 ingressi;

Xor a 2 ingressi;

Flip Flop di tipo D.

Per le dichiarazioni di tali primitive si rimanda alla guida di Electric (capitolo 9, paragrafo 12), come esempio si riporta la dichiarazione della and a 3 ingressi utilizzata in precedenza: component and3 port(a1, a2, a3 : in bit; y : out bit); end component; . La libreria sclib non è né completa, né ottimizzata, infatti comprende solamente il layout non ottimizzato delle celle primitive elencate in precedenza, mancando di schema elettrico e simbolo; tale libreria è inserita in Electric per permettere la comprensione del Silicon Compiler. Per poter sfruttare appieno le potenzialità di Electric si deve creare una propria libreria di celle standard completa di tutte le viste (schematic, symbol e layout), se la cella non è completa in tutte le viste quando la instanziamo in un livello gerarchico superiore darà sempre un errore di NCC non facilmente comprensibile, questo è ciò che avviene se provate ad utilizzare la sclib preinstallata in Electric. Per creare una propria libreria di Standard Cell dopo aver creato le celle con tutte le viste per identificarle come standard cell si deve andare nel menù “Cell/Cell Properties” e selezionare “Standard cell in a cell library”. Avendo una libreria di Standard Cell completa si possono facilmente utilizzare senza errori dal menù View il comando “Make Schematic View” che crea lo schematico a partire dal layout. In conclusione riportiamo i paragrafi della guida ufficiale di Electric dove poter trovare gli argomenti affrontati:

3.11.2 – Breve descrizione della vista VHDL e del comando “Make VHDL View”;

4.9 – Spiegazione della finestra di testo, editor del VHDL, ed esempio di listato;

9.5.2 – Spiegazione del simulatore ALS che simula a partire dal VHDL, spiegazione di

come creare una nuova primitiva in VHDL/Verilog; 9.12 – Silicon Compiler, creazione del layout partendo dal VHDL strutturale.

6

Come inserire una nuova tecnologia in Electric

Quando vogliamo produrre i nostri progetti dobbiamo utilizzare una tecnologia specifica che scegliamo fra quelle previste dalla foundry a cui ci rivolgiamo (OnSemi; TSMC; IMEC; IBM), nasce dunque l’esigenza di inserire una nuova tecnologia o modificare una tecnologia esistente, Electric prevede entrambe le possibilità. Per poter creare una nuova tecnologia bisogna innanzitutto avere i file tecnologici, questi sono distribuiti dalle foundries previa registrazione, identificazione e richiesta; i file tecnologici possono essere di tipo testuale (*.pdf), librerie geometriche (*.gds; *.gds2; *.lef – sempre leggibili tramite notepad o word), etc. Dopo aver ricevuto i file tecnologici per creare una nuova tecnologia utilizziamo il “Technology Creation Wizard”, per avviarlo andiamo in “Edit/Technology Editing/Tecnology Creation Wizard”, Figura 49, questo tool prevede la creazione di una nuova tecnologia tramite l’inserimento di alcuni semplici parametri.

6 Come inserire una nuova tecnologia in Electric Quando vogliamo produrre i nostri progetti dobbiamo utilizzare

Figura 49: Tecnology Creation Wizard.

Il primo pannello, denominato General, descrive le caratteristiche generali della tecnologia:

Nome della Tecnologia; Eventuale breve descrizione; La Unit Size (nm) è il numero di nanometri per quadrato della griglia; La Resolution è la più piccola grandezza caratteristica permessa; Il Psubstrate process controlla la generazione delle well; L’Horizontal transistor controlla l'orientamento dei transistor.

Gli altri pannelli descrivono le dimensioni di ogni tipo di layer, ad esempio la regione attiva (Active) riportata in Figura 50, il polisilicio (Poly), le metal, etc; tutte le dimensioni possono essere trovate nei file tecnologici.

Gli altri pannelli descrivono le dimensioni di ogni tipo di layer, ad esempio la regione attiva

Figura 50: Technology Creation Wizard, dimensioni dell’Active Layer.

I valori scritti possono essere salvati in un file di testo effettuando il Save Parameters, tali parametri possono essere ricaricati effettuando il Load Parameters, quando si è completato tutto il Technology Creation Wizard si può finalmente scrivere il file tecnologico vero e proprio utilizzando il comando Write XML, questo scriverà un file *.xml. Nota Bene: Il file *.xml deve riportare lo stesso nome del Technology Name che si è inserito nel pannello General, altrimenti genererà un errore in fase di caricamento del file stesso. Generato il nuovo file tecnologico *.xml possiamo caricarlo all’interno di Electric andando in “File/Preference/Technology/Added Technologies” e cliccare su Add, Figura 51.

Gli altri pannelli descrivono le dimensioni di ogni tipo di layer, ad esempio la regione attiva

Figura 51: Add Technology.

Per modificare una libreria esistente bisogna utilizzare il Technology Editing, in particolare si deve prima convertire la tecnologia in libreria con il comando “Edit/Tecnology Editing/Convert Technology to Library for Editing”, successivamente modificare la libreria e poi riconvertire la libreria in tecnologia con il comando “Edit/ Tecnology Editing/Convert Library to Technology”. Per maggiori dettagli si rimanda alla guida di Electric Capitolo 8 Paragrafi 1 e 2.