2.1. Cadence
Når dere skal simulere kretsene anbefaler vi å bruke Cadence. Hvis noen vil bruke en Spice simulator (HSPICE, AIMSPICE) er det også greit, men det er en stor fordel å bruk Cadence siden dette er det verktøyet som brukes mest her på Mikroelektronikk.
For de av dere som ikke har brukt Cadence før, finnes det introduksjonsvideoer for Cadence AMS 0.35 design kit.
Husk å laste ned TSCC Codec for å å spille av AVI-filene
Cadence har tidligere bare vært tilgjengelig på Solaris-platformen. På grunn av utfasing av Solarismaskiner på instituttet, har vi vært tvunget til å kjøre Cadence på dedikerte servere (harn og vlsi (nipingr)). En naturlig årsak av dette, er mange samtitige brukere innlogget på samme maskin. Denne måten fungerer bedre desto færre brukere som er innlogget, og med økt studentmasse har vi merket at kapasiteten på Cadenceserverne ikke strekker til. Samtidig utnytter man i dårlig grad den lokale regnekapasiteten til maskin man sitter på.Linux er idag innstallert på en stor del av IFIs maskiner. Derfor var det naturlig å bruke denne platformen for å kjøre Cadence. Både AMS' 0.35um- (v3.70) og STMs 90nm-prosess (v5.0a og v4.01b) er nå installert på Linux. Design-kitene bruker henholdsvis Cadence v5.1.41 og v5.0.33. Les flere Cadence tips og triks her.
Oppstart på Linux med AMS Design kit 3.70
1. Lag din egen cadence katalog: mkdir cadence035
2. Kopier oppstartsskriptet /hom/mes/cadsoft/des_kits/ams3.70/amslnx35.csh til din lokale Cadence AMS 0.35um-katalog som du nettopp har laget.
For å kjøre dette scriptet skriv amslnx35.csh i terminal vinduet. Cadence skal nå starte opp. Les mer om Cadence i kompendiet Cadence oppstart og skjemategning skrevet av Dag T. Wisland.Når dere har startet opp Cadence og kommet inn i Library Manager, lager dere et nytt 'library' som dere f.eks kan kalle INF4410. De transistorene dere skal simulere på, finnes i PRIMLIB og de heter nmos4 og pmos4. Husk at bulk på transistoren skal kobles henholdsvis til gnd og vdd.
![]()
Figur 1: Cadence kretseksempel
Etter dere har laget kretsen velger dere 'tools' og 'Affirma Analog Design Enviroment' se figur 2.
![]()
Figur 2: Affirma Analog Circuit Design Environment
Velg Simulation, og velg dc. Vi skal KUN bruke DC-simuleringer (ikke transient analyse). Se figur 3.
![]()
Figur 3: Cadence DC-simulering
Etter dere har kjørt “netlist and run” under 'Simulation', får dere opp browser vinduet.som vist i figur 4.
Figur 4: Browser
For å lagre dataene til en fil som vi kan lese i matlab, velg 'Tools' => 'Table' som figur 4 viser.
Velg start og sluttverdi som dere skal plotte fra. og oppløsningen som dere ønsker, se figur 5.
![]()
Figur 5. Result Display
![]()
Figur 6. Resultat tabell
Etter dere har fått opp “Table”, velg å lagre som 'Save As CSV', fordi da kan dataene importeres inn i matlab. Se også Cadence dokumentasjonen her.
2.2. Matlab
Når dere skal måle på kretsene skal dere bruke Matlab for å styre instrumentene, hvis dere ikke er familiære med Matlab, anbefaler jeg og lese Getting Started with Matlab. Måleinstrumentene er koblet til PC'en v.h.a GPIB (General Purpose Interface Bus). Hvert måleinstrument har sin egen ID (gult merke).
Spennigskilden Agilent/HP E3631 har Id=5, strømmåler/spenningsmåler Agilent/HP 34401 har id=6, strømmåler/spenningsmåler Keitley 617/6512 har id=8, funksjonsgenerator Agilent/HP 33120 har id=10 og det digitale scopet Agilent/HP 54622D har id=22.
For at GPIB på Linux skal fungere, må følgende gjøres:
Sjekk om GPIB-driverne er installert på din Linux-maskin:
>/sbin/lsmod |grep tnt4882
tnt4882 28164 0
nec7210 23296 1 tnt4882
gpib_common 41540 2 tnt4882,nec7210>ll /dev/gpib0
crwxrwxrwx 1 root root 160, 0 2006-07-31 09:10 /dev/gpib0
Filen .matlab7rc skal kopieres til ditt hjemmeområde, $HOME. Denne kan kopieres fra ~mes/src/matlab/gpib/linux/util/
Matlab startes fra samme lokasjon, ved å skrive matlab. Etter at du har startet Matlab, skal du sette følgende kommando i matlab:>addpath(genpath('~mes/src/matlab/gpib/linux'));
Da settes riktige stier til GPIBmex-filene.
Scriptene på ~mes/src/matlab/gpib/linux/M* er modifiserte versjoner av script lagd for GPIB på solaris. Script for instrumenter kan kopieres fra ~mes/src/matlab/gpib/sun/GPIBM/ og modifiseres for å brukes til GPIB på Linux. Det er èn fundamental forskjell mellom scriptene for de forskjellige platformene. I steden for å bruke navnet på instrumentet som identifikator, bruker GPIB-scriptene på Linux adressen til instrumentet som id. Ellers er scriptene nesten identiske, bortsett fra at feilmeldinger er flyttet til de underliggende mex-funksjonene.
Eksempel på bruk av script i matlab
Dette enkle scriptet ,Take1.m setter en spenning på inngangen med Power supply HP3631 og måler strømmen med Keithley 617.
For å bruke dette scriptet i matlab skriver dere [Vin,Iout] = Take1(5,0,5,50) i matlab kommando vinduet. Denne funksjonen returnerer Vin og Iout. Husk å lagre dataene dine, da er det enklere å bearbeide dataene senere. Bruk save filename Vin Iout da lages en filename.mat fil, og når du skal hente dataene igjen bruker du load filename. I dette tilfellet er Vdd satt til 5 Volt, inngangen starter på 0V (Vmin) og stopper på 5V (Vmax), oppløsningen settes av n = 50, d.vs 50 målepunkter. (Hvis dere bruker en Keithley 6512 til å måle strømmen med, bytter dere ut alle forekomster i scriptet av K617 med K6512).
Det er viktig at instrumentene er initialisert før dere begynner å måle, dette gjøres i linje 6 og 7. Så må man sette måleinstrumentet i riktig målemodus, d.v.s om man ønsker å måle strøm eller spenning.(linje 9). Så må man skru på utgangene på power supplyet(linje 11). I linje 13 lages et inngangsignal Vin, med oppløsning n. Linje 15 setter Vdd på måle-IC'en, dette er viktig å huske at IC'en må ha Jord og Vdd tilkoblet for å virke, her bruker vi kanal 2 på power supplyet(P25V). I for løkken stepper vi gjennom alle verdiene for Vin (linje 18), og for hver verdi av Vin, måler vi utgangsstrømmen Iout (linje 22). Det er lagt inn en pause for å være sikker på at utgangssignalet er stabilt når vi leser det av (linje 20).
Når vi måler strøm er det ofte at man ønsker en logaritmisk skala, derav 'semilogy' i linje 25. Hvis man vil plotte med en lineær skala bruker man 'plot' isteden for.
Etter man har målt ferdig er vanlig at man skrur av forsynningspenningene for å ikke ødelegge kretsene når man skal koble om(linje 31).
1 - function[Vin,Iout] = Take1(Vdd,Vmin,Vmax,n)
2 - % Use [Vin,Iout] = Take1(Vdd,Vmin,Vmax,n)
3 - % Example [Vin,Iout] = Take1(5,0,5,50)
4 - % henningg@ifi.uio.no 1/09/20045 - % Initialize the instruments
6 - K617_Init
7 - HPE3631_Init8 - % Measure Current with Keithley 617
9 - K617_SetMode('A')10 - % Enables the outputs on the Power Supply HPE3631
11 - HPE3631_Operate;12 - % Make a input vector
13 - Vin = [Vmin:(Vmax-Vmin)/n:Vmax];14 - % Set Vdd Channel 2 on HPE3631
15 - HPE3631_SetVolt(2,Vdd);16 - for i=1:length(Vin),
17 - % Step the Vin vector on Channel 1 on HPE3631
18 - HPE3631_SetVolt(1,Vin(i));
19 - % Pause to make sure the output signal is stable.
20 - pause(0.25)
21 - % Read the measured current on Keithley 617
22 - Iout(i)=K617_ReadQuick;
23 - end24 - % Plot the result in figure(1)
25 - figure(1); semilogy(Vin,Iout);
26 - % Put on labels on the X- and Y- axis
27 - xlabel('Vin (V)'); ylabel('Iout (A)');
28 - % Set the grid on
29 - grid on;30 - % Turn off the supply voltage
31 - HPE3631_Disable;