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.

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.

_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 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.

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. 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.

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.#