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.
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.
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 metaisatie 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 frequentie.
(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).
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.
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
.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.