Spice simulatie

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.

_images/e1c840baf1ddadde6629dcb0bdad4b0dbd8834cc603419645497e9185258d3bd.svg

Fig. 1 Basisschema van de verschilversterker.#

_images/5c48340c9bc2be4b754a8b59862409678253e3d4d2dded2e77748716b2b80e03.svg

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.

Spice Listing 1 basiscircuit van de verschilversterker#
* 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.

Vervolgens hebben we de nMOS transistors van dit circuit. Deze zijn:

Spice Listing 2 nMOS transistors van de verschilversterker#
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).

_images/bb01e0a1262299a7057604aea77fa4e15a32d5a0ac6da330b10f5ed2701e7a14.svg

Fig. 3 nMOS transistors van de verschilversterker#

Daarna volgen de pMOS transistors van dit circuit. Deze zijn:

Spice Listing 3 pMOS transistors van de verschilversterker#
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.

_images/669732983c9f45d3df93dce13c914bbcd5c5c1ae22aac793d9cdbeef0df5ec09.svg

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

Spice Listing 4 Eenvoudige transistormodellen#
.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.

_images/dd55f0ff1653d9bd8fb0c07752d69738f4585c07952c90d2eb2db7cfd306ec87.png

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