Grundwissen
Spice ist ein analoger Schaltkreis-Simulater der es erlaubt, Schaltkreise beliebiger Art zu Designen und zu simulieren. Weiterhin besteht die Möglichkeit, gelayoutete Schaltkreise in ein Spice-Format zu extrahieren und diese dann dort auf ihr richtiges Schaltverhalten zu überprüfen. Ein detailiertes Handbuch über Spice ist hier zu finden.
Neben der direkten Simulation von Schaltverhalten ist es auch möglich, physikalische Modelle als elektrische Modelle zu beschreiben. Beispiel wäre hier z.B. eine Biegebalkensensor (300mm x 100mm) zur Messung von Beschleunigungen. Diese Differentialgleichung kann auf einen elektrischen Schaltkreis abgebildet werden. Somit ist es auch möglich, gekoppelte Systeme aus Mikroelektronik und Mikromechnaik zu simulieren (=> Mikrosystemtechnik / Systemintegration)
Spice ist ein Programm, das man gut durch das arbeiten mit Beispielen lernen kann. Wir beschränken uns auf den CMOS-Prozeß, der als bekannt vorausgesetzt wird. Spice verfügt über eingebaute Transistor-, Widerstands- und Kapazitätsmodelle. Diese Modelle werden ausschließlich in Textform beschrieben. Die Verbindung zwischen den einzelnen Elementen (Devices) findet durch eine Netzliste statt. Gleiche Zahlen oder Wörter bedeuten, daß diese Punkte gleich sind und damit verbunden sind. Zunächst ein Beispiel:

