Spice simulatie#
In deze cursus bestuderen we elektronische circuits. Hiervoor is het belangrijk dat we deze elektronische circuits ook in detail en correct kunnen simuleren. Hiervoor gebruiken we een implementatie van SPICE. SPICE staat voor Simulation Program with Integrated Circuit Emphasis
. SPICE is in de jaren 1960 ontwikkeld door het Department of Electrical Engineering and Computer Sciences in UC Berkeley, California, USA en toen reeds vrijgegeven als een eerste soort open source avant la lettre.
Ondertussen zijn er al meer dan 100 verschillende implementaties van spice. Hier vind je een overzicht van een aantal implementaties. De motor van deze implementaties is nog steeds zo goed als dezelfde van deze van de originele implementaties, namelijk de modified nodale analyse (MNA). De verschillen tussen deze implementaties zijn in eerste instantie de user interface en de manier waarop de verschillende modellen geïmplementeerd zijn.
In dit jupyterbook gebruik ik PySpice. Dit is een python interface naar ngspice. Als je conda en git geïnstalleerd hebt en de github repository van dit boek lokaal gecloned hebt, kan je de volledige PySpice omgeving die in dit boek gebruikt wordt installeren door de volgende commandos uit te voeren in de directory van deze repository:
git clone https://github.com/jangenoe/InteractieveCursus
cd InteractieveCursus
conda env update -f ./binder/environment.yml
conda activate KULeuven
ipython kernel install --user --name=KULeuven
pyspice-post-installation --install-ngspice-dll
Vervolgens kan je aan de hand van het commando jupyter lab
de verschillende notebooks openen, aanpassen en simuleren.
Onafhankelijk van wat de eigenlijke user interface is van de spice implementatie die je gekozen hebt, zal de user-interface normaal het ingebrachte circuit vertalen naar een of meerdere spice text files. Deze files kunnen zowel circuit componenten als spice directives bevatten. Om fouten in een circuit terug te vinden is het meestal handig deze files te analyseren en de verschillende knopen te vergelijken met de knopen op je schema.
Voor wat betreft de circuit componenten is het zo dat de eerste letter van de naam van de component zijn type aangeeft. Hieronder vind je een lijstje van de passieve componenten met telkens de eerste letter die gebruikt wordt om het type aan te geven.
Weerstand (R)
Capaciteit (C)
Spoel (L)
Gekoppelde spoelen (K)
Transmissie lijn
zonder verliezen(T)
met verliezen (O,Y,P)
RC lijnen (U)
Schakelaars
gecontrolleerd door spanning (S)
gecontrolleerd door stroom (W)
Diodes (D)
Bipolaire transistors (Q)
MOS transistors (M)
JFET (J)
MESFET (Z)
code models (A)
subcircuits (X)
Onafhankelijke spanningsbron (V)
Onafhankelijke stroombron (I)
Spanningsgecontrolleerde spanningsbron (E)
Spanningsgecontrolleerde stroombron (G)
Stroomgecontrolleerde spanningsbron (H)
Stroomgecontrolleerde stroombron (F)
Voor elk van deze bovenstaande passieve en actieve elementen kan er een modelkaart (.model
) opgemaakt worden waarin alle parameter variaties uitgewerkt worden. Een modelkaart behoort to de directives en begint daarom met een .
. Ook voor elk van de verschillende analyses is er een kaart ter beschikking. Hieronder een overzichtje van de verschillende analyses.
Operating point analyse (.op)
Niet-lineare DC analyse (.dc)
Niet-lineare transient analyse (.tran)
Lineare klein signaal AC Analyse (.ac)
Pool en zero analyse (.pz)
Noise analyse (.noise)
Sensitiviteit analyse (.sens)
Klein signaal distortie analysis (.disto)
Monte-Carlo analyse
De eenheden die in spice gebruikt worden komen overeen met de standaard eenheden en er worden ook de standard prefactors gebruikt zodat er geen nood is aan de wetenschappelijke notatie. Spice maakt wel geen onderscheid tussen hoofd en kleine letters, wat een probleem kan geven om het verschil aan te geven tussen milli en mega. Daarom is er gekozen voor de x
of de meg
.
atto (a) 10-18
femto (f) 10-15
pico (p) 10-12
nano (n) 10-9
micro (u) 10-6
milli (m) 10-3
kilo (k) 103
mega (x) of (meg) 106
giga (g) 109
Om aan te geven hoe we gebruik maken van spice voor de circuit simulatie, kijken we naar een voorbeeld van een verschilversterker op IC. Het basisschema van deze versterker is aangegeven in Fig. 1. Het eerste wat we moeten doen in dit circuit is de verschillende knopen een nummer (of een naam) te geven. Het resultaat waarbij elke knoop een naam gekregen heeft zien we in Fig. 2.
Fig. 1 Basisschema van de verschilversterker.#
Fig. 2 Basisschema van de verschilversterker, waarbij de knopen genummerd zijn.#
De overeenkomende SPICE code voor dit circuit zie je in Spice Listing 1. Het eerste deel van deel beschrijving beschrijft de externe aangelegde spanningsbronnen. De naam van elke spanningsbron in SPICE begint met een V. We hebben de voedingsspanning (VDD) van 5 Volt tussen knoop 1 en knoop 0, de spanningsbronnen aan de positieve (10) en de negatieve (11) ingangsklem en tenslotte een biasspanning (VB) aan klem 9.
* CIRCUIT Spice file van een verschilversterker
VDD 1 0 DC=5.0
VPLUS 10 0 DC=2.5
VMIN 11 0 SIN(2.5 50U 1E6) DC=2.5
VB 9 0 DC=1.5
C3 3 0 5.914fF
C4 4 0 14.737fF
C5 5 0 10.124fF
C6 6 0 14.434fF
C8 8 0 7.919fF
C9 9 0 15.257fF
C10 10 0 1.872fF
C11 11 0 1.688fF
C25 1 5 1fF
MN1 3 5 0 0 NMOS w=1.50u L=0.50u
MN2 0 5 5 0 NMOS w=1.50u L=0.50u
MN3 8 10 4 0 NMOS w=1.50u L=0.50U
MN4 0 9 8 0 NMOS w=4.50u L=0.50U
MN5 6 11 8 0 NMOS w=1.50u L=0.50U
MP1 1 4 3 1 PMOS w=3.50u L=0.50U
MP2 4 4 1 1 PMOS w=3.50u L=0.50U
MP3 1 6 5 1 PMOS w=3.50u L=0.50U
MP4 6 6 1 1 PMOS w=3.50u L=0.50U
.MODEL NMOS NMOS(LEVEL=1 VTO=0.50 KP=90.000E-6 LAMBDA=0.001)
.MODEL PMOS PMOS(LEVEL=1 VTO=-0.45 KP=55.000E-6 LAMBDA=0.001)
Vervolgens vinden we in de SPICE listing de capaciteiten (C) van alle knopen ten opzichte van de grondknoop (0) terug. De waarde van deze condensatoren is bekomen nadat de volledige lay-out van het chipontwerp is getekend. Daarna is er door een extractfunctie de overlap van de metalisatie van elk van deze knopen met het grondvlak bepaald, en op basis hiervan is de condensatorwaarde bepaald. We vinden ook een parasitaire condensator terug ten opzichte van de voeding, i.e. C25 die staat tussen knoop 5 en de voeding. Eigenlijk zijn deze condensatorwaardes voor een eerste simulatie van de versterking niet belangrijk. Deze waardes worden enkel belangrijk als je een exacte waarde wil uitrekenen tijdens een simulatie bij hogere frequenties.
Opdracht 1 (Begrijp de parasitaire capaciteiten van dit ontwerp)
In de spice code Spice Listing 1 werden de parasitaire capaciteiten ge-extraheerd op basis van een werkelijke lay-out van het circuit. Voeg alle capaciteiten toe op het schema van Fig. 2
Vervolgens hebben we de nMOS transistors van dit circuit. Deze zijn:
MN1 3 5 0 0 NMOS w=1.50u L=0.50u
MN2 0 5 5 0 NMOS w=1.50u L=0.50u
MN3 8 10 4 0 NMOS w=1.50u L=0.50U
MN4 0 9 8 0 NMOS w=4.50u L=0.50U
MN5 6 11 8 0 NMOS w=1.50u L=0.50U
We kunnen deze nMOS transistors op het schema lokaliseren (zie Fig. 3).
Fig. 3 nMOS transistors van de verschilversterker#
Daarna volgen de pMOS transistors van dit circuit. Deze zijn:
MP1 1 4 3 1 PMOS w=3.50u L=0.50U
MP2 4 4 1 1 PMOS w=3.50u L=0.50U
MP3 1 6 5 1 PMOS w=3.50u L=0.50U
MP4 6 6 1 1 PMOS w=3.50u L=0.50U
Ook deze transistor kunnen we op het schema lokaliseren (zie Fig. 4). We herkennen hierin 2 stroomspiegels die de stromen uit de knopen 6 en 4 respectievelijk omzetten in stromen uit de knopen 5 en 3.
Fig. 4 pMOS transistors van de verschilversterker#
Tenslotte hebben we ook de transistormodellen nodig van de NMOS
en de PMOS
. Deze kan je zien in de model kaarten gegeven in Spice Listing 4. De modellen behoren to de Spice directives
en alle directives beginnen ze een .
. Hier kiezen we voor het meest eenvoudige level=1 model. Om moderne transistors op een accurate wijze te kunnen simuleren worden er veel complexere modellen (bv BSIM4 models) gebruikt.
.MODEL NMOS NMOS(LEVEL=1 VTO=0.50 KP=90.000E-6 LAMBDA=0.001)
.MODEL PMOS PMOS(LEVEL=1 VTO=-0.45 KP=55.000E-6 LAMBDA=0.001)
Wanneer we nu een simulatie uitvoeren met een signaal van 50 \(\mu V\) aan de ingangsklem 11, krijgen we een signaal van meer dan 40 \(mV\) aan de uitgangsklem 3 (zie Fig. 5). Dit geeft dus een versterking van meer dan 800.

Fig. 5 Bekomen spanningen aan de ingang (boven) en de uitgang (onder) van de verschilversterker.#