📄 b3v0set.c
字号:
/**********Copyright 1990 Regents of the University of California. All rights reserved.Author: 1995 Min-Chie Jeng and Mansun Chan.File: b3v0set.c**********/#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "bsim3v0def.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.0e6intBSIM3v0setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states){BSIM3v0model *model = (BSIM3v0model*)inModel;BSIM3v0instance *here;int error;CKTnode *tmp;CKTnode *tmpNode;IFuid tmpName; /* loop through all the BSIM3v0 device models */ for( ; model != NULL; model = model->BSIM3v0nextModel ) {/* Default value Processing for BSIM3v0 MOSFET Models */ if (!model->BSIM3v0typeGiven) model->BSIM3v0type = NMOS; if (!model->BSIM3v0mobModGiven) model->BSIM3v0mobMod = 1; if (!model->BSIM3v0binUnitGiven) model->BSIM3v0binUnit = 1; if (!model->BSIM3v0capModGiven) model->BSIM3v0capMod = 1; if (!model->BSIM3v0nqsModGiven) model->BSIM3v0nqsMod = 0; if (!model->BSIM3v0noiModGiven) model->BSIM3v0noiMod = 1; if (!model->BSIM3v0toxGiven) model->BSIM3v0tox = 150.0e-10; model->BSIM3v0cox = 3.453133e-11 / model->BSIM3v0tox; if (!model->BSIM3v0cdscGiven) model->BSIM3v0cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM3v0cdscbGiven) model->BSIM3v0cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v0cdscdGiven) model->BSIM3v0cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v0citGiven) model->BSIM3v0cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v0nfactorGiven) model->BSIM3v0nfactor = 1; if (!model->BSIM3v0xjGiven) model->BSIM3v0xj = .15e-6; if (!model->BSIM3v0vsatGiven) model->BSIM3v0vsat = 8.0e4; /* unit m/s */ if (!model->BSIM3v0atGiven) model->BSIM3v0at = 3.3e4; /* unit m/s */ if (!model->BSIM3v0a0Given) model->BSIM3v0a0 = 1.0; if (!model->BSIM3v0agsGiven) model->BSIM3v0ags = 0.0; if (!model->BSIM3v0a1Given) model->BSIM3v0a1 = 0.0; if (!model->BSIM3v0a2Given) model->BSIM3v0a2 = 1.0; if (!model->BSIM3v0ketaGiven) model->BSIM3v0keta = -0.047; /* unit / V */ if (!model->BSIM3v0nsubGiven) model->BSIM3v0nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM3v0npeakGiven) model->BSIM3v0npeak = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM3v0vbmGiven) model->BSIM3v0vbm = -5.0; if (!model->BSIM3v0xtGiven) model->BSIM3v0xt = 1.55e-7; if (!model->BSIM3v0kt1Given) model->BSIM3v0kt1 = -0.11; /* unit V */ if (!model->BSIM3v0kt1lGiven) model->BSIM3v0kt1l = 0.0; /* unit V*m */ if (!model->BSIM3v0kt2Given) model->BSIM3v0kt2 = 0.022; /* No unit */ if (!model->BSIM3v0k3Given) model->BSIM3v0k3 = 80.0; if (!model->BSIM3v0k3bGiven) model->BSIM3v0k3b = 0.0; if (!model->BSIM3v0w0Given) model->BSIM3v0w0 = 2.5e-6; if (!model->BSIM3v0nlxGiven) model->BSIM3v0nlx = 1.74e-7; if (!model->BSIM3v0dvt0Given) model->BSIM3v0dvt0 = 2.2; if (!model->BSIM3v0dvt1Given) model->BSIM3v0dvt1 = 0.53; if (!model->BSIM3v0dvt2Given) model->BSIM3v0dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM3v0dvt0wGiven) model->BSIM3v0dvt0w = 0.0; if (!model->BSIM3v0dvt1wGiven) model->BSIM3v0dvt1w = 5.3e6; if (!model->BSIM3v0dvt2wGiven) model->BSIM3v0dvt2w = -0.032; if (!model->BSIM3v0droutGiven) model->BSIM3v0drout = 0.56; if (!model->BSIM3v0dsubGiven) model->BSIM3v0dsub = model->BSIM3v0drout; if (!model->BSIM3v0vth0Given) model->BSIM3v0vth0 = (model->BSIM3v0type == NMOS) ? 0.7 : -0.7; if (!model->BSIM3v0uaGiven) model->BSIM3v0ua = 2.25e-9; /* unit m/V */ if (!model->BSIM3v0ua1Given) model->BSIM3v0ua1 = 4.31e-9; /* unit m/V */ if (!model->BSIM3v0ubGiven) model->BSIM3v0ub = 5.87e-19; /* unit (m/V)**2 */ if (!model->BSIM3v0ub1Given) model->BSIM3v0ub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->BSIM3v0ucGiven) model->BSIM3v0uc = (model->BSIM3v0mobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->BSIM3v0uc1Given) model->BSIM3v0uc1 = (model->BSIM3v0mobMod == 3) ? -0.056 : -0.056e-9; if (!model->BSIM3v0u0Given) model->BSIM3v0u0 = (model->BSIM3v0type == NMOS) ? 0.067 : 0.025; else if (model->BSIM3v0u0 > 1.0) model->BSIM3v0u0 = model->BSIM3v0u0 / 1.0e4; /* if u0 > 1.0, cm.g.sec unit system is used. If should be converted into SI unit system. */ if (!model->BSIM3v0uteGiven) model->BSIM3v0ute = -1.5; if (!model->BSIM3v0voffGiven) model->BSIM3v0voff = -0.08; if (!model->BSIM3v0deltaGiven) model->BSIM3v0delta = 0.01; if (!model->BSIM3v0rdswGiven) model->BSIM3v0rdsw = 0; if (!model->BSIM3v0prwgGiven) model->BSIM3v0prwg = 0.0; /* unit 1/V */ if (!model->BSIM3v0prwbGiven) model->BSIM3v0prwb = 0.0; if (!model->BSIM3v0prtGiven) if (!model->BSIM3v0prtGiven) model->BSIM3v0prt = 0.0; if (!model->BSIM3v0eta0Given) model->BSIM3v0eta0 = 0.08; /* no unit */ if (!model->BSIM3v0etabGiven) model->BSIM3v0etab = -0.07; /* unit 1/V */ if (!model->BSIM3v0pclmGiven) model->BSIM3v0pclm = 1.3; /* no unit */ if (!model->BSIM3v0pdibl1Given) model->BSIM3v0pdibl1 = .39; /* no unit */ if (!model->BSIM3v0pdibl2Given) model->BSIM3v0pdibl2 = 0.0086; /* no unit */ if (!model->BSIM3v0pdiblbGiven) model->BSIM3v0pdiblb = 0.0; /* 1/V */ if (!model->BSIM3v0pscbe1Given) model->BSIM3v0pscbe1 = 4.24e8; if (!model->BSIM3v0pscbe2Given) model->BSIM3v0pscbe2 = 1.0e-5; if (!model->BSIM3v0pvagGiven) model->BSIM3v0pvag = 0.0; if (!model->BSIM3v0wrGiven) model->BSIM3v0wr = 1.0; if (!model->BSIM3v0dwgGiven) model->BSIM3v0dwg = 0.0; if (!model->BSIM3v0dwbGiven) model->BSIM3v0dwb = 0.0; if (!model->BSIM3v0b0Given) model->BSIM3v0b0 = 0.0; if (!model->BSIM3v0b1Given) model->BSIM3v0b1 = 0.0; if (!model->BSIM3v0alpha0Given) model->BSIM3v0alpha0 = 0.0; if (!model->BSIM3v0beta0Given) model->BSIM3v0beta0 = 30.0; if (!model->BSIM3v0elmGiven) model->BSIM3v0elm = 5.0; if (!model->BSIM3v0cgslGiven) model->BSIM3v0cgsl = 0.0; if (!model->BSIM3v0cgdlGiven) model->BSIM3v0cgdl = 0.0; if (!model->BSIM3v0ckappaGiven) model->BSIM3v0ckappa = 0.6; if (!model->BSIM3v0clcGiven) model->BSIM3v0clc = 0.1e-6; if (!model->BSIM3v0cleGiven) model->BSIM3v0cle = 0.6; /* Length dependence */ if (!model->BSIM3v0lcdscGiven) model->BSIM3v0lcdsc = 0.0; if (!model->BSIM3v0lcdscbGiven) model->BSIM3v0lcdscb = 0.0; if (!model->BSIM3v0lcdscdGiven) model->BSIM3v0lcdscd = 0.0; if (!model->BSIM3v0lcitGiven) model->BSIM3v0lcit = 0.0; if (!model->BSIM3v0lnfactorGiven) model->BSIM3v0lnfactor = 0.0; if (!model->BSIM3v0lxjGiven) model->BSIM3v0lxj = 0.0; if (!model->BSIM3v0lvsatGiven) model->BSIM3v0lvsat = 0.0; if (!model->BSIM3v0latGiven) model->BSIM3v0lat = 0.0; if (!model->BSIM3v0la0Given) model->BSIM3v0la0 = 0.0; if (!model->BSIM3v0lagsGiven) model->BSIM3v0lags = 0.0; if (!model->BSIM3v0la1Given) model->BSIM3v0la1 = 0.0; if (!model->BSIM3v0la2Given) model->BSIM3v0la2 = 0.0; if (!model->BSIM3v0lketaGiven) model->BSIM3v0lketa = 0.0; if (!model->BSIM3v0lnsubGiven) model->BSIM3v0lnsub = 0.0; if (!model->BSIM3v0lnpeakGiven) model->BSIM3v0lnpeak = 0.0; if (!model->BSIM3v0lvbmGiven) model->BSIM3v0lvbm = 0.0; if (!model->BSIM3v0lxtGiven) model->BSIM3v0lxt = 0.0; if (!model->BSIM3v0lkt1Given) model->BSIM3v0lkt1 = 0.0; if (!model->BSIM3v0lkt1lGiven) model->BSIM3v0lkt1l = 0.0; if (!model->BSIM3v0lkt2Given) model->BSIM3v0lkt2 = 0.0; if (!model->BSIM3v0lk3Given) model->BSIM3v0lk3 = 0.0; if (!model->BSIM3v0lk3bGiven) model->BSIM3v0lk3b = 0.0; if (!model->BSIM3v0lw0Given) model->BSIM3v0lw0 = 0.0; if (!model->BSIM3v0lnlxGiven) model->BSIM3v0lnlx = 0.0; if (!model->BSIM3v0ldvt0Given) model->BSIM3v0ldvt0 = 0.0; if (!model->BSIM3v0ldvt1Given) model->BSIM3v0ldvt1 = 0.0; if (!model->BSIM3v0ldvt2Given) model->BSIM3v0ldvt2 = 0.0; if (!model->BSIM3v0ldvt0wGiven) model->BSIM3v0ldvt0w = 0.0; if (!model->BSIM3v0ldvt1wGiven) model->BSIM3v0ldvt1w = 0.0; if (!model->BSIM3v0ldvt2wGiven) model->BSIM3v0ldvt2w = 0.0; if (!model->BSIM3v0ldroutGiven) model->BSIM3v0ldrout = 0.0; if (!model->BSIM3v0ldsubGiven) model->BSIM3v0ldsub = 0.0; if (!model->BSIM3v0lvth0Given) model->BSIM3v0lvth0 = 0.0; if (!model->BSIM3v0luaGiven) model->BSIM3v0lua = 0.0; if (!model->BSIM3v0lua1Given) model->BSIM3v0lua1 = 0.0; if (!model->BSIM3v0lubGiven) model->BSIM3v0lub = 0.0; if (!model->BSIM3v0lub1Given) model->BSIM3v0lub1 = 0.0; if (!model->BSIM3v0lucGiven) model->BSIM3v0luc = 0.0; if (!model->BSIM3v0luc1Given) model->BSIM3v0luc1 = 0.0; if (!model->BSIM3v0lu0Given) model->BSIM3v0lu0 = 0.0; else if (model->BSIM3v0u0 > 1.0) model->BSIM3v0lu0 = model->BSIM3v0lu0 / 1.0e4; if (!model->BSIM3v0luteGiven) model->BSIM3v0lute = 0.0; if (!model->BSIM3v0lvoffGiven) model->BSIM3v0lvoff = 0.0; if (!model->BSIM3v0ldeltaGiven) model->BSIM3v0ldelta = 0.0; if (!model->BSIM3v0lrdswGiven) model->BSIM3v0lrdsw = 0.0; if (!model->BSIM3v0lprwbGiven) model->BSIM3v0lprwb = 0.0; if (!model->BSIM3v0lprwgGiven) model->BSIM3v0lprwg = 0.0; if (!model->BSIM3v0lprtGiven) if (!model->BSIM3v0lprtGiven) model->BSIM3v0lprt = 0.0; if (!model->BSIM3v0leta0Given) model->BSIM3v0leta0 = 0.0; if (!model->BSIM3v0letabGiven) model->BSIM3v0letab = -0.0; if (!model->BSIM3v0lpclmGiven) model->BSIM3v0lpclm = 0.0; if (!model->BSIM3v0lpdibl1Given) model->BSIM3v0lpdibl1 = 0.0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -