📄 b3soiddset.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 TangModified by Pin Su, Wei Jin 99/9/27File: b3soiddset.c 98/5/01Modified by Paolo Nenzi 2002**********//* * Revision 2.1 99/9/27 Pin Su * BSIMDD2.1 release */#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "b3soidddef.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.0e6intB3SOIDDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states){B3SOIDDmodel *model = (B3SOIDDmodel*)inModel;B3SOIDDinstance *here;int error;CKTnode *tmp;double tmp1, tmp2;double nfb0, Cboxt;CKTnode *tmpNode;IFuid tmpName; /* loop through all the B3SOIDD device models */ for( ; model != NULL; model = model->B3SOIDDnextModel ) {/* Default value Processing for B3SOIDD MOSFET Models */ if (!model->B3SOIDDtypeGiven) model->B3SOIDDtype = NMOS; if (!model->B3SOIDDmobModGiven) model->B3SOIDDmobMod = 1; if (!model->B3SOIDDbinUnitGiven) model->B3SOIDDbinUnit = 1; if (!model->B3SOIDDparamChkGiven) model->B3SOIDDparamChk = 0; if (!model->B3SOIDDcapModGiven) model->B3SOIDDcapMod = 2; if (!model->B3SOIDDnoiModGiven) model->B3SOIDDnoiMod = 1; if (!model->B3SOIDDshModGiven) model->B3SOIDDshMod = 0; if (!model->B3SOIDDversionGiven) model->B3SOIDDversion = 2.0; if (!model->B3SOIDDtoxGiven) model->B3SOIDDtox = 100.0e-10; model->B3SOIDDcox = 3.453133e-11 / model->B3SOIDDtox; if (!model->B3SOIDDcdscGiven) model->B3SOIDDcdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->B3SOIDDcdscbGiven) model->B3SOIDDcdscb = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIDDcdscdGiven) model->B3SOIDDcdscd = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIDDcitGiven) model->B3SOIDDcit = 0.0; /* unit Q/V/m^2 */ if (!model->B3SOIDDnfactorGiven) model->B3SOIDDnfactor = 1; if (!model->B3SOIDDvsatGiven) model->B3SOIDDvsat = 8.0e4; /* unit m/s */ if (!model->B3SOIDDatGiven) model->B3SOIDDat = 3.3e4; /* unit m/s */ if (!model->B3SOIDDa0Given) model->B3SOIDDa0 = 1.0; if (!model->B3SOIDDagsGiven) model->B3SOIDDags = 0.0; if (!model->B3SOIDDa1Given) model->B3SOIDDa1 = 0.0; if (!model->B3SOIDDa2Given) model->B3SOIDDa2 = 1.0; if (!model->B3SOIDDketaGiven) model->B3SOIDDketa = -0.6; /* unit / V */ if (!model->B3SOIDDnsubGiven) model->B3SOIDDnsub = 6.0e16; /* unit 1/cm3 */ if (!model->B3SOIDDnpeakGiven) model->B3SOIDDnpeak = 1.7e17; /* unit 1/cm3 */ if (!model->B3SOIDDngateGiven) model->B3SOIDDngate = 0; /* unit 1/cm3 */ if (!model->B3SOIDDvbmGiven) model->B3SOIDDvbm = -3.0; if (!model->B3SOIDDxtGiven) model->B3SOIDDxt = 1.55e-7; if (!model->B3SOIDDkt1Given) model->B3SOIDDkt1 = -0.11; /* unit V */ if (!model->B3SOIDDkt1lGiven) model->B3SOIDDkt1l = 0.0; /* unit V*m */ if (!model->B3SOIDDkt2Given) model->B3SOIDDkt2 = 0.022; /* No unit */ if (!model->B3SOIDDk3Given) model->B3SOIDDk3 = 0.0; if (!model->B3SOIDDk3bGiven) model->B3SOIDDk3b = 0.0; if (!model->B3SOIDDw0Given) model->B3SOIDDw0 = 2.5e-6; if (!model->B3SOIDDnlxGiven) model->B3SOIDDnlx = 1.74e-7; if (!model->B3SOIDDdvt0Given) model->B3SOIDDdvt0 = 2.2; if (!model->B3SOIDDdvt1Given) model->B3SOIDDdvt1 = 0.53; if (!model->B3SOIDDdvt2Given) model->B3SOIDDdvt2 = -0.032; /* unit 1 / V */ if (!model->B3SOIDDdvt0wGiven) model->B3SOIDDdvt0w = 0.0; if (!model->B3SOIDDdvt1wGiven) model->B3SOIDDdvt1w = 5.3e6; if (!model->B3SOIDDdvt2wGiven) model->B3SOIDDdvt2w = -0.032; if (!model->B3SOIDDdroutGiven) model->B3SOIDDdrout = 0.56; if (!model->B3SOIDDdsubGiven) model->B3SOIDDdsub = model->B3SOIDDdrout; if (!model->B3SOIDDvth0Given) model->B3SOIDDvth0 = (model->B3SOIDDtype == NMOS) ? 0.7 : -0.7; if (!model->B3SOIDDuaGiven) model->B3SOIDDua = 2.25e-9; /* unit m/V */ if (!model->B3SOIDDua1Given) model->B3SOIDDua1 = 4.31e-9; /* unit m/V */ if (!model->B3SOIDDubGiven) model->B3SOIDDub = 5.87e-19; /* unit (m/V)**2 */ if (!model->B3SOIDDub1Given) model->B3SOIDDub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->B3SOIDDucGiven) model->B3SOIDDuc = (model->B3SOIDDmobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->B3SOIDDuc1Given) model->B3SOIDDuc1 = (model->B3SOIDDmobMod == 3) ? -0.056 : -0.056e-9; if (!model->B3SOIDDu0Given) model->B3SOIDDu0 = (model->B3SOIDDtype == NMOS) ? 0.067 : 0.025; if (!model->B3SOIDDuteGiven) model->B3SOIDDute = -1.5; if (!model->B3SOIDDvoffGiven) model->B3SOIDDvoff = -0.08; if (!model->B3SOIDDdeltaGiven) model->B3SOIDDdelta = 0.01; if (!model->B3SOIDDrdswGiven) model->B3SOIDDrdsw = 100; if (!model->B3SOIDDprwgGiven) model->B3SOIDDprwg = 0.0; /* unit 1/V */ if (!model->B3SOIDDprwbGiven) model->B3SOIDDprwb = 0.0; if (!model->B3SOIDDprtGiven) if (!model->B3SOIDDprtGiven) model->B3SOIDDprt = 0.0; if (!model->B3SOIDDeta0Given) model->B3SOIDDeta0 = 0.08; /* no unit */ if (!model->B3SOIDDetabGiven) model->B3SOIDDetab = -0.07; /* unit 1/V */ if (!model->B3SOIDDpclmGiven) model->B3SOIDDpclm = 1.3; /* no unit */ if (!model->B3SOIDDpdibl1Given) model->B3SOIDDpdibl1 = .39; /* no unit */ if (!model->B3SOIDDpdibl2Given) model->B3SOIDDpdibl2 = 0.0086; /* no unit */ if (!model->B3SOIDDpdiblbGiven) model->B3SOIDDpdiblb = 0.0; /* 1/V */ if (!model->B3SOIDDpvagGiven) model->B3SOIDDpvag = 0.0; if (!model->B3SOIDDwrGiven) model->B3SOIDDwr = 1.0; if (!model->B3SOIDDdwgGiven) model->B3SOIDDdwg = 0.0; if (!model->B3SOIDDdwbGiven) model->B3SOIDDdwb = 0.0; if (!model->B3SOIDDb0Given) model->B3SOIDDb0 = 0.0; if (!model->B3SOIDDb1Given) model->B3SOIDDb1 = 0.0; if (!model->B3SOIDDalpha0Given) model->B3SOIDDalpha0 = 0.0; if (!model->B3SOIDDalpha1Given) model->B3SOIDDalpha1 = 1.0; if (!model->B3SOIDDbeta0Given) model->B3SOIDDbeta0 = 30.0; if (!model->B3SOIDDcgslGiven) model->B3SOIDDcgsl = 0.0; if (!model->B3SOIDDcgdlGiven) model->B3SOIDDcgdl = 0.0; if (!model->B3SOIDDckappaGiven) model->B3SOIDDckappa = 0.6; if (!model->B3SOIDDclcGiven) model->B3SOIDDclc = 0.1e-7; if (!model->B3SOIDDcleGiven) model->B3SOIDDcle = 0.0; if (!model->B3SOIDDtboxGiven) model->B3SOIDDtbox = 3e-7; if (!model->B3SOIDDtsiGiven) model->B3SOIDDtsi = 1e-7; if (!model->B3SOIDDxjGiven) model->B3SOIDDxj = model->B3SOIDDtsi; if (!model->B3SOIDDkb1Given) model->B3SOIDDkb1 = 1; if (!model->B3SOIDDkb3Given) model->B3SOIDDkb3 = 1; if (!model->B3SOIDDdvbd0Given) model->B3SOIDDdvbd0 = 0.0; if (!model->B3SOIDDdvbd1Given) model->B3SOIDDdvbd1 = 0.0; if (!model->B3SOIDDvbsaGiven) model->B3SOIDDvbsa = 0.0; if (!model->B3SOIDDdelpGiven) model->B3SOIDDdelp = 0.02; if (!model->B3SOIDDrbodyGiven) model->B3SOIDDrbody = 0.0; if (!model->B3SOIDDrbshGiven) model->B3SOIDDrbsh = 0.0; if (!model->B3SOIDDadice0Given) model->B3SOIDDadice0 = 1; if (!model->B3SOIDDabpGiven) model->B3SOIDDabp = 1; if (!model->B3SOIDDmxcGiven) model->B3SOIDDmxc = -0.9; if (!model->B3SOIDDrth0Given) model->B3SOIDDrth0 = 0; if (!model->B3SOIDDcth0Given) model->B3SOIDDcth0 = 0; if (!model->B3SOIDDaiiGiven) model->B3SOIDDaii = 0.0; if (!model->B3SOIDDbiiGiven) model->B3SOIDDbii = 0.0; if (!model->B3SOIDDciiGiven) model->B3SOIDDcii = 0.0; if (!model->B3SOIDDdiiGiven) model->B3SOIDDdii = -1.0; if (!model->B3SOIDDagidlGiven) model->B3SOIDDagidl = 0.0; if (!model->B3SOIDDbgidlGiven) model->B3SOIDDbgidl = 0.0; if (!model->B3SOIDDngidlGiven) model->B3SOIDDngidl = 1.2; if (!model->B3SOIDDndiodeGiven) model->B3SOIDDndiode = 1.0; if (!model->B3SOIDDntunGiven) model->B3SOIDDntun = 10.0; if (!model->B3SOIDDisbjtGiven) model->B3SOIDDisbjt = 1e-6; if (!model->B3SOIDDisdifGiven) model->B3SOIDDisdif = 0.0; if (!model->B3SOIDDisrecGiven) model->B3SOIDDisrec = 1e-5; if (!model->B3SOIDDistunGiven) model->B3SOIDDistun = 0.0; if (!model->B3SOIDDxbjtGiven) model->B3SOIDDxbjt = 2; if (!model->B3SOIDDxdifGiven) model->B3SOIDDxdif = 2; if (!model->B3SOIDDxrecGiven) model->B3SOIDDxrec = 20; if (!model->B3SOIDDxtunGiven) model->B3SOIDDxtun = 0; if (!model->B3SOIDDedlGiven) model->B3SOIDDedl = 2e-6; if (!model->B3SOIDDkbjt1Given) model->B3SOIDDkbjt1 = 0; if (!model->B3SOIDDttGiven) model->B3SOIDDtt = 1e-12; if (!model->B3SOIDDasdGiven) model->B3SOIDDasd = 0.3; /* unit degree celcius */ if (!model->B3SOIDDtnomGiven) model->B3SOIDDtnom = ckt->CKTnomTemp; if (!model->B3SOIDDLintGiven) model->B3SOIDDLint = 0.0; if (!model->B3SOIDDLlGiven) model->B3SOIDDLl = 0.0; if (!model->B3SOIDDLlnGiven) model->B3SOIDDLln = 1.0; if (!model->B3SOIDDLwGiven) model->B3SOIDDLw = 0.0; if (!model->B3SOIDDLwnGiven) model->B3SOIDDLwn = 1.0; if (!model->B3SOIDDLwlGiven) model->B3SOIDDLwl = 0.0; if (!model->B3SOIDDLminGiven) model->B3SOIDDLmin = 0.0; if (!model->B3SOIDDLmaxGiven) model->B3SOIDDLmax = 1.0; if (!model->B3SOIDDWintGiven) model->B3SOIDDWint = 0.0; if (!model->B3SOIDDWlGiven) model->B3SOIDDWl = 0.0; if (!model->B3SOIDDWlnGiven) model->B3SOIDDWln = 1.0; if (!model->B3SOIDDWwGiven) model->B3SOIDDWw = 0.0; if (!model->B3SOIDDWwnGiven) model->B3SOIDDWwn = 1.0; if (!model->B3SOIDDWwlGiven) model->B3SOIDDWwl = 0.0; if (!model->B3SOIDDWminGiven) model->B3SOIDDWmin = 0.0; if (!model->B3SOIDDWmaxGiven) model->B3SOIDDWmax = 1.0; if (!model->B3SOIDDdwcGiven) model->B3SOIDDdwc = model->B3SOIDDWint; if (!model->B3SOIDDdlcGiven) model->B3SOIDDdlc = model->B3SOIDDLint;/* Added for binning - START */ /* Length dependence */ if (!model->B3SOIDDlnpeakGiven) model->B3SOIDDlnpeak = 0.0; if (!model->B3SOIDDlnsubGiven) model->B3SOIDDlnsub = 0.0; if (!model->B3SOIDDlngateGiven) model->B3SOIDDlngate = 0.0; if (!model->B3SOIDDlvth0Given) model->B3SOIDDlvth0 = 0.0; if (!model->B3SOIDDlk1Given) model->B3SOIDDlk1 = 0.0; if (!model->B3SOIDDlk2Given) model->B3SOIDDlk2 = 0.0; if (!model->B3SOIDDlk3Given) model->B3SOIDDlk3 = 0.0; if (!model->B3SOIDDlk3bGiven) model->B3SOIDDlk3b = 0.0; if (!model->B3SOIDDlvbsaGiven)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -