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

📄 b3v1set.c

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