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