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

📄 b3v0set.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.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 + -