Erklärung:
M-Device gibt Spice an, welche Art von Transistor es sich handelt. M ist ein reservierter Buchstabe und bedeutet, daß es sich hier um ein MOSFET-Transistor handelt. Weiterhin muß jedes Element einzigartig sein. Daher müssen bei mehreren Elementen die Transitoren mit laufenden Nummern unterschieden werden. Neben den M-Element (MOSFET), gibt es noch weitere Modelle mit reservierten Buchstaben. Diese wären:
| M Drain Gate Source Substrat <Typ> W=<Gateweite> L=<Gatelänge> | MOSFET-Transistor |
| Q Drain Gate Source Substrat <Typ> W=<Gateweite> L=<Gatelänge> | Bipolar-Transistor |
| R In Out <Ohm> | Widerstand |
| C In Out <Kapazität> | Kondensator |
Die Bezeichner Drain, Gate, Source, Substrat, In und Out sind allesamt Bezeichner für die Netzliste und verknüpfen die Elemente untereinander. <Typ> gibt das zu verwendende Modell an. Spice verfügt über ein default-Transistor-Modell, das beim CMOS-Prozeß durch CMOSN, CMOSP aktiviert werden kann. Dieses ist jedoch nur ratsam, wenn nur qualitative Aussagen getroffen werden sollen, da diese keine Rücksicht auf den verwendeten Prozeß nehmen können. Für qantitative Aussagen ist daher das prozeßspezifische Modell zu verwenden. Später dazu mehr. Weiterhin müssen bei den Transistoren die Dimensionen festgeletgt werden. Dies geschieht über die Angabe von Gateweite und Gatelänge. Verwendete Einheit ist im Normalfall u für mm. Bei den Widerständen muß noch die Größe des Widerstandes angegeben werden. Die Größenangabe erfolgt hier in k oder M für kOhm oder MegaOhm. Die Kondensatoren müßen ebenfalls eine Größe erhalten und werden mit p oder f für PicoFarad oder FemtoFarad angegeben. Nun ein Beispiel:
| M1 3 2 1 1 pmos W=6.0u L=2.0u |
| Q1 0 3 1 1 bipol W=20u L=2u |
| R1 3 0 1k |
| C1 3 0 100f |
Das angegebene Beispiel macht technologisch gesehen nicht viel Sinn, enthält jedoch den zu verwendenden Syntax.
Nun gehen wir zur Struktur eines Spice-Files über...
| *** Header | 1. Zeile ist immer Kommentar, * leitet Kommentar ein |
| <models> | die zu verwendenden Transitor-Modelle |
| <options> | Optionen (Geanauigkeit,...) |
| <Circuit-Description> | Schaltkreis mit allen Elementen |
| <Operation> | Was soll simuliert und ausgegeben werden |
| .END | Jeder Spice-File wird mit .END abgeschlossen |
Dazu ein Beispiel, ein Inverter mit einer kapazitiven Belastung vom 30fF am Ausgang. Es soll sich dabei um einen digitalen Inverter handeln, der mit den minimalsten Strukturgrößen des 1.2mm-Prozesses arbeiten soll.
| *** Digital Inverter, minimum Size 1.2um-CMOS, CKarl 1998 |
| *** MODELS |
| .MODEL nmos nmos LEVEL=3 PHI=0.700000 TOX=3.1400E-08 XJ=0.200000U TPG=1 |
+ VTO=0.6474 DELTA=1.6230E+00 LD=5.8150E-09 KP=8.0236E-05 |
+ UO=729.6 THETA=1.2540E-01 RSH=9.0910E-02 GAMMA=0.5999 |
+ NSUB=1.3110E+16 NFS=6.5000E+11 VMAX=2.1000E+05 ETA=9.9760E-02 |
+ KAPPA=1.5680E-01 CGDO=9.5924E-12 CGSO=9.5924E-12 |
+ CGBO=2.9552E-10 CJ=2.84E-04 MJ=0.517 CJSW=1.97E-10 |
+ MJSW=0.100 PB=0.99 |
.MODEL pmos pmos LEVEL=3 PHI=0.700000 TOX=3.1400E-08 XJ=0.200000U TPG=-1 |
+ VTO=-0.8483 DELTA=1.8430E+00 LD=1.0280E-09 KP=1.9212E-05 |
+ UO=174.7 THETA=7.7780E-02 RSH=1.0500E-01 GAMMA=0.3635 |
+ NSUB=4.8130E+15 NFS=6.5000E+11 VMAX=4.0030E+05 ETA=1.3040E-01 |
+ KAPPA=9.9940E+00 CGDO=1.6958E-12 CGSO=1.6958E-12 |
+ CGBO=3.1527E-10 CJ=3.02E-04 MJ=0.497 CJSW=2.59E-10 |
+ MJSW=0.100 PB=0.99 |
| *** Default Options ok! |
| *** Circuit Description... |
| M1 OUT IN 1 1 pmos W=3.6u L=1.2u |
| M2 OUT IN 0 0 nmos W=1.8u L=1.2u |
| C1 OUT 0 30fF |
| *** OPERATION |
| VDD 1 0 DC 5V |
| VIN IN 0 PULSE(0V 5V 50ns 1ns 1ns 10ns 30ns) |
| .TRAN 2n 150n |
| .PRINT TRAN v(IN) v(OUT) |
| .END |
Erklärung:
Die Modelle für den jeweiligen Prozess werden von den Halbleiterherstellern auf dem Internet angeboten. Diese müssen nur kopiert und in den Spice-File eingefügt werden.
Die Default-Parameter für die Optionen des Simulators genügen den meisten Anforderungen und müssen nur für spezielle Anwendungen (Simulation im subthreshold) geändert werden.
Der Schaltkreis (Circuit) ist ein simpler Inverter mit einer kapazitiven Belastung von 30fF am Ausgang. Eingang ist die Node IN, Ausgang die Node OUT. Der Substratkontakt ist direkt mit den Spannungsversorgungen Node 1 (VDD) und Node 0 (GND) verbunden.
Auf den Abschnit Operation will ich noch genauer eingehen. Dieser Abschnitt enthält den Input für den Schaltkreis. V ist ein reservierter Buchstabe und kennzeichnet eine Spannungsquelle. Eine Stromquelle wird im Gegenzug mit I gekennzeichnet. VDD ist die Spannungsversorgung des Schaltkreises. Dieses ist dran zu erkennen, daß die Node 1 in der VDD-Beschreibung auch im Schaltkreis vorkommt und somit eine Verbindung zwischen Spannungsquelle und Schaltkreis besteht. Node 0 ist GND. VIN ist ebenfalls eine Spannungsquelle. Diese erzeugt über den PULSE-Kommando periodische Spannungspulse. Diese werden über die Node IN auf den Input des Inverters gelegt. Das .TRAN-Kommando teilt den Simulator mit, daß es sich um eine zeitliche (transient) Analyse handelt. Der maximal zugelassene Zeitschritt ist hier 2 Nanosekunden. Die Simulation ist nach 150 Nanosekunden vorüber. Das .PRINT TRAN-Kommando gibt noch die zeitlichen Werte aus. Der Spice-File muß mit .END geschlossen werden.
Um die genau Bedeutung der benutzten Kommandos zu erfahren, hilft das Spice-Manual.
Wie wird eine Simulation gestartet?
Auf der Unix-Ebene kann man mit dem Kommando Spice3 den Spice-Interpreter aufrufen. Um eine Simulation zu starten, sind folgende Schritte innerhalb des Spice-Interpreters notwendig:
| source <name+ext> | lädt den Spice-File |
| edit | ermöglicht ein editieren des Spice-Files |
| run | startet die Simulation |
| load | zeigt die internen Variablen an => Output |
| plot <variable(n)> | gibt die Variable am Bildschirm aus |
| save <name+ext> | speichert die Simulationsergebnisse |
| load <name+ext> | lädt gespeicherte Simulationsergebnisse |
| quit | beendet das Programm |
Für den Spice-Interpreter sind keine weiteren Angaben mehr nötig, da dieser nur ein auszuführendes Programm für den Spice-File ist.
karl@vlsi.bu.edu ,11.09.98