⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b3v1aset.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********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 + -