📄 b3soifdset.c
字号:
/**********Copyright 1999 Regents of the University of California. All rights reserved.Author: Weidong Liu and Pin Su Feb 1999Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen TangFile: b3soifdset.c 98/5/01Modified by Pin Su, Wei Jin 99/9/27Modified by Paolo Nenzi 2002**********//* * Revision 2.1 99/9/27 Pin Su * BSIMFD2.1 release */#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "b3soifddef.h"#include "const.h"#include "sperror.h"#include "suffix.h"#define MAX_EXP 5.834617425e14#define MIN_EXP 1.713908431e-15#define EXP_THRESHOLD 34.0#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.0e6intB3SOIFDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states){B3SOIFDmodel *model = (B3SOIFDmodel*)inModel;B3SOIFDinstance *here;int error;CKTnode *tmp;double tmp1, tmp2;double nfb0, Cboxt;CKTnode *tmpNode;IFuid tmpName; /* loop through all the B3SOIFD device models */ for( ; model != NULL; model = model->B3SOIFDnextModel ) {/* Default value Processing for B3SOIFD MOSFET Models */ if (!model->B3SOIFDtypeGiven) model->B3SOIFDtype = NMOS; if (!model->B3SOIFDmobModGiven) model->B3SOIFDmobMod = 1; if (!model->B3SOIFDbinUnitGiven) model->B3SOIFDbinUnit = 1; if (!model->B3SOIFDparamChkGiven) model->B3SOIFDparamChk = 0; if (!model->B3SOIFDcapModGiven) model->B3SOIFDcapMod = 2; if (!model->B3SOIFDnoiModGiven) model->B3SOIFDnoiMod = 1; if (!model->B3SOIFDshModGiven) model->B3SOIFDshMod = 0; if (!model->B3SOIFDversionGiven) model->B3SOIFDversion = 2.0; if (!model->B3SOIFDtoxGiven) model->B3SOIFDtox = 100.0e-10; model->B3SOIFDcox = 3.453133e-11 / model->B3SOIFDtox; if (!model->B3SOIFDcdscGiven) model->B3SOIFDcdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->B3SOIFDcdscbGiven) model->B3SOIFDcdscb = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIFDcdscdGiven) model->B3SOIFDcdscd = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIFDcitGiven) model->B3SOIFDcit = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIFDnfactorGiven) model->B3SOIFDnfactor = 1; if (!model->B3SOIFDvsatGiven) model->B3SOIFDvsat = 8.0e4; /* unit m/s */ if (!model->B3SOIFDatGiven) model->B3SOIFDat = 3.3e4; /* unit m/s */ if (!model->B3SOIFDa0Given) model->B3SOIFDa0 = 1.0; if (!model->B3SOIFDagsGiven) model->B3SOIFDags = 0.0; if (!model->B3SOIFDa1Given) model->B3SOIFDa1 = 0.0; if (!model->B3SOIFDa2Given) model->B3SOIFDa2 = 1.0; if (!model->B3SOIFDketaGiven) model->B3SOIFDketa = -0.6; /* unit / V */ if (!model->B3SOIFDnsubGiven) model->B3SOIFDnsub = 6.0e16; /* unit 1/cm3 */ if (!model->B3SOIFDnpeakGiven) model->B3SOIFDnpeak = 1.7e17; /* unit 1/cm3 */ if (!model->B3SOIFDngateGiven) model->B3SOIFDngate = 0; /* unit 1/cm3 */ if (!model->B3SOIFDvbmGiven) model->B3SOIFDvbm = -3.0; if (!model->B3SOIFDxtGiven) model->B3SOIFDxt = 1.55e-7; if (!model->B3SOIFDkt1Given) model->B3SOIFDkt1 = -0.11; /* unit V */ if (!model->B3SOIFDkt1lGiven) model->B3SOIFDkt1l = 0.0; /* unit V*m */ if (!model->B3SOIFDkt2Given) model->B3SOIFDkt2 = 0.022; /* No unit */ if (!model->B3SOIFDk3Given) model->B3SOIFDk3 = 0.0; if (!model->B3SOIFDk3bGiven) model->B3SOIFDk3b = 0.0; if (!model->B3SOIFDw0Given) model->B3SOIFDw0 = 2.5e-6; if (!model->B3SOIFDnlxGiven) model->B3SOIFDnlx = 1.74e-7; if (!model->B3SOIFDdvt0Given) model->B3SOIFDdvt0 = 2.2; if (!model->B3SOIFDdvt1Given) model->B3SOIFDdvt1 = 0.53; if (!model->B3SOIFDdvt2Given) model->B3SOIFDdvt2 = -0.032; /* unit 1 / V */ if (!model->B3SOIFDdvt0wGiven) model->B3SOIFDdvt0w = 0.0; if (!model->B3SOIFDdvt1wGiven) model->B3SOIFDdvt1w = 5.3e6; if (!model->B3SOIFDdvt2wGiven) model->B3SOIFDdvt2w = -0.032; if (!model->B3SOIFDdroutGiven) model->B3SOIFDdrout = 0.56; if (!model->B3SOIFDdsubGiven) model->B3SOIFDdsub = model->B3SOIFDdrout; if (!model->B3SOIFDvth0Given) model->B3SOIFDvth0 = (model->B3SOIFDtype == NMOS) ? 0.7 : -0.7; if (!model->B3SOIFDuaGiven) model->B3SOIFDua = 2.25e-9; /* unit m/V */ if (!model->B3SOIFDua1Given) model->B3SOIFDua1 = 4.31e-9; /* unit m/V */ if (!model->B3SOIFDubGiven) model->B3SOIFDub = 5.87e-19; /* unit (m/V)**2 */ if (!model->B3SOIFDub1Given) model->B3SOIFDub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->B3SOIFDucGiven) model->B3SOIFDuc = (model->B3SOIFDmobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->B3SOIFDuc1Given) model->B3SOIFDuc1 = (model->B3SOIFDmobMod == 3) ? -0.056 : -0.056e-9; if (!model->B3SOIFDu0Given) model->B3SOIFDu0 = (model->B3SOIFDtype == NMOS) ? 0.067 : 0.025; if (!model->B3SOIFDuteGiven) model->B3SOIFDute = -1.5; if (!model->B3SOIFDvoffGiven) model->B3SOIFDvoff = -0.08; if (!model->B3SOIFDdeltaGiven) model->B3SOIFDdelta = 0.01; if (!model->B3SOIFDrdswGiven) model->B3SOIFDrdsw = 100; if (!model->B3SOIFDprwgGiven) model->B3SOIFDprwg = 0.0; /* unit 1/V */ if (!model->B3SOIFDprwbGiven) model->B3SOIFDprwb = 0.0; if (!model->B3SOIFDprtGiven) if (!model->B3SOIFDprtGiven) model->B3SOIFDprt = 0.0; if (!model->B3SOIFDeta0Given) model->B3SOIFDeta0 = 0.08; /* no unit */ if (!model->B3SOIFDetabGiven) model->B3SOIFDetab = -0.07; /* unit 1/V */ if (!model->B3SOIFDpclmGiven) model->B3SOIFDpclm = 1.3; /* no unit */ if (!model->B3SOIFDpdibl1Given) model->B3SOIFDpdibl1 = .39; /* no unit */ if (!model->B3SOIFDpdibl2Given) model->B3SOIFDpdibl2 = 0.0086; /* no unit */ if (!model->B3SOIFDpdiblbGiven) model->B3SOIFDpdiblb = 0.0; /* 1/V */ if (!model->B3SOIFDpvagGiven) model->B3SOIFDpvag = 0.0; if (!model->B3SOIFDwrGiven) model->B3SOIFDwr = 1.0; if (!model->B3SOIFDdwgGiven) model->B3SOIFDdwg = 0.0; if (!model->B3SOIFDdwbGiven) model->B3SOIFDdwb = 0.0; if (!model->B3SOIFDb0Given) model->B3SOIFDb0 = 0.0; if (!model->B3SOIFDb1Given) model->B3SOIFDb1 = 0.0; if (!model->B3SOIFDalpha0Given) model->B3SOIFDalpha0 = 0.0; if (!model->B3SOIFDalpha1Given) model->B3SOIFDalpha1 = 1.0; if (!model->B3SOIFDbeta0Given) model->B3SOIFDbeta0 = 30.0; if (!model->B3SOIFDcgslGiven) model->B3SOIFDcgsl = 0.0; if (!model->B3SOIFDcgdlGiven) model->B3SOIFDcgdl = 0.0; if (!model->B3SOIFDckappaGiven) model->B3SOIFDckappa = 0.6; if (!model->B3SOIFDclcGiven) model->B3SOIFDclc = 0.1e-7; if (!model->B3SOIFDcleGiven) model->B3SOIFDcle = 0.0; if (!model->B3SOIFDtboxGiven) model->B3SOIFDtbox = 3e-7; if (!model->B3SOIFDtsiGiven) model->B3SOIFDtsi = 1e-7; if (!model->B3SOIFDxjGiven) model->B3SOIFDxj = model->B3SOIFDtsi; if (!model->B3SOIFDkb1Given) model->B3SOIFDkb1 = 1; if (!model->B3SOIFDkb3Given) model->B3SOIFDkb3 = 1; if (!model->B3SOIFDdvbd0Given) model->B3SOIFDdvbd0 = 0.0; if (!model->B3SOIFDdvbd1Given) model->B3SOIFDdvbd1 = 0.0; if (!model->B3SOIFDvbsaGiven) model->B3SOIFDvbsa = 0.0; if (!model->B3SOIFDdelpGiven) model->B3SOIFDdelp = 0.02; if (!model->B3SOIFDrbodyGiven) model->B3SOIFDrbody = 0.0; if (!model->B3SOIFDrbshGiven) model->B3SOIFDrbsh = 0.0; if (!model->B3SOIFDadice0Given) model->B3SOIFDadice0 = 1; if (!model->B3SOIFDabpGiven) model->B3SOIFDabp = 1; if (!model->B3SOIFDmxcGiven) model->B3SOIFDmxc = -0.9; if (!model->B3SOIFDrth0Given) model->B3SOIFDrth0 = 0; if (!model->B3SOIFDcth0Given) model->B3SOIFDcth0 =0; if (!model->B3SOIFDaiiGiven) model->B3SOIFDaii = 0.0; if (!model->B3SOIFDbiiGiven) model->B3SOIFDbii = 0.0; if (!model->B3SOIFDciiGiven) model->B3SOIFDcii = 0.0; if (!model->B3SOIFDdiiGiven) model->B3SOIFDdii = -1.0; if (!model->B3SOIFDagidlGiven) model->B3SOIFDagidl = 0.0; if (!model->B3SOIFDbgidlGiven) model->B3SOIFDbgidl = 0.0; if (!model->B3SOIFDngidlGiven) model->B3SOIFDngidl = 1.2; if (!model->B3SOIFDndiodeGiven) model->B3SOIFDndiode = 1.0; if (!model->B3SOIFDntunGiven) model->B3SOIFDntun = 10.0; if (!model->B3SOIFDisbjtGiven) model->B3SOIFDisbjt = 1e-6; if (!model->B3SOIFDisdifGiven) model->B3SOIFDisdif = 0.0; if (!model->B3SOIFDisrecGiven) model->B3SOIFDisrec = 1e-5; if (!model->B3SOIFDistunGiven) model->B3SOIFDistun = 0.0; if (!model->B3SOIFDxbjtGiven) model->B3SOIFDxbjt = 2; if (!model->B3SOIFDxdifGiven) model->B3SOIFDxdif = 2; if (!model->B3SOIFDxrecGiven) model->B3SOIFDxrec = 20; if (!model->B3SOIFDxtunGiven) model->B3SOIFDxtun = 0; if (!model->B3SOIFDedlGiven) model->B3SOIFDedl = 2e-6; if (!model->B3SOIFDkbjt1Given) model->B3SOIFDkbjt1 = 0; if (!model->B3SOIFDttGiven) model->B3SOIFDtt = 1e-12; if (!model->B3SOIFDasdGiven) model->B3SOIFDasd = 0.3; /* unit degree celcius */ if (!model->B3SOIFDtnomGiven) model->B3SOIFDtnom = ckt->CKTnomTemp; if (!model->B3SOIFDLintGiven) model->B3SOIFDLint = 0.0; if (!model->B3SOIFDLlGiven) model->B3SOIFDLl = 0.0; if (!model->B3SOIFDLlnGiven) model->B3SOIFDLln = 1.0; if (!model->B3SOIFDLwGiven) model->B3SOIFDLw = 0.0; if (!model->B3SOIFDLwnGiven) model->B3SOIFDLwn = 1.0; if (!model->B3SOIFDLwlGiven) model->B3SOIFDLwl = 0.0; if (!model->B3SOIFDLminGiven) model->B3SOIFDLmin = 0.0; if (!model->B3SOIFDLmaxGiven) model->B3SOIFDLmax = 1.0; if (!model->B3SOIFDWintGiven) model->B3SOIFDWint = 0.0; if (!model->B3SOIFDWlGiven) model->B3SOIFDWl = 0.0; if (!model->B3SOIFDWlnGiven) model->B3SOIFDWln = 1.0; if (!model->B3SOIFDWwGiven) model->B3SOIFDWw = 0.0; if (!model->B3SOIFDWwnGiven) model->B3SOIFDWwn = 1.0; if (!model->B3SOIFDWwlGiven) model->B3SOIFDWwl = 0.0; if (!model->B3SOIFDWminGiven) model->B3SOIFDWmin = 0.0; if (!model->B3SOIFDWmaxGiven) model->B3SOIFDWmax = 1.0; if (!model->B3SOIFDdwcGiven) model->B3SOIFDdwc = model->B3SOIFDWint; if (!model->B3SOIFDdlcGiven) model->B3SOIFDdlc = model->B3SOIFDLint;/* Added for binning - START */ /* Length dependence */ if (!model->B3SOIFDlnpeakGiven) model->B3SOIFDlnpeak = 0.0; if (!model->B3SOIFDlnsubGiven) model->B3SOIFDlnsub = 0.0; if (!model->B3SOIFDlngateGiven) model->B3SOIFDlngate = 0.0; if (!model->B3SOIFDlvth0Given) model->B3SOIFDlvth0 = 0.0; if (!model->B3SOIFDlk1Given) model->B3SOIFDlk1 = 0.0; if (!model->B3SOIFDlk2Given) model->B3SOIFDlk2 = 0.0; if (!model->B3SOIFDlk3Given)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -