📄 b3v1aset.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: b3v1aset.c**********/#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "bsim3v1adef.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.0e6intBSIM3v1Asetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states){BSIM3v1Amodel *model = (BSIM3v1Amodel*)inModel;BSIM3v1Ainstance *here;int error;CKTnode *tmp;CKTnode *tmpNode;IFuid tmpName; /* loop through all the BSIM3v1A device models */ for( ; model != NULL; model = model->BSIM3v1AnextModel ) {/* Default value Processing for BSIM3v1A MOSFET Models */ if (!model->BSIM3v1AtypeGiven) model->BSIM3v1Atype = NMOS; if (!model->BSIM3v1AmobModGiven) model->BSIM3v1AmobMod = 1; if (!model->BSIM3v1AbinUnitGiven) model->BSIM3v1AbinUnit = 1; if (!model->BSIM3v1AcapModGiven) model->BSIM3v1AcapMod = 1; if (!model->BSIM3v1AnqsModGiven) model->BSIM3v1AnqsMod = 0; if (!model->BSIM3v1AnoiModGiven) model->BSIM3v1AnoiMod = 1; if (!model->BSIM3v1AtoxGiven) model->BSIM3v1Atox = 150.0e-10; model->BSIM3v1Acox = 3.453133e-11 / model->BSIM3v1Atox; if (!model->BSIM3v1AcdscGiven) model->BSIM3v1Acdsc = 2.4e-4; /* unit Q/V/m^2 */ if (!model->BSIM3v1AcdscbGiven) model->BSIM3v1Acdscb = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1AcdscdGiven) model->BSIM3v1Acdscd = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1AcitGiven) model->BSIM3v1Acit = 0.0; /* unit Q/V/m^2 */ if (!model->BSIM3v1AnfactorGiven) model->BSIM3v1Anfactor = 1; if (!model->BSIM3v1AxjGiven) model->BSIM3v1Axj = .15e-6; if (!model->BSIM3v1AvsatGiven) model->BSIM3v1Avsat = 8.0e4; /* unit m/s */ if (!model->BSIM3v1AatGiven) model->BSIM3v1Aat = 3.3e4; /* unit m/s */ if (!model->BSIM3v1Aa0Given) model->BSIM3v1Aa0 = 1.0; if (!model->BSIM3v1AagsGiven) model->BSIM3v1Aags = 0.0; if (!model->BSIM3v1Aa1Given) model->BSIM3v1Aa1 = 0.0; if (!model->BSIM3v1Aa2Given) model->BSIM3v1Aa2 = 1.0; if (!model->BSIM3v1AketaGiven) model->BSIM3v1Aketa = -0.047; /* unit / V */ if (!model->BSIM3v1AnsubGiven) model->BSIM3v1Ansub = 6.0e16; /* unit 1/cm3 */ if (!model->BSIM3v1AnpeakGiven) model->BSIM3v1Anpeak = 1.7e17; /* unit 1/cm3 */ if (!model->BSIM3v1AvbmGiven) model->BSIM3v1Avbm = -5.0; if (!model->BSIM3v1AxtGiven) model->BSIM3v1Axt = 1.55e-7; if (!model->BSIM3v1Akt1Given) model->BSIM3v1Akt1 = -0.11; /* unit V */ if (!model->BSIM3v1Akt1lGiven) model->BSIM3v1Akt1l = 0.0; /* unit V*m */ if (!model->BSIM3v1Akt2Given) model->BSIM3v1Akt2 = 0.022; /* No unit */ if (!model->BSIM3v1Ak3Given) model->BSIM3v1Ak3 = 80.0; if (!model->BSIM3v1Ak3bGiven) model->BSIM3v1Ak3b = 0.0; if (!model->BSIM3v1Aw0Given) model->BSIM3v1Aw0 = 2.5e-6; if (!model->BSIM3v1AnlxGiven) model->BSIM3v1Anlx = 1.74e-7; if (!model->BSIM3v1Advt0Given) model->BSIM3v1Advt0 = 2.2; if (!model->BSIM3v1Advt1Given) model->BSIM3v1Advt1 = 0.53; if (!model->BSIM3v1Advt2Given) model->BSIM3v1Advt2 = -0.032; /* unit 1 / V */ if (!model->BSIM3v1Advt0wGiven) model->BSIM3v1Advt0w = 0.0; if (!model->BSIM3v1Advt1wGiven) model->BSIM3v1Advt1w = 5.3e6; if (!model->BSIM3v1Advt2wGiven) model->BSIM3v1Advt2w = -0.032; if (!model->BSIM3v1AdroutGiven) model->BSIM3v1Adrout = 0.56; if (!model->BSIM3v1AdsubGiven) model->BSIM3v1Adsub = model->BSIM3v1Adrout; if (!model->BSIM3v1Avth0Given) model->BSIM3v1Avth0 = (model->BSIM3v1Atype == NMOS) ? 0.7 : -0.7; if (!model->BSIM3v1AuaGiven) model->BSIM3v1Aua = 2.25e-9; /* unit m/V */ if (!model->BSIM3v1Aua1Given) model->BSIM3v1Aua1 = 4.31e-9; /* unit m/V */ if (!model->BSIM3v1AubGiven) model->BSIM3v1Aub = 5.87e-19; /* unit (m/V)**2 */ if (!model->BSIM3v1Aub1Given) model->BSIM3v1Aub1 = -7.61e-18; /* unit (m/V)**2 */ if (!model->BSIM3v1AucGiven) model->BSIM3v1Auc = (model->BSIM3v1AmobMod == 3) ? -0.0465 : -0.0465e-9; if (!model->BSIM3v1Auc1Given) model->BSIM3v1Auc1 = (model->BSIM3v1AmobMod == 3) ? -0.056 : -0.056e-9; if (!model->BSIM3v1Au0Given) model->BSIM3v1Au0 = (model->BSIM3v1Atype == NMOS) ? 0.067 : 0.025; else if (model->BSIM3v1Au0 > 1.0) model->BSIM3v1Au0 = model->BSIM3v1Au0 / 1.0e4; /* if u0 > 1.0, cm.g.sec unit system is used. If should be converted into SI unit system. */ if (!model->BSIM3v1AuteGiven) model->BSIM3v1Aute = -1.5; if (!model->BSIM3v1AvoffGiven) model->BSIM3v1Avoff = -0.08; if (!model->BSIM3v1AdeltaGiven) model->BSIM3v1Adelta = 0.01; if (!model->BSIM3v1ArdswGiven) model->BSIM3v1Ardsw = 0; if (!model->BSIM3v1AprwgGiven) model->BSIM3v1Aprwg = 0.0; /* unit 1/V */ if (!model->BSIM3v1AprwbGiven) model->BSIM3v1Aprwb = 0.0; if (!model->BSIM3v1AprtGiven) if (!model->BSIM3v1AprtGiven) model->BSIM3v1Aprt = 0.0; if (!model->BSIM3v1Aeta0Given) model->BSIM3v1Aeta0 = 0.08; /* no unit */ if (!model->BSIM3v1AetabGiven) model->BSIM3v1Aetab = -0.07; /* unit 1/V */ if (!model->BSIM3v1ApclmGiven) model->BSIM3v1Apclm = 1.3; /* no unit */ if (!model->BSIM3v1Apdibl1Given) model->BSIM3v1Apdibl1 = .39; /* no unit */ if (!model->BSIM3v1Apdibl2Given) model->BSIM3v1Apdibl2 = 0.0086; /* no unit */ if (!model->BSIM3v1ApdiblbGiven) model->BSIM3v1Apdiblb = 0.0; /* 1/V */ if (!model->BSIM3v1Apscbe1Given) model->BSIM3v1Apscbe1 = 4.24e8; if (!model->BSIM3v1Apscbe2Given) model->BSIM3v1Apscbe2 = 1.0e-5; if (!model->BSIM3v1ApvagGiven) model->BSIM3v1Apvag = 0.0; if (!model->BSIM3v1AwrGiven) model->BSIM3v1Awr = 1.0; if (!model->BSIM3v1AdwgGiven) model->BSIM3v1Adwg = 0.0; if (!model->BSIM3v1AdwbGiven) model->BSIM3v1Adwb = 0.0; if (!model->BSIM3v1Ab0Given) model->BSIM3v1Ab0 = 0.0; if (!model->BSIM3v1Ab1Given) model->BSIM3v1Ab1 = 0.0; if (!model->BSIM3v1Aalpha0Given) model->BSIM3v1Aalpha0 = 0.0; if (!model->BSIM3v1Abeta0Given) model->BSIM3v1Abeta0 = 30.0; if (!model->BSIM3v1AelmGiven) model->BSIM3v1Aelm = 5.0; if (!model->BSIM3v1AcgslGiven) model->BSIM3v1Acgsl = 0.0; if (!model->BSIM3v1AcgdlGiven) model->BSIM3v1Acgdl = 0.0; if (!model->BSIM3v1AckappaGiven) model->BSIM3v1Ackappa = 0.6; if (!model->BSIM3v1AclcGiven) model->BSIM3v1Aclc = 0.1e-6; if (!model->BSIM3v1AcleGiven) model->BSIM3v1Acle = 0.6; /* Length dependence */ if (!model->BSIM3v1AlcdscGiven) model->BSIM3v1Alcdsc = 0.0; if (!model->BSIM3v1AlcdscbGiven) model->BSIM3v1Alcdscb = 0.0; if (!model->BSIM3v1AlcdscdGiven) model->BSIM3v1Alcdscd = 0.0; if (!model->BSIM3v1AlcitGiven) model->BSIM3v1Alcit = 0.0; if (!model->BSIM3v1AlnfactorGiven) model->BSIM3v1Alnfactor = 0.0; if (!model->BSIM3v1AlxjGiven) model->BSIM3v1Alxj = 0.0; if (!model->BSIM3v1AlvsatGiven) model->BSIM3v1Alvsat = 0.0; if (!model->BSIM3v1AlatGiven) model->BSIM3v1Alat = 0.0; if (!model->BSIM3v1Ala0Given) model->BSIM3v1Ala0 = 0.0; if (!model->BSIM3v1AlagsGiven) model->BSIM3v1Alags = 0.0; if (!model->BSIM3v1Ala1Given) model->BSIM3v1Ala1 = 0.0; if (!model->BSIM3v1Ala2Given) model->BSIM3v1Ala2 = 0.0; if (!model->BSIM3v1AlketaGiven) model->BSIM3v1Alketa = 0.0; if (!model->BSIM3v1AlnsubGiven) model->BSIM3v1Alnsub = 0.0; if (!model->BSIM3v1AlnpeakGiven) model->BSIM3v1Alnpeak = 0.0; if (!model->BSIM3v1AlvbmGiven) model->BSIM3v1Alvbm = 0.0; if (!model->BSIM3v1AlxtGiven) model->BSIM3v1Alxt = 0.0; if (!model->BSIM3v1Alkt1Given) model->BSIM3v1Alkt1 = 0.0; if (!model->BSIM3v1Alkt1lGiven) model->BSIM3v1Alkt1l = 0.0; if (!model->BSIM3v1Alkt2Given) model->BSIM3v1Alkt2 = 0.0; if (!model->BSIM3v1Alk3Given) model->BSIM3v1Alk3 = 0.0; if (!model->BSIM3v1Alk3bGiven) model->BSIM3v1Alk3b = 0.0; if (!model->BSIM3v1Alw0Given) model->BSIM3v1Alw0 = 0.0; if (!model->BSIM3v1AlnlxGiven) model->BSIM3v1Alnlx = 0.0; if (!model->BSIM3v1Aldvt0Given) model->BSIM3v1Aldvt0 = 0.0; if (!model->BSIM3v1Aldvt1Given) model->BSIM3v1Aldvt1 = 0.0; if (!model->BSIM3v1Aldvt2Given) model->BSIM3v1Aldvt2 = 0.0; if (!model->BSIM3v1Aldvt0wGiven) model->BSIM3v1Aldvt0w = 0.0; if (!model->BSIM3v1Aldvt1wGiven) model->BSIM3v1Aldvt1w = 0.0; if (!model->BSIM3v1Aldvt2wGiven) model->BSIM3v1Aldvt2w = 0.0; if (!model->BSIM3v1AldroutGiven) model->BSIM3v1Aldrout = 0.0; if (!model->BSIM3v1AldsubGiven) model->BSIM3v1Aldsub = 0.0; if (!model->BSIM3v1Alvth0Given) model->BSIM3v1Alvth0 = 0.0; if (!model->BSIM3v1AluaGiven) model->BSIM3v1Alua = 0.0; if (!model->BSIM3v1Alua1Given) model->BSIM3v1Alua1 = 0.0; if (!model->BSIM3v1AlubGiven) model->BSIM3v1Alub = 0.0; if (!model->BSIM3v1Alub1Given) model->BSIM3v1Alub1 = 0.0; if (!model->BSIM3v1AlucGiven) model->BSIM3v1Aluc = 0.0; if (!model->BSIM3v1Aluc1Given) model->BSIM3v1Aluc1 = 0.0; if (!model->BSIM3v1Alu0Given) model->BSIM3v1Alu0 = 0.0; else if (model->BSIM3v1Au0 > 1.0) model->BSIM3v1Alu0 = model->BSIM3v1Alu0 / 1.0e4; if (!model->BSIM3v1AluteGiven) model->BSIM3v1Alute = 0.0; if (!model->BSIM3v1AlvoffGiven) model->BSIM3v1Alvoff = 0.0; if (!model->BSIM3v1AldeltaGiven) model->BSIM3v1Aldelta = 0.0; if (!model->BSIM3v1AlrdswGiven) model->BSIM3v1Alrdsw = 0.0; if (!model->BSIM3v1AlprwbGiven) model->BSIM3v1Alprwb = 0.0; if (!model->BSIM3v1AlprwgGiven) model->BSIM3v1Alprwg = 0.0; if (!model->BSIM3v1AlprtGiven) if (!model->BSIM3v1AlprtGiven) model->BSIM3v1Alprt = 0.0; if (!model->BSIM3v1Aleta0Given) model->BSIM3v1Aleta0 = 0.0; if (!model->BSIM3v1AletabGiven) model->BSIM3v1Aletab = -0.0; if (!model->BSIM3v1AlpclmGiven) model->BSIM3v1Alpclm = 0.0; if (!model->BSIM3v1Alpdibl1Given)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -