⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b3soipdset.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 4 页
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen TangFile: b3soipdset.c          98/5/01Modified by Pin Su and Jan Feng	99/2/15Modified by Pin Su 99/4/30Modified by Pin Su, Wei Jin 99/9/27Modified by Pin Su 00/3/1Modified by Pin Su 01/2/15Modified by Pin Su 02/3/5Modified by Paolo Nenzi 2002**********//* * Revision 2.2.3  02/3/5  Pin Su  * BSIMPD2.2.3 release */#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "b3soipddef.h"#include "const.h"#include "sperror.h"#include "suffix.h"#define SMOOTHFACTOR 0.1#define EPSOX 3.453133e-11#define EPSSI 1.03594e-10#define PI 3.141592654#define Charge_q 1.60219e-19#define Meter2Micron 1.0e6intB3SOIPDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,             int *states){B3SOIPDmodel *model = (B3SOIPDmodel*)inModel;B3SOIPDinstance *here;int error;CKTnode *tmp;double Cboxt;CKTnode *tmpNode;IFuid tmpName;    /*  loop through all the B3SOIPD device models */    for( ; model != NULL; model = model->B3SOIPDnextModel )    {/* Default value Processing for B3SOIPD MOSFET Models */        if (!model->B3SOIPDtypeGiven)            model->B3SOIPDtype = NMOS;             if (!model->B3SOIPDmobModGiven)             model->B3SOIPDmobMod = 1;        if (!model->B3SOIPDbinUnitGiven)             model->B3SOIPDbinUnit = 1;        if (!model->B3SOIPDparamChkGiven)             model->B3SOIPDparamChk = 0;        if (!model->B3SOIPDcapModGiven)             model->B3SOIPDcapMod = 2;        if (!model->B3SOIPDnoiModGiven)             model->B3SOIPDnoiMod = 1;        if (!model->B3SOIPDshModGiven)             model->B3SOIPDshMod = 0;        if (!model->B3SOIPDversionGiven)             model->B3SOIPDversion = 2.0;        if (!model->B3SOIPDtoxGiven)            model->B3SOIPDtox = 100.0e-10;        model->B3SOIPDcox = 3.453133e-11 / model->B3SOIPDtox;/* v2.2.3 */        if (!model->B3SOIPDdtoxcvGiven)            model->B3SOIPDdtoxcv = 0.0;        if (!model->B3SOIPDcdscGiven)	    model->B3SOIPDcdsc = 2.4e-4;   /* unit Q/V/m^2  */        if (!model->B3SOIPDcdscbGiven)	    model->B3SOIPDcdscb = 0.0;   /* unit Q/V/m^2  */    	    if (!model->B3SOIPDcdscdGiven)	    model->B3SOIPDcdscd = 0.0;   /* unit Q/V/m^2  */        if (!model->B3SOIPDcitGiven)	    model->B3SOIPDcit = 0.0;   /* unit Q/V/m^2  */        if (!model->B3SOIPDnfactorGiven)	    model->B3SOIPDnfactor = 1;        if (!model->B3SOIPDvsatGiven)            model->B3SOIPDvsat = 8.0e4;    /* unit m/s */         if (!model->B3SOIPDatGiven)            model->B3SOIPDat = 3.3e4;    /* unit m/s */         if (!model->B3SOIPDa0Given)            model->B3SOIPDa0 = 1.0;          if (!model->B3SOIPDagsGiven)            model->B3SOIPDags = 0.0;        if (!model->B3SOIPDa1Given)            model->B3SOIPDa1 = 0.0;        if (!model->B3SOIPDa2Given)            model->B3SOIPDa2 = 1.0;        if (!model->B3SOIPDketaGiven)            model->B3SOIPDketa = -0.6;    /* unit  / V */        if (!model->B3SOIPDnsubGiven)            model->B3SOIPDnsub = 6.0e16;   /* unit 1/cm3 */        if (!model->B3SOIPDnpeakGiven)            model->B3SOIPDnpeak = 1.7e17;   /* unit 1/cm3 */        if (!model->B3SOIPDngateGiven)            model->B3SOIPDngate = 0;   /* unit 1/cm3 */        if (!model->B3SOIPDvbmGiven)	    model->B3SOIPDvbm = -3.0;        if (!model->B3SOIPDxtGiven)	    model->B3SOIPDxt = 1.55e-7;        if (!model->B3SOIPDkt1Given)            model->B3SOIPDkt1 = -0.11;      /* unit V */        if (!model->B3SOIPDkt1lGiven)            model->B3SOIPDkt1l = 0.0;      /* unit V*m */        if (!model->B3SOIPDkt2Given)            model->B3SOIPDkt2 = 0.022;      /* No unit */        if (!model->B3SOIPDk3Given)            model->B3SOIPDk3 = 0.0;              if (!model->B3SOIPDk3bGiven)            model->B3SOIPDk3b = 0.0;              if (!model->B3SOIPDw0Given)            model->B3SOIPDw0 = 2.5e-6;            if (!model->B3SOIPDnlxGiven)            model->B3SOIPDnlx = 1.74e-7;             if (!model->B3SOIPDdvt0Given)            model->B3SOIPDdvt0 = 2.2;            if (!model->B3SOIPDdvt1Given)            model->B3SOIPDdvt1 = 0.53;              if (!model->B3SOIPDdvt2Given)            model->B3SOIPDdvt2 = -0.032;   /* unit 1 / V */             if (!model->B3SOIPDdvt0wGiven)            model->B3SOIPDdvt0w = 0.0;            if (!model->B3SOIPDdvt1wGiven)            model->B3SOIPDdvt1w = 5.3e6;            if (!model->B3SOIPDdvt2wGiven)            model->B3SOIPDdvt2w = -0.032;           if (!model->B3SOIPDdroutGiven)            model->B3SOIPDdrout = 0.56;             if (!model->B3SOIPDdsubGiven)            model->B3SOIPDdsub = model->B3SOIPDdrout;             if (!model->B3SOIPDvth0Given)            model->B3SOIPDvth0 = (model->B3SOIPDtype == NMOS) ? 0.7 : -0.7;        if (!model->B3SOIPDuaGiven)            model->B3SOIPDua = 2.25e-9;      /* unit m/V */        if (!model->B3SOIPDua1Given)            model->B3SOIPDua1 = 4.31e-9;      /* unit m/V */        if (!model->B3SOIPDubGiven)            model->B3SOIPDub = 5.87e-19;     /* unit (m/V)**2 */        if (!model->B3SOIPDub1Given)            model->B3SOIPDub1 = -7.61e-18;     /* unit (m/V)**2 */        if (!model->B3SOIPDucGiven)            model->B3SOIPDuc = (model->B3SOIPDmobMod == 3) ? -0.0465 : -0.0465e-9;           if (!model->B3SOIPDuc1Given)            model->B3SOIPDuc1 = (model->B3SOIPDmobMod == 3) ? -0.056 : -0.056e-9;           if (!model->B3SOIPDu0Given)            model->B3SOIPDu0 = (model->B3SOIPDtype == NMOS) ? 0.067 : 0.025;        if (!model->B3SOIPDuteGiven)	    model->B3SOIPDute = -1.5;            if (!model->B3SOIPDvoffGiven)	    model->B3SOIPDvoff = -0.08;        if (!model->B3SOIPDdeltaGiven)             model->B3SOIPDdelta = 0.01;        if (!model->B3SOIPDrdswGiven)            model->B3SOIPDrdsw = 100;        if (!model->B3SOIPDprwgGiven)            model->B3SOIPDprwg = 0.0;      /* unit 1/V */        if (!model->B3SOIPDprwbGiven)            model->B3SOIPDprwb = 0.0;              if (!model->B3SOIPDprtGiven)        if (!model->B3SOIPDprtGiven)            model->B3SOIPDprt = 0.0;              if (!model->B3SOIPDeta0Given)            model->B3SOIPDeta0 = 0.08;      /* no unit  */         if (!model->B3SOIPDetabGiven)            model->B3SOIPDetab = -0.07;      /* unit  1/V */         if (!model->B3SOIPDpclmGiven)            model->B3SOIPDpclm = 1.3;      /* no unit  */         if (!model->B3SOIPDpdibl1Given)            model->B3SOIPDpdibl1 = .39;    /* no unit  */        if (!model->B3SOIPDpdibl2Given)            model->B3SOIPDpdibl2 = 0.0086;    /* no unit  */         if (!model->B3SOIPDpdiblbGiven)            model->B3SOIPDpdiblb = 0.0;    /* 1/V  */         if (!model->B3SOIPDpvagGiven)            model->B3SOIPDpvag = 0.0;             if (!model->B3SOIPDwrGiven)              model->B3SOIPDwr = 1.0;        if (!model->B3SOIPDdwgGiven)              model->B3SOIPDdwg = 0.0;        if (!model->B3SOIPDdwbGiven)              model->B3SOIPDdwb = 0.0;        if (!model->B3SOIPDb0Given)            model->B3SOIPDb0 = 0.0;        if (!model->B3SOIPDb1Given)              model->B3SOIPDb1 = 0.0;        if (!model->B3SOIPDalpha0Given)              model->B3SOIPDalpha0 = 0.0;        if (!model->B3SOIPDcgslGiven)              model->B3SOIPDcgsl = 0.0;        if (!model->B3SOIPDcgdlGiven)              model->B3SOIPDcgdl = 0.0;        if (!model->B3SOIPDckappaGiven)              model->B3SOIPDckappa = 0.6;        if (!model->B3SOIPDclcGiven)              model->B3SOIPDclc = 0.1e-7;        if (!model->B3SOIPDcleGiven)              model->B3SOIPDcle = 0.0;        if (!model->B3SOIPDtboxGiven)              model->B3SOIPDtbox = 3e-7;        if (!model->B3SOIPDtsiGiven)              model->B3SOIPDtsi = 1e-7;        if (!model->B3SOIPDxjGiven)              model->B3SOIPDxj = model->B3SOIPDtsi;        if (!model->B3SOIPDrbodyGiven)              model->B3SOIPDrbody = 0.0;        if (!model->B3SOIPDrbshGiven)              model->B3SOIPDrbsh = 0.0;        if (!model->B3SOIPDrth0Given)              model->B3SOIPDrth0 = 0;        if (!model->B3SOIPDcth0Given)            model->B3SOIPDcth0 = 0;        if (!model->B3SOIPDagidlGiven)              model->B3SOIPDagidl = 0.0;        if (!model->B3SOIPDbgidlGiven)              model->B3SOIPDbgidl = 0.0;        if (!model->B3SOIPDngidlGiven)              model->B3SOIPDngidl = 1.2;        if (!model->B3SOIPDndiodeGiven)              model->B3SOIPDndiode = 1.0;        if (!model->B3SOIPDntunGiven)              model->B3SOIPDntun = 10.0;        if (!model->B3SOIPDnrecf0Given)            model->B3SOIPDnrecf0 = 2.0;        if (!model->B3SOIPDnrecr0Given)            model->B3SOIPDnrecr0 = 10.0;         if (!model->B3SOIPDisbjtGiven)              model->B3SOIPDisbjt = 1e-6;        if (!model->B3SOIPDisdifGiven)              model->B3SOIPDisdif = 0.0;        if (!model->B3SOIPDisrecGiven)              model->B3SOIPDisrec = 1e-5;        if (!model->B3SOIPDistunGiven)              model->B3SOIPDistun = 0.0;        if (!model->B3SOIPDxbjtGiven)              model->B3SOIPDxbjt = 1;/*        if (!model->B3SOIPDxdifGiven)              model->B3SOIPDxdif = 1;*/        if (!model->B3SOIPDxdifGiven)            model->B3SOIPDxdif = model->B3SOIPDxbjt;        if (!model->B3SOIPDxrecGiven)              model->B3SOIPDxrec = 1;        if (!model->B3SOIPDxtunGiven)              model->B3SOIPDxtun = 0;        if (!model->B3SOIPDttGiven)              model->B3SOIPDtt = 1e-12;        if (!model->B3SOIPDasdGiven)              model->B3SOIPDasd = 0.3;        /* unit degree celcius */        if (!model->B3SOIPDtnomGiven)  	    model->B3SOIPDtnom = ckt->CKTnomTemp;         if (!model->B3SOIPDLintGiven)             model->B3SOIPDLint = 0.0;        if (!model->B3SOIPDLlGiven)             model->B3SOIPDLl = 0.0;        if (!model->B3SOIPDLlcGiven)            model->B3SOIPDLlc = 0.0; /* v2.2.3 */        if (!model->B3SOIPDLlnGiven)             model->B3SOIPDLln = 1.0;        if (!model->B3SOIPDLwGiven)             model->B3SOIPDLw = 0.0;        if (!model->B3SOIPDLwcGiven)            model->B3SOIPDLwc = 0.0; /* v2.2.3 */        if (!model->B3SOIPDLwnGiven)             model->B3SOIPDLwn = 1.0;        if (!model->B3SOIPDLwlGiven)             model->B3SOIPDLwl = 0.0;        if (!model->B3SOIPDLwlcGiven)            model->B3SOIPDLwlc = 0.0; /* v2.2.3 */        if (!model->B3SOIPDLminGiven)             model->B3SOIPDLmin = 0.0;        if (!model->B3SOIPDLmaxGiven)             model->B3SOIPDLmax = 1.0;        if (!model->B3SOIPDWintGiven)             model->B3SOIPDWint = 0.0;        if (!model->B3SOIPDWlGiven)             model->B3SOIPDWl = 0.0;        if (!model->B3SOIPDWlcGiven)            model->B3SOIPDWlc = 0.0; /* v2.2.3 */        if (!model->B3SOIPDWlnGiven)             model->B3SOIPDWln = 1.0;        if (!model->B3SOIPDWwGiven)             model->B3SOIPDWw = 0.0;        if (!model->B3SOIPDWwcGiven)            model->B3SOIPDWwc = 0.0; /* v2.2.3 */        if (!model->B3SOIPDWwnGiven)             model->B3SOIPDWwn = 1.0;        if (!model->B3SOIPDWwlGiven)             model->B3SOIPDWwl = 0.0;        if (!model->B3SOIPDWwlcGiven)           model->B3SOIPDWwlc = 0.0; /* v2.2.3 */        if (!model->B3SOIPDWminGiven)             model->B3SOIPDWmin = 0.0;        if (!model->B3SOIPDWmaxGiven)             model->B3SOIPDWmax = 1.0;        if (!model->B3SOIPDdwcGiven)             model->B3SOIPDdwc = model->B3SOIPDWint;        if (!model->B3SOIPDdlcGiven)             model->B3SOIPDdlc = model->B3SOIPDLint;/* v2.2 release */        if (!model->B3SOIPDwth0Given)           model->B3SOIPDwth0 = 0.0;        if (!model->B3SOIPDrhaloGiven)           model->B3SOIPDrhalo = 1e15;        if (!model->B3SOIPDntoxGiven)           model->B3SOIPDntox = 1;        if (!model->B3SOIPDtoxrefGiven)           model->B3SOIPDtoxref = 2.5e-9;        if (!model->B3SOIPDebgGiven)           model->B3SOIPDebg = 1.2;        if (!model->B3SOIPDvevbGiven)           model->B3SOIPDvevb = 0.075;        if (!model->B3SOIPDalphaGB1Given)           model->B3SOIPDalphaGB1 = 0.35;        if (!model->B3SOIPDbetaGB1Given)           model->B3SOIPDbetaGB1 = 0.03;        if (!model->B3SOIPDvgb1Given)           model->B3SOIPDvgb1 = 300;        if (!model->B3SOIPDalphaGB2Given)           model->B3SOIPDalphaGB2 = 0.43;        if (!model->B3SOIPDbetaGB2Given)           model->B3SOIPDbetaGB2 = 0.05;        if (!model->B3SOIPDvecbGiven)           model->B3SOIPDvecb = 0.026;        if (!model->B3SOIPDvgb2Given)           model->B3SOIPDvgb2 = 17;        if (!model->B3SOIPDtoxqmGiven)           model->B3SOIPDtoxqm = model->B3SOIPDtox;        if (!model->B3SOIPDvoxhGiven)           model->B3SOIPDvoxh = 5.0;        if (!model->B3SOIPDdeltavoxGiven)           model->B3SOIPDdeltavox = 0.005;        if (!model->B3SOIPDigModGiven)           model->B3SOIPDigMod = 0;/* v2.0 release */        if (!model->B3SOIPDk1w1Given)            model->B3SOIPDk1w1 = 0.0;        if (!model->B3SOIPDk1w2Given)           model->B3SOIPDk1w2 = 0.0;        if (!model->B3SOIPDketasGiven)           model->B3SOIPDketas = 0.0;        if (!model->B3SOIPDdwbcGiven)           model->B3SOIPDdwbc = 0.0;        if (!model->B3SOIPDbeta0Given)           model->B3SOIPDbeta0 = 0.0;        if (!model->B3SOIPDbeta1Given)           model->B3SOIPDbeta1 = 0.0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -