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

📄 b3soiset.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: b3soiset.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 Pin Su 02/5/20 Modified by Paolo Nenzi 2002**********/#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "b3soidef.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.0e6intB3SOIsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states){B3SOImodel *model = (B3SOImodel*)inModel;B3SOIinstance *here;int error;CKTnode *tmp;double Cboxt;/* Alan's Nodeset Fix */CKTnode *tmpNode;IFuid tmpName;    /*  loop through all the B3SOI device models */    for( ; model != NULL; model = model->B3SOInextModel )    {/* Default value Processing for B3SOI MOSFET Models */        if (!model->B3SOItypeGiven)            model->B3SOItype = NMOS;             if (!model->B3SOImobModGiven)             model->B3SOImobMod = 1;        if (!model->B3SOIbinUnitGiven)             model->B3SOIbinUnit = 1;        if (!model->B3SOIparamChkGiven)             model->B3SOIparamChk = 0;        if (!model->B3SOIcapModGiven)             model->B3SOIcapMod = 2;        if (!model->B3SOInoiModGiven)             model->B3SOInoiMod = 1;        if (!model->B3SOIshModGiven)             model->B3SOIshMod = 0;        if (!model->B3SOIversionGiven)             model->B3SOIversion = 2.0;        if (!model->B3SOItoxGiven)            model->B3SOItox = 100.0e-10;        model->B3SOIcox = 3.453133e-11 / model->B3SOItox;/* v2.2.3 */        if (!model->B3SOIdtoxcvGiven)            model->B3SOIdtoxcv = 0.0;        if (!model->B3SOIcdscGiven)	    model->B3SOIcdsc = 2.4e-4;   /* unit Q/V/m^2  */        if (!model->B3SOIcdscbGiven)	    model->B3SOIcdscb = 0.0;   /* unit Q/V/m^2  */    	    if (!model->B3SOIcdscdGiven)	    model->B3SOIcdscd = 0.0;   /* unit Q/V/m^2  */        if (!model->B3SOIcitGiven)	    model->B3SOIcit = 0.0;   /* unit Q/V/m^2  */        if (!model->B3SOInfactorGiven)	    model->B3SOInfactor = 1;        if (!model->B3SOIvsatGiven)            model->B3SOIvsat = 8.0e4;    /* unit m/s */         if (!model->B3SOIatGiven)            model->B3SOIat = 3.3e4;    /* unit m/s */         if (!model->B3SOIa0Given)            model->B3SOIa0 = 1.0;          if (!model->B3SOIagsGiven)            model->B3SOIags = 0.0;        if (!model->B3SOIa1Given)            model->B3SOIa1 = 0.0;        if (!model->B3SOIa2Given)            model->B3SOIa2 = 1.0;        if (!model->B3SOIketaGiven)            model->B3SOIketa = -0.6;    /* unit  / V */        if (!model->B3SOInsubGiven)            model->B3SOInsub = 6.0e16;   /* unit 1/cm3 */        if (!model->B3SOInpeakGiven)            model->B3SOInpeak = 1.7e17;   /* unit 1/cm3 */        if (!model->B3SOIngateGiven)            model->B3SOIngate = 0;   /* unit 1/cm3 */        if (!model->B3SOIvbmGiven)	    model->B3SOIvbm = -3.0;        if (!model->B3SOIxtGiven)	    model->B3SOIxt = 1.55e-7;        if (!model->B3SOIkt1Given)            model->B3SOIkt1 = -0.11;      /* unit V */        if (!model->B3SOIkt1lGiven)            model->B3SOIkt1l = 0.0;      /* unit V*m */        if (!model->B3SOIkt2Given)            model->B3SOIkt2 = 0.022;      /* No unit */        if (!model->B3SOIk3Given)            model->B3SOIk3 = 0.0;              if (!model->B3SOIk3bGiven)            model->B3SOIk3b = 0.0;              if (!model->B3SOIw0Given)            model->B3SOIw0 = 2.5e-6;            if (!model->B3SOInlxGiven)            model->B3SOInlx = 1.74e-7;             if (!model->B3SOIdvt0Given)            model->B3SOIdvt0 = 2.2;            if (!model->B3SOIdvt1Given)            model->B3SOIdvt1 = 0.53;              if (!model->B3SOIdvt2Given)            model->B3SOIdvt2 = -0.032;   /* unit 1 / V */             if (!model->B3SOIdvt0wGiven)            model->B3SOIdvt0w = 0.0;            if (!model->B3SOIdvt1wGiven)            model->B3SOIdvt1w = 5.3e6;            if (!model->B3SOIdvt2wGiven)            model->B3SOIdvt2w = -0.032;           if (!model->B3SOIdroutGiven)            model->B3SOIdrout = 0.56;             if (!model->B3SOIdsubGiven)            model->B3SOIdsub = model->B3SOIdrout;             if (!model->B3SOIvth0Given)            model->B3SOIvth0 = (model->B3SOItype == NMOS) ? 0.7 : -0.7;        if (!model->B3SOIuaGiven)            model->B3SOIua = 2.25e-9;      /* unit m/V */        if (!model->B3SOIua1Given)            model->B3SOIua1 = 4.31e-9;      /* unit m/V */        if (!model->B3SOIubGiven)            model->B3SOIub = 5.87e-19;     /* unit (m/V)**2 */        if (!model->B3SOIub1Given)            model->B3SOIub1 = -7.61e-18;     /* unit (m/V)**2 */        if (!model->B3SOIucGiven)            model->B3SOIuc = (model->B3SOImobMod == 3) ? -0.0465 : -0.0465e-9;           if (!model->B3SOIuc1Given)            model->B3SOIuc1 = (model->B3SOImobMod == 3) ? -0.056 : -0.056e-9;           if (!model->B3SOIu0Given)            model->B3SOIu0 = (model->B3SOItype == NMOS) ? 0.067 : 0.025;        if (!model->B3SOIuteGiven)	    model->B3SOIute = -1.5;            if (!model->B3SOIvoffGiven)	    model->B3SOIvoff = -0.08;        if (!model->B3SOIdeltaGiven)             model->B3SOIdelta = 0.01;        if (!model->B3SOIrdswGiven)            model->B3SOIrdsw = 100;        if (!model->B3SOIprwgGiven)            model->B3SOIprwg = 0.0;      /* unit 1/V */        if (!model->B3SOIprwbGiven)            model->B3SOIprwb = 0.0;              if (!model->B3SOIprtGiven)        if (!model->B3SOIprtGiven)            model->B3SOIprt = 0.0;              if (!model->B3SOIeta0Given)            model->B3SOIeta0 = 0.08;      /* no unit  */         if (!model->B3SOIetabGiven)            model->B3SOIetab = -0.07;      /* unit  1/V */         if (!model->B3SOIpclmGiven)            model->B3SOIpclm = 1.3;      /* no unit  */         if (!model->B3SOIpdibl1Given)            model->B3SOIpdibl1 = .39;    /* no unit  */        if (!model->B3SOIpdibl2Given)            model->B3SOIpdibl2 = 0.0086;    /* no unit  */         if (!model->B3SOIpdiblbGiven)            model->B3SOIpdiblb = 0.0;    /* 1/V  */         if (!model->B3SOIpvagGiven)            model->B3SOIpvag = 0.0;             if (!model->B3SOIwrGiven)              model->B3SOIwr = 1.0;        if (!model->B3SOIdwgGiven)              model->B3SOIdwg = 0.0;        if (!model->B3SOIdwbGiven)              model->B3SOIdwb = 0.0;        if (!model->B3SOIb0Given)            model->B3SOIb0 = 0.0;        if (!model->B3SOIb1Given)              model->B3SOIb1 = 0.0;        if (!model->B3SOIalpha0Given)              model->B3SOIalpha0 = 0.0;        if (!model->B3SOIcgslGiven)              model->B3SOIcgsl = 0.0;        if (!model->B3SOIcgdlGiven)              model->B3SOIcgdl = 0.0;        if (!model->B3SOIckappaGiven)              model->B3SOIckappa = 0.6;        if (!model->B3SOIclcGiven)              model->B3SOIclc = 0.1e-7;        if (!model->B3SOIcleGiven)              model->B3SOIcle = 0.0;        if (!model->B3SOItboxGiven)              model->B3SOItbox = 3e-7;        if (!model->B3SOItsiGiven)              model->B3SOItsi = 1e-7;        if (!model->B3SOIxjGiven)              model->B3SOIxj = model->B3SOItsi;        if (!model->B3SOIrbodyGiven)              model->B3SOIrbody = 0.0;        if (!model->B3SOIrbshGiven)              model->B3SOIrbsh = 0.0;        if (!model->B3SOIrth0Given)              model->B3SOIrth0 = 0;/* v3.0 bug fix */        if (!model->B3SOIcth0Given)            model->B3SOIcth0 = 1e-5;        if (!model->B3SOIagidlGiven)              model->B3SOIagidl = 0.0;        if (!model->B3SOIbgidlGiven)              model->B3SOIbgidl = 0.0;        if (!model->B3SOIngidlGiven)              model->B3SOIngidl = 1.2;        if (!model->B3SOIndiodeGiven)              model->B3SOIndiode = 1.0;        if (!model->B3SOIntunGiven)              model->B3SOIntun = 10.0;        if (!model->B3SOInrecf0Given)            model->B3SOInrecf0 = 2.0;        if (!model->B3SOInrecr0Given)            model->B3SOInrecr0 = 10.0;         if (!model->B3SOIisbjtGiven)              model->B3SOIisbjt = 1e-6;        if (!model->B3SOIisdifGiven)              model->B3SOIisdif = 0.0;        if (!model->B3SOIisrecGiven)              model->B3SOIisrec = 1e-5;        if (!model->B3SOIistunGiven)              model->B3SOIistun = 0.0;        if (!model->B3SOIxbjtGiven)              model->B3SOIxbjt = 1;/*        if (!model->B3SOIxdifGiven)              model->B3SOIxdif = 1;*/        if (!model->B3SOIxdifGiven)            model->B3SOIxdif = model->B3SOIxbjt;        if (!model->B3SOIxrecGiven)              model->B3SOIxrec = 1;        if (!model->B3SOIxtunGiven)              model->B3SOIxtun = 0;        if (!model->B3SOIttGiven)              model->B3SOItt = 1e-12;        if (!model->B3SOIasdGiven)              model->B3SOIasd = 0.3;        /* unit degree celcius */        if (!model->B3SOItnomGiven)  	    model->B3SOItnom = ckt->CKTnomTemp;         if (!model->B3SOILintGiven)             model->B3SOILint = 0.0;        if (!model->B3SOILlGiven)             model->B3SOILl = 0.0;        if (!model->B3SOILlcGiven)            model->B3SOILlc = 0.0; /* v2.2.3 */        if (!model->B3SOILlnGiven)             model->B3SOILln = 1.0;        if (!model->B3SOILwGiven)             model->B3SOILw = 0.0;        if (!model->B3SOILwcGiven)            model->B3SOILwc = 0.0; /* v2.2.3 */        if (!model->B3SOILwnGiven)             model->B3SOILwn = 1.0;        if (!model->B3SOILwlGiven)             model->B3SOILwl = 0.0;        if (!model->B3SOILwlcGiven)            model->B3SOILwlc = 0.0; /* v2.2.3 */        if (!model->B3SOILminGiven)             model->B3SOILmin = 0.0;        if (!model->B3SOILmaxGiven)             model->B3SOILmax = 1.0;        if (!model->B3SOIWintGiven)             model->B3SOIWint = 0.0;        if (!model->B3SOIWlGiven)             model->B3SOIWl = 0.0;        if (!model->B3SOIWlcGiven)            model->B3SOIWlc = 0.0; /* v2.2.3 */        if (!model->B3SOIWlnGiven)             model->B3SOIWln = 1.0;        if (!model->B3SOIWwGiven)             model->B3SOIWw = 0.0;        if (!model->B3SOIWwcGiven)            model->B3SOIWwc = 0.0; /* v2.2.3 */        if (!model->B3SOIWwnGiven)             model->B3SOIWwn = 1.0;        if (!model->B3SOIWwlGiven)             model->B3SOIWwl = 0.0;        if (!model->B3SOIWwlcGiven)           model->B3SOIWwlc = 0.0; /* v2.2.3 */        if (!model->B3SOIWminGiven)             model->B3SOIWmin = 0.0;        if (!model->B3SOIWmaxGiven)             model->B3SOIWmax = 1.0;        if (!model->B3SOIdwcGiven)             model->B3SOIdwc = model->B3SOIWint;        if (!model->B3SOIdlcGiven)             model->B3SOIdlc = model->B3SOILint;        if (!model->B3SOIdlcigGiven)           model->B3SOIdlcig = model->B3SOILint; /* v3.0 *//* v3.0 */        if (!model->B3SOIsoimodGiven)            model->B3SOIsoiMod = 0;        if (!model->B3SOIvbsaGiven)            model->B3SOIvbsa = 0.0;        if (!model->B3SOInofffdGiven)            model->B3SOInofffd = 1.0;        if (!model->B3SOIvofffdGiven)            model->B3SOIvofffd = 0.0;        if (!model->B3SOIk1bGiven)            model->B3SOIk1b = 1.0;        if (!model->B3SOIk2bGiven)            model->B3SOIk2b = 0.0;        if (!model->B3SOIdk2bGiven)            model->B3SOIdk2b = 0.0;        if (!model->B3SOIdvbd0Given)            model->B3SOIdvbd0 = 0.0;        if (!model->B3SOIdvbd1Given)            model->B3SOIdvbd1 = 0.0;        if (!model->B3SOImoinFDGiven)            model->B3SOImoinFD = 1e3;/* v2.2 release */        if (!model->B3SOIwth0Given)           model->B3SOIwth0 = 0.0;        if (!model->B3SOIrhaloGiven)           model->B3SOIrhalo = 1e15;        if (!model->B3SOIntoxGiven)           model->B3SOIntox = 1;        if (!model->B3SOItoxrefGiven)           model->B3SOItoxref = 2.5e-9;        if (!model->B3SOIebgGiven)           model->B3SOIebg = 1.2;        if (!model->B3SOIvevbGiven)           model->B3SOIvevb = 0.075;        if (!model->B3SOIalphaGB1Given)           model->B3SOIalphaGB1 = 0.35;        if (!model->B3SOIbetaGB1Given)           model->B3SOIbetaGB1 = 0.03;        if (!model->B3SOIvgb1Given)           model->B3SOIvgb1 = 300;        if (!model->B3SOIalphaGB2Given)           model->B3SOIalphaGB2 = 0.43;        if (!model->B3SOIbetaGB2Given)           model->B3SOIbetaGB2 = 0.05;        if (!model->B3SOIvecbGiven)           model->B3SOIvecb = 0.026;        if (!model->B3SOIvgb2Given)           model->B3SOIvgb2 = 17;        if (!model->B3SOItoxqmGiven)           model->B3SOItoxqm = model->B3SOItox;        if (!model->B3SOIvoxhGiven)           model->B3SOIvoxh = 5.0;        if (!model->B3SOIdeltavoxGiven)           model->B3SOIdeltavox = 0.005;/* v3.0 */        if (!model->B3SOIigbModGiven)           model->B3SOIigbMod = 0;        if (!model->B3SOIigcModGiven)           model->B3SOIigcMod = 0;        if (!model->B3SOInigcGiven)            model->B3SOInigc = 1.0;        if (!model->B3SOIaigcGiven)            model->B3SOIaigc = (model->B3SOItype == NMOS) ? 0.43 : 0.31;        if (!model->B3SOIbigcGiven)            model->B3SOIbigc = (model->B3SOItype == NMOS) ? 0.054 : 0.024;        if (!model->B3SOIcigcGiven)            model->B3SOIcigc = (model->B3SOItype == NMOS) ? 0.075 : 0.03;        if (!model->B3SOIaigsdGiven)            model->B3SOIaigsd = (model->B3SOItype == NMOS) ? 0.43 : 0.31;        if (!model->B3SOIbigsdGiven)            model->B3SOIbigsd = (model->B3SOItype == NMOS) ? 0.054 : 0.024;        if (!model->B3SOIcigsdGiven)            model->B3SOIcigsd = (model->B3SOItype == NMOS) ? 0.075 : 0.03;        if (!model->B3SOIpigcdGiven)

⌨️ 快捷键说明

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