📄 b3v1sset.c
字号:
/**********Copyright 1990 Regents of the University of California. All rights reserved.Author: 1995 Min-Chie Jeng and Mansun Chan.Modified by Paolo Nenzi 2002File: b3v1sset.c**********/#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "bsim3v1sdef.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.0e6intBSIM3v1Ssetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states){BSIM3v1Smodel *model = (BSIM3v1Smodel*)inModel;BSIM3v1Sinstance *here;int error;CKTnode *tmp;CKTnode *tmpNode;IFuid tmpName; /* loop through all the BSIM3v1S device models */ for( ; model != NULL; model = model->BSIM3v1SnextModel ) {/* Default value Processing for BSIM3v1S MOSFET Models */ if (!model->BSIM3v1StypeGiven) model->BSIM3v1Stype = NMOS; if (!model->BSIM3v1SmobModGiven) model->BSIM3v1SmobMod = 1; if (!model->BSIM3v1SbinUnitGiven) model->BSIM3v1SbinUnit = 1; if (!model->BSIM3v1SparamChkGiven) model->BSIM3v1SparamChk = 0; if (!model->BSIM3v1ScapModGiven) model->BSIM3v1ScapMod = 2; if (!model->BSIM3v1SnqsModGiven) model->BSIM3v1SnqsMod = 0; if (!model->BSIM3v1SnoiModGiven) model->BSIM3v1SnoiMod = 1; if (!model->BSIM3v1SversionGiven) model->BSIM3v1Sversion = 3.1; if (!model->BSIM3v1StoxGiven) model->BSIM3v1Stox = 150.0e-10; model->BSIM3v1Scox = 3.453133e-11 / model->BSIM3v1Stox; if (!model->BSIM3v1ScdscGiven) model->BSIM3v1Scdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM3v1ScdscbGiven) model->BSIM3v1Scdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1ScdscdGiven) model->BSIM3v1Scdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1ScitGiven) model->BSIM3v1Scit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1SnfactorGiven) model->BSIM3v1Snfactor = 1; if (!model->BSIM3v1SxjGiven) model->BSIM3v1Sxj = .15e-6; if (!model->BSIM3v1SvsatGiven) model->BSIM3v1Svsat = 8.0e4; /* unit m/s */ if (!model->BSIM3v1SatGiven) model->BSIM3v1Sat = 3.3e4; /* unit m/s */ if (!model->BSIM3v1Sa0Given) model->BSIM3v1Sa0 = 1.0; if (!model->BSIM3v1SagsGiven) model->BSIM3v1Sags = 0.0; if (!model->BSIM3v1Sa1Given) model->BSIM3v1Sa1 = 0.0; if (!model->BSIM3v1Sa2Given) model->BSIM3v1Sa2 = 1.0; if (!model->BSIM3v1SketaGiven) model->BSIM3v1Sketa = -0.047; /* unit / V */ if (!model->BSIM3v1SnsubGiven) model->BSIM3v1Snsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM3v1SnpeakGiven) model->BSIM3v1Snpeak = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM3v1SngateGiven) model->BSIM3v1Sngate = 0; /* unit 1/cm3 */ if (!model->BSIM3v1SvbmGiven) model->BSIM3v1Svbm = -3.0; if (!model->BSIM3v1SxtGiven) model->BSIM3v1Sxt = 1.55e-7; if (!model->BSIM3v1Skt1Given) model->BSIM3v1Skt1 = -0.11; /* unit V */ if (!model->BSIM3v1Skt1lGiven) model->BSIM3v1Skt1l = 0.0; /* unit V*m */ if (!model->BSIM3v1Skt2Given) model->BSIM3v1Skt2 = 0.022; /* No unit */ if (!model->BSIM3v1Sk3Given) model->BSIM3v1Sk3 = 80.0; if (!model->BSIM3v1Sk3bGiven) model->BSIM3v1Sk3b = 0.0; if (!model->BSIM3v1Sw0Given) model->BSIM3v1Sw0 = 2.5e-6; if (!model->BSIM3v1SnlxGiven) model->BSIM3v1Snlx = 1.74e-7; if (!model->BSIM3v1Sdvt0Given) model->BSIM3v1Sdvt0 = 2.2; if (!model->BSIM3v1Sdvt1Given) model->BSIM3v1Sdvt1 = 0.53; if (!model->BSIM3v1Sdvt2Given) model->BSIM3v1Sdvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM3v1Sdvt0wGiven) model->BSIM3v1Sdvt0w = 0.0; if (!model->BSIM3v1Sdvt1wGiven) model->BSIM3v1Sdvt1w = 5.3e6; if (!model->BSIM3v1Sdvt2wGiven) model->BSIM3v1Sdvt2w = -0.032; if (!model->BSIM3v1SdroutGiven) model->BSIM3v1Sdrout = 0.56; if (!model->BSIM3v1SdsubGiven) model->BSIM3v1Sdsub = model->BSIM3v1Sdrout; if (!model->BSIM3v1Svth0Given) model->BSIM3v1Svth0 = (model->BSIM3v1Stype == NMOS) ? 0.7 : -0.7; if (!model->BSIM3v1SuaGiven) model->BSIM3v1Sua = 2.25e-9; /* unit m/V */ if (!model->BSIM3v1Sua1Given) model->BSIM3v1Sua1 = 4.31e-9; /* unit m/V */ if (!model->BSIM3v1SubGiven) model->BSIM3v1Sub = 5.87e-19; /* unit (m/V)**2 */ if (!model->BSIM3v1Sub1Given) model->BSIM3v1Sub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->BSIM3v1SucGiven) model->BSIM3v1Suc = (model->BSIM3v1SmobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->BSIM3v1Suc1Given) model->BSIM3v1Suc1 = (model->BSIM3v1SmobMod == 3) ? -0.056 : -0.056e-9; if (!model->BSIM3v1Su0Given) model->BSIM3v1Su0 = (model->BSIM3v1Stype == NMOS) ? 0.067 : 0.025; if (!model->BSIM3v1SuteGiven) model->BSIM3v1Sute = -1.5; if (!model->BSIM3v1SvoffGiven) model->BSIM3v1Svoff = -0.08; if (!model->BSIM3v1SdeltaGiven) model->BSIM3v1Sdelta = 0.01; if (!model->BSIM3v1SrdswGiven) model->BSIM3v1Srdsw = 0; if (!model->BSIM3v1SprwgGiven) model->BSIM3v1Sprwg = 0.0; /* unit 1/V */ if (!model->BSIM3v1SprwbGiven) model->BSIM3v1Sprwb = 0.0; if (!model->BSIM3v1SprtGiven) if (!model->BSIM3v1SprtGiven) model->BSIM3v1Sprt = 0.0; if (!model->BSIM3v1Seta0Given) model->BSIM3v1Seta0 = 0.08; /* no unit */ if (!model->BSIM3v1SetabGiven) model->BSIM3v1Setab = -0.07; /* unit 1/V */ if (!model->BSIM3v1SpclmGiven) model->BSIM3v1Spclm = 1.3; /* no unit */ if (!model->BSIM3v1Spdibl1Given) model->BSIM3v1Spdibl1 = .39; /* no unit */ if (!model->BSIM3v1Spdibl2Given) model->BSIM3v1Spdibl2 = 0.0086; /* no unit */ if (!model->BSIM3v1SpdiblbGiven) model->BSIM3v1Spdiblb = 0.0; /* 1/V */ if (!model->BSIM3v1Spscbe1Given) model->BSIM3v1Spscbe1 = 4.24e8; if (!model->BSIM3v1Spscbe2Given) model->BSIM3v1Spscbe2 = 1.0e-5; if (!model->BSIM3v1SpvagGiven) model->BSIM3v1Spvag = 0.0; if (!model->BSIM3v1SwrGiven) model->BSIM3v1Swr = 1.0; if (!model->BSIM3v1SdwgGiven) model->BSIM3v1Sdwg = 0.0; if (!model->BSIM3v1SdwbGiven) model->BSIM3v1Sdwb = 0.0; if (!model->BSIM3v1Sb0Given) model->BSIM3v1Sb0 = 0.0; if (!model->BSIM3v1Sb1Given) model->BSIM3v1Sb1 = 0.0; if (!model->BSIM3v1Salpha0Given) model->BSIM3v1Salpha0 = 0.0; if (!model->BSIM3v1Sbeta0Given) model->BSIM3v1Sbeta0 = 30.0; if (!model->BSIM3v1SelmGiven) model->BSIM3v1Selm = 5.0; if (!model->BSIM3v1ScgslGiven) model->BSIM3v1Scgsl = 0.0; if (!model->BSIM3v1ScgdlGiven) model->BSIM3v1Scgdl = 0.0; if (!model->BSIM3v1SckappaGiven) model->BSIM3v1Sckappa = 0.6; if (!model->BSIM3v1SclcGiven) model->BSIM3v1Sclc = 0.1e-6; if (!model->BSIM3v1ScleGiven) model->BSIM3v1Scle = 0.6; if (!model->BSIM3v1SvfbcvGiven) model->BSIM3v1Svfbcv = -1.0; /* Length dependence */ if (!model->BSIM3v1SlcdscGiven) model->BSIM3v1Slcdsc = 0.0; if (!model->BSIM3v1SlcdscbGiven) model->BSIM3v1Slcdscb = 0.0; if (!model->BSIM3v1SlcdscdGiven) model->BSIM3v1Slcdscd = 0.0; if (!model->BSIM3v1SlcitGiven) model->BSIM3v1Slcit = 0.0; if (!model->BSIM3v1SlnfactorGiven) model->BSIM3v1Slnfactor = 0.0; if (!model->BSIM3v1SlxjGiven) model->BSIM3v1Slxj = 0.0; if (!model->BSIM3v1SlvsatGiven) model->BSIM3v1Slvsat = 0.0; if (!model->BSIM3v1SlatGiven) model->BSIM3v1Slat = 0.0; if (!model->BSIM3v1Sla0Given) model->BSIM3v1Sla0 = 0.0; if (!model->BSIM3v1SlagsGiven) model->BSIM3v1Slags = 0.0; if (!model->BSIM3v1Sla1Given) model->BSIM3v1Sla1 = 0.0; if (!model->BSIM3v1Sla2Given) model->BSIM3v1Sla2 = 0.0; if (!model->BSIM3v1SlketaGiven) model->BSIM3v1Slketa = 0.0; if (!model->BSIM3v1SlnsubGiven) model->BSIM3v1Slnsub = 0.0; if (!model->BSIM3v1SlnpeakGiven) model->BSIM3v1Slnpeak = 0.0; if (!model->BSIM3v1SlngateGiven) model->BSIM3v1Slngate = 0.0; if (!model->BSIM3v1SlvbmGiven) model->BSIM3v1Slvbm = 0.0; if (!model->BSIM3v1SlxtGiven) model->BSIM3v1Slxt = 0.0; if (!model->BSIM3v1Slkt1Given) model->BSIM3v1Slkt1 = 0.0; if (!model->BSIM3v1Slkt1lGiven) model->BSIM3v1Slkt1l = 0.0; if (!model->BSIM3v1Slkt2Given) model->BSIM3v1Slkt2 = 0.0; if (!model->BSIM3v1Slk3Given) model->BSIM3v1Slk3 = 0.0; if (!model->BSIM3v1Slk3bGiven) model->BSIM3v1Slk3b = 0.0; if (!model->BSIM3v1Slw0Given) model->BSIM3v1Slw0 = 0.0; if (!model->BSIM3v1SlnlxGiven) model->BSIM3v1Slnlx = 0.0; if (!model->BSIM3v1Sldvt0Given) model->BSIM3v1Sldvt0 = 0.0; if (!model->BSIM3v1Sldvt1Given) model->BSIM3v1Sldvt1 = 0.0; if (!model->BSIM3v1Sldvt2Given) model->BSIM3v1Sldvt2 = 0.0; if (!model->BSIM3v1Sldvt0wGiven) model->BSIM3v1Sldvt0w = 0.0; if (!model->BSIM3v1Sldvt1wGiven) model->BSIM3v1Sldvt1w = 0.0; if (!model->BSIM3v1Sldvt2wGiven) model->BSIM3v1Sldvt2w = 0.0; if (!model->BSIM3v1SldroutGiven) model->BSIM3v1Sldrout = 0.0; if (!model->BSIM3v1SldsubGiven) model->BSIM3v1Sldsub = 0.0; if (!model->BSIM3v1Slvth0Given) model->BSIM3v1Slvth0 = 0.0; if (!model->BSIM3v1SluaGiven) model->BSIM3v1Slua = 0.0; if (!model->BSIM3v1Slua1Given) model->BSIM3v1Slua1 = 0.0; if (!model->BSIM3v1SlubGiven) model->BSIM3v1Slub = 0.0; if (!model->BSIM3v1Slub1Given) model->BSIM3v1Slub1 = 0.0; if (!model->BSIM3v1SlucGiven) model->BSIM3v1Sluc = 0.0; if (!model->BSIM3v1Sluc1Given) model->BSIM3v1Sluc1 = 0.0; if (!model->BSIM3v1Slu0Given) model->BSIM3v1Slu0 = 0.0; if (!model->BSIM3v1SluteGiven) model->BSIM3v1Slute = 0.0; if (!model->BSIM3v1SlvoffGiven) model->BSIM3v1Slvoff = 0.0; if (!model->BSIM3v1SldeltaGiven) model->BSIM3v1Sldelta = 0.0; if (!model->BSIM3v1SlrdswGiven) model->BSIM3v1Slrdsw = 0.0; if (!model->BSIM3v1SlprwbGiven) model->BSIM3v1Slprwb = 0.0; if (!model->BSIM3v1SlprwgGiven) model->BSIM3v1Slprwg = 0.0; if (!model->BSIM3v1SlprtGiven) if (!model->BSIM3v1SlprtGiven) model->BSIM3v1Slprt = 0.0; if (!model->BSIM3v1Sleta0Given) model->BSIM3v1Sleta0 = 0.0; if (!model->BSIM3v1SletabGiven) model->BSIM3v1Sletab = -0.0; if (!model->BSIM3v1SlpclmGiven) model->BSIM3v1Slpclm = 0.0; if (!model->BSIM3v1Slpdibl1Given) model->BSIM3v1Slpdibl1 = 0.0; if (!model->BSIM3v1Slpdibl2Given) model->BSIM3v1Slpdibl2 = 0.0; if (!model->BSIM3v1SlpdiblbGiven) model->BSIM3v1Slpdiblb = 0.0; if (!model->BSIM3v1Slpscbe1Given) model->BSIM3v1Slpscbe1 = 0.0; if (!model->BSIM3v1Slpscbe2Given) model->BSIM3v1Slpscbe2 = 0.0; if (!model->BSIM3v1SlpvagGiven) model->BSIM3v1Slpvag = 0.0; if (!model->BSIM3v1SlwrGiven) model->BSIM3v1Slwr = 0.0; if (!model->BSIM3v1SldwgGiven)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -