📄 b3v1set.c
字号:
/********** * Copyright 1990 Regents of the University of California. All rights reserved. * File: b3v1set.c * Author: 1995 Min-Chie Jeng and Mansun Chan. * Modified by Paolo Nenzi 2002 **********/ /* * Release Notes: * BSIM3v3.1, Released by yuhua 96/12/08 */#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "bsim3v1def.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.0e6intBSIM3v1setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states){BSIM3v1model *model = (BSIM3v1model*)inModel;BSIM3v1instance *here;int error;CKTnode *tmp;CKTnode *tmpNode;IFuid tmpName; /* loop through all the BSIM3v1 device models */ for( ; model != NULL; model = model->BSIM3v1nextModel ) {/* Default value Processing for BSIM3v1 MOSFET Models */ if (!model->BSIM3v1typeGiven) model->BSIM3v1type = NMOS; if (!model->BSIM3v1mobModGiven) model->BSIM3v1mobMod = 1; if (!model->BSIM3v1binUnitGiven) model->BSIM3v1binUnit = 1; if (!model->BSIM3v1paramChkGiven) model->BSIM3v1paramChk = 0; if (!model->BSIM3v1capModGiven) model->BSIM3v1capMod = 2; if (!model->BSIM3v1nqsModGiven) model->BSIM3v1nqsMod = 0; if (!model->BSIM3v1noiModGiven) model->BSIM3v1noiMod = 1; if (!model->BSIM3v1versionGiven) model->BSIM3v1version = 3.1; if (!model->BSIM3v1toxGiven) model->BSIM3v1tox = 150.0e-10; model->BSIM3v1cox = 3.453133e-11 / model->BSIM3v1tox; if (!model->BSIM3v1cdscGiven) model->BSIM3v1cdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM3v1cdscbGiven) model->BSIM3v1cdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1cdscdGiven) model->BSIM3v1cdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1citGiven) model->BSIM3v1cit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1nfactorGiven) model->BSIM3v1nfactor = 1; if (!model->BSIM3v1xjGiven) model->BSIM3v1xj = .15e-6; if (!model->BSIM3v1vsatGiven) model->BSIM3v1vsat = 8.0e4; /* unit m/s */ if (!model->BSIM3v1atGiven) model->BSIM3v1at = 3.3e4; /* unit m/s */ if (!model->BSIM3v1a0Given) model->BSIM3v1a0 = 1.0; if (!model->BSIM3v1agsGiven) model->BSIM3v1ags = 0.0; if (!model->BSIM3v1a1Given) model->BSIM3v1a1 = 0.0; if (!model->BSIM3v1a2Given) model->BSIM3v1a2 = 1.0; if (!model->BSIM3v1ketaGiven) model->BSIM3v1keta = -0.047; /* unit / V */ if (!model->BSIM3v1nsubGiven) model->BSIM3v1nsub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM3v1npeakGiven) model->BSIM3v1npeak = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM3v1ngateGiven) model->BSIM3v1ngate = 0; /* unit 1/cm3 */ if (!model->BSIM3v1vbmGiven) model->BSIM3v1vbm = -3.0; if (!model->BSIM3v1xtGiven) model->BSIM3v1xt = 1.55e-7; if (!model->BSIM3v1kt1Given) model->BSIM3v1kt1 = -0.11; /* unit V */ if (!model->BSIM3v1kt1lGiven) model->BSIM3v1kt1l = 0.0; /* unit V*m */ if (!model->BSIM3v1kt2Given) model->BSIM3v1kt2 = 0.022; /* No unit */ if (!model->BSIM3v1k3Given) model->BSIM3v1k3 = 80.0; if (!model->BSIM3v1k3bGiven) model->BSIM3v1k3b = 0.0; if (!model->BSIM3v1w0Given) model->BSIM3v1w0 = 2.5e-6; if (!model->BSIM3v1nlxGiven) model->BSIM3v1nlx = 1.74e-7; if (!model->BSIM3v1dvt0Given) model->BSIM3v1dvt0 = 2.2; if (!model->BSIM3v1dvt1Given) model->BSIM3v1dvt1 = 0.53; if (!model->BSIM3v1dvt2Given) model->BSIM3v1dvt2 = -0.032; /* unit 1 / V */ if (!model->BSIM3v1dvt0wGiven) model->BSIM3v1dvt0w = 0.0; if (!model->BSIM3v1dvt1wGiven) model->BSIM3v1dvt1w = 5.3e6; if (!model->BSIM3v1dvt2wGiven) model->BSIM3v1dvt2w = -0.032; if (!model->BSIM3v1droutGiven) model->BSIM3v1drout = 0.56; if (!model->BSIM3v1dsubGiven) model->BSIM3v1dsub = model->BSIM3v1drout; if (!model->BSIM3v1vth0Given) model->BSIM3v1vth0 = (model->BSIM3v1type == NMOS) ? 0.7 : -0.7; if (!model->BSIM3v1uaGiven) model->BSIM3v1ua = 2.25e-9; /* unit m/V */ if (!model->BSIM3v1ua1Given) model->BSIM3v1ua1 = 4.31e-9; /* unit m/V */ if (!model->BSIM3v1ubGiven) model->BSIM3v1ub = 5.87e-19; /* unit (m/V)**2 */ if (!model->BSIM3v1ub1Given) model->BSIM3v1ub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->BSIM3v1ucGiven) model->BSIM3v1uc = (model->BSIM3v1mobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->BSIM3v1uc1Given) model->BSIM3v1uc1 = (model->BSIM3v1mobMod == 3) ? -0.056 : -0.056e-9; if (!model->BSIM3v1u0Given) model->BSIM3v1u0 = (model->BSIM3v1type == NMOS) ? 0.067 : 0.025; if (!model->BSIM3v1uteGiven) model->BSIM3v1ute = -1.5; if (!model->BSIM3v1voffGiven) model->BSIM3v1voff = -0.08; if (!model->BSIM3v1deltaGiven) model->BSIM3v1delta = 0.01; if (!model->BSIM3v1rdswGiven) model->BSIM3v1rdsw = 0; if (!model->BSIM3v1prwgGiven) model->BSIM3v1prwg = 0.0; /* unit 1/V */ if (!model->BSIM3v1prwbGiven) model->BSIM3v1prwb = 0.0; if (!model->BSIM3v1prtGiven) if (!model->BSIM3v1prtGiven) model->BSIM3v1prt = 0.0; if (!model->BSIM3v1eta0Given) model->BSIM3v1eta0 = 0.08; /* no unit */ if (!model->BSIM3v1etabGiven) model->BSIM3v1etab = -0.07; /* unit 1/V */ if (!model->BSIM3v1pclmGiven) model->BSIM3v1pclm = 1.3; /* no unit */ if (!model->BSIM3v1pdibl1Given) model->BSIM3v1pdibl1 = .39; /* no unit */ if (!model->BSIM3v1pdibl2Given) model->BSIM3v1pdibl2 = 0.0086; /* no unit */ if (!model->BSIM3v1pdiblbGiven) model->BSIM3v1pdiblb = 0.0; /* 1/V */ if (!model->BSIM3v1pscbe1Given) model->BSIM3v1pscbe1 = 4.24e8; if (!model->BSIM3v1pscbe2Given) model->BSIM3v1pscbe2 = 1.0e-5; if (!model->BSIM3v1pvagGiven) model->BSIM3v1pvag = 0.0; if (!model->BSIM3v1wrGiven) model->BSIM3v1wr = 1.0; if (!model->BSIM3v1dwgGiven) model->BSIM3v1dwg = 0.0; if (!model->BSIM3v1dwbGiven) model->BSIM3v1dwb = 0.0; if (!model->BSIM3v1b0Given) model->BSIM3v1b0 = 0.0; if (!model->BSIM3v1b1Given) model->BSIM3v1b1 = 0.0; if (!model->BSIM3v1alpha0Given) model->BSIM3v1alpha0 = 0.0; if (!model->BSIM3v1beta0Given) model->BSIM3v1beta0 = 30.0; if (!model->BSIM3v1elmGiven) model->BSIM3v1elm = 5.0; if (!model->BSIM3v1cgslGiven) model->BSIM3v1cgsl = 0.0; if (!model->BSIM3v1cgdlGiven) model->BSIM3v1cgdl = 0.0; if (!model->BSIM3v1ckappaGiven) model->BSIM3v1ckappa = 0.6; if (!model->BSIM3v1clcGiven) model->BSIM3v1clc = 0.1e-6; if (!model->BSIM3v1cleGiven) model->BSIM3v1cle = 0.6; if (!model->BSIM3v1vfbcvGiven) model->BSIM3v1vfbcv = -1.0; /* Length dependence */ if (!model->BSIM3v1lcdscGiven) model->BSIM3v1lcdsc = 0.0; if (!model->BSIM3v1lcdscbGiven) model->BSIM3v1lcdscb = 0.0; if (!model->BSIM3v1lcdscdGiven) model->BSIM3v1lcdscd = 0.0; if (!model->BSIM3v1lcitGiven) model->BSIM3v1lcit = 0.0; if (!model->BSIM3v1lnfactorGiven) model->BSIM3v1lnfactor = 0.0; if (!model->BSIM3v1lxjGiven) model->BSIM3v1lxj = 0.0; if (!model->BSIM3v1lvsatGiven) model->BSIM3v1lvsat = 0.0; if (!model->BSIM3v1latGiven) model->BSIM3v1lat = 0.0; if (!model->BSIM3v1la0Given) model->BSIM3v1la0 = 0.0; if (!model->BSIM3v1lagsGiven) model->BSIM3v1lags = 0.0; if (!model->BSIM3v1la1Given) model->BSIM3v1la1 = 0.0; if (!model->BSIM3v1la2Given) model->BSIM3v1la2 = 0.0; if (!model->BSIM3v1lketaGiven) model->BSIM3v1lketa = 0.0; if (!model->BSIM3v1lnsubGiven) model->BSIM3v1lnsub = 0.0; if (!model->BSIM3v1lnpeakGiven) model->BSIM3v1lnpeak = 0.0; if (!model->BSIM3v1lngateGiven) model->BSIM3v1lngate = 0.0; if (!model->BSIM3v1lvbmGiven) model->BSIM3v1lvbm = 0.0; if (!model->BSIM3v1lxtGiven) model->BSIM3v1lxt = 0.0; if (!model->BSIM3v1lkt1Given) model->BSIM3v1lkt1 = 0.0; if (!model->BSIM3v1lkt1lGiven) model->BSIM3v1lkt1l = 0.0; if (!model->BSIM3v1lkt2Given) model->BSIM3v1lkt2 = 0.0; if (!model->BSIM3v1lk3Given) model->BSIM3v1lk3 = 0.0; if (!model->BSIM3v1lk3bGiven) model->BSIM3v1lk3b = 0.0; if (!model->BSIM3v1lw0Given) model->BSIM3v1lw0 = 0.0; if (!model->BSIM3v1lnlxGiven) model->BSIM3v1lnlx = 0.0; if (!model->BSIM3v1ldvt0Given) model->BSIM3v1ldvt0 = 0.0; if (!model->BSIM3v1ldvt1Given) model->BSIM3v1ldvt1 = 0.0; if (!model->BSIM3v1ldvt2Given) model->BSIM3v1ldvt2 = 0.0; if (!model->BSIM3v1ldvt0wGiven) model->BSIM3v1ldvt0w = 0.0; if (!model->BSIM3v1ldvt1wGiven) model->BSIM3v1ldvt1w = 0.0; if (!model->BSIM3v1ldvt2wGiven) model->BSIM3v1ldvt2w = 0.0; if (!model->BSIM3v1ldroutGiven) model->BSIM3v1ldrout = 0.0; if (!model->BSIM3v1ldsubGiven) model->BSIM3v1ldsub = 0.0; if (!model->BSIM3v1lvth0Given) model->BSIM3v1lvth0 = 0.0; if (!model->BSIM3v1luaGiven) model->BSIM3v1lua = 0.0; if (!model->BSIM3v1lua1Given) model->BSIM3v1lua1 = 0.0; if (!model->BSIM3v1lubGiven) model->BSIM3v1lub = 0.0; if (!model->BSIM3v1lub1Given) model->BSIM3v1lub1 = 0.0; if (!model->BSIM3v1lucGiven) model->BSIM3v1luc = 0.0; if (!model->BSIM3v1luc1Given) model->BSIM3v1luc1 = 0.0; if (!model->BSIM3v1lu0Given) model->BSIM3v1lu0 = 0.0; if (!model->BSIM3v1luteGiven) model->BSIM3v1lute = 0.0; if (!model->BSIM3v1lvoffGiven) model->BSIM3v1lvoff = 0.0; if (!model->BSIM3v1ldeltaGiven) model->BSIM3v1ldelta = 0.0; if (!model->BSIM3v1lrdswGiven) model->BSIM3v1lrdsw = 0.0; if (!model->BSIM3v1lprwbGiven) model->BSIM3v1lprwb = 0.0; if (!model->BSIM3v1lprwgGiven) model->BSIM3v1lprwg = 0.0; if (!model->BSIM3v1lprtGiven) if (!model->BSIM3v1lprtGiven) model->BSIM3v1lprt = 0.0; if (!model->BSIM3v1leta0Given) model->BSIM3v1leta0 = 0.0; if (!model->BSIM3v1letabGiven) model->BSIM3v1letab = -0.0; if (!model->BSIM3v1lpclmGiven) model->BSIM3v1lpclm = 0.0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -