📄 b3soiset.c
字号:
/**********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 + -