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

📄 b3v1sset.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: b3v1sset.c**********/#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "bsim3v1sdef.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.0e6intBSIM3v1Ssetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,               int *states){BSIM3v1Smodel *model = (BSIM3v1Smodel*)inModel;BSIM3v1Sinstance *here;int error;CKTnode *tmp;CKTnode *tmpNode;IFuid tmpName;    /*  loop through all the BSIM3v1S device models */    for( ; model != NULL; model = model->BSIM3v1SnextModel )    {/* Default value Processing for BSIM3v1S MOSFET Models */        if (!model->BSIM3v1StypeGiven)            model->BSIM3v1Stype = NMOS;             if (!model->BSIM3v1SmobModGiven)             model->BSIM3v1SmobMod = 1;        if (!model->BSIM3v1SbinUnitGiven)             model->BSIM3v1SbinUnit = 1;        if (!model->BSIM3v1SparamChkGiven)             model->BSIM3v1SparamChk = 0;        if (!model->BSIM3v1ScapModGiven)             model->BSIM3v1ScapMod = 2;        if (!model->BSIM3v1SnqsModGiven)             model->BSIM3v1SnqsMod = 0;        if (!model->BSIM3v1SnoiModGiven)             model->BSIM3v1SnoiMod = 1;        if (!model->BSIM3v1SversionGiven)             model->BSIM3v1Sversion = 3.1;        if (!model->BSIM3v1StoxGiven)            model->BSIM3v1Stox = 150.0e-10;        model->BSIM3v1Scox = 3.453133e-11 / model->BSIM3v1Stox;        if (!model->BSIM3v1ScdscGiven)	    model->BSIM3v1Scdsc = 2.4e-4;   /* unit Q/V/m^2  */        if (!model->BSIM3v1ScdscbGiven)	    model->BSIM3v1Scdscb = 0.0;   /* unit Q/V/m^2  */    	    if (!model->BSIM3v1ScdscdGiven)	    model->BSIM3v1Scdscd = 0.0;   /* unit Q/V/m^2  */        if (!model->BSIM3v1ScitGiven)	    model->BSIM3v1Scit = 0.0;   /* unit Q/V/m^2  */        if (!model->BSIM3v1SnfactorGiven)	    model->BSIM3v1Snfactor = 1;        if (!model->BSIM3v1SxjGiven)            model->BSIM3v1Sxj = .15e-6;        if (!model->BSIM3v1SvsatGiven)            model->BSIM3v1Svsat = 8.0e4;    /* unit m/s */         if (!model->BSIM3v1SatGiven)            model->BSIM3v1Sat = 3.3e4;    /* unit m/s */         if (!model->BSIM3v1Sa0Given)            model->BSIM3v1Sa0 = 1.0;          if (!model->BSIM3v1SagsGiven)            model->BSIM3v1Sags = 0.0;        if (!model->BSIM3v1Sa1Given)            model->BSIM3v1Sa1 = 0.0;        if (!model->BSIM3v1Sa2Given)            model->BSIM3v1Sa2 = 1.0;        if (!model->BSIM3v1SketaGiven)            model->BSIM3v1Sketa = -0.047;    /* unit  / V */        if (!model->BSIM3v1SnsubGiven)            model->BSIM3v1Snsub = 6.0e16;   /* unit 1/cm3 */        if (!model->BSIM3v1SnpeakGiven)            model->BSIM3v1Snpeak = 1.7e17;   /* unit 1/cm3 */        if (!model->BSIM3v1SngateGiven)            model->BSIM3v1Sngate = 0;   /* unit 1/cm3 */        if (!model->BSIM3v1SvbmGiven)	    model->BSIM3v1Svbm = -3.0;        if (!model->BSIM3v1SxtGiven)	    model->BSIM3v1Sxt = 1.55e-7;        if (!model->BSIM3v1Skt1Given)            model->BSIM3v1Skt1 = -0.11;      /* unit V */        if (!model->BSIM3v1Skt1lGiven)            model->BSIM3v1Skt1l = 0.0;      /* unit V*m */        if (!model->BSIM3v1Skt2Given)            model->BSIM3v1Skt2 = 0.022;      /* No unit */        if (!model->BSIM3v1Sk3Given)            model->BSIM3v1Sk3 = 80.0;              if (!model->BSIM3v1Sk3bGiven)            model->BSIM3v1Sk3b = 0.0;              if (!model->BSIM3v1Sw0Given)            model->BSIM3v1Sw0 = 2.5e-6;            if (!model->BSIM3v1SnlxGiven)            model->BSIM3v1Snlx = 1.74e-7;             if (!model->BSIM3v1Sdvt0Given)            model->BSIM3v1Sdvt0 = 2.2;            if (!model->BSIM3v1Sdvt1Given)            model->BSIM3v1Sdvt1 = 0.53;              if (!model->BSIM3v1Sdvt2Given)            model->BSIM3v1Sdvt2 = -0.032;   /* unit 1 / V */             if (!model->BSIM3v1Sdvt0wGiven)            model->BSIM3v1Sdvt0w = 0.0;            if (!model->BSIM3v1Sdvt1wGiven)            model->BSIM3v1Sdvt1w = 5.3e6;            if (!model->BSIM3v1Sdvt2wGiven)            model->BSIM3v1Sdvt2w = -0.032;           if (!model->BSIM3v1SdroutGiven)            model->BSIM3v1Sdrout = 0.56;             if (!model->BSIM3v1SdsubGiven)            model->BSIM3v1Sdsub = model->BSIM3v1Sdrout;             if (!model->BSIM3v1Svth0Given)            model->BSIM3v1Svth0 = (model->BSIM3v1Stype == NMOS) ? 0.7 : -0.7;        if (!model->BSIM3v1SuaGiven)            model->BSIM3v1Sua = 2.25e-9;      /* unit m/V */        if (!model->BSIM3v1Sua1Given)            model->BSIM3v1Sua1 = 4.31e-9;      /* unit m/V */        if (!model->BSIM3v1SubGiven)            model->BSIM3v1Sub = 5.87e-19;     /* unit (m/V)**2 */        if (!model->BSIM3v1Sub1Given)            model->BSIM3v1Sub1 = -7.61e-18;     /* unit (m/V)**2 */        if (!model->BSIM3v1SucGiven)            model->BSIM3v1Suc = (model->BSIM3v1SmobMod == 3) ? -0.0465 : -0.0465e-9;           if (!model->BSIM3v1Suc1Given)            model->BSIM3v1Suc1 = (model->BSIM3v1SmobMod == 3) ? -0.056 : -0.056e-9;           if (!model->BSIM3v1Su0Given)            model->BSIM3v1Su0 = (model->BSIM3v1Stype == NMOS) ? 0.067 : 0.025;        if (!model->BSIM3v1SuteGiven)	    model->BSIM3v1Sute = -1.5;            if (!model->BSIM3v1SvoffGiven)	    model->BSIM3v1Svoff = -0.08;        if (!model->BSIM3v1SdeltaGiven)             model->BSIM3v1Sdelta = 0.01;        if (!model->BSIM3v1SrdswGiven)            model->BSIM3v1Srdsw = 0;              if (!model->BSIM3v1SprwgGiven)            model->BSIM3v1Sprwg = 0.0;      /* unit 1/V */        if (!model->BSIM3v1SprwbGiven)            model->BSIM3v1Sprwb = 0.0;              if (!model->BSIM3v1SprtGiven)        if (!model->BSIM3v1SprtGiven)            model->BSIM3v1Sprt = 0.0;              if (!model->BSIM3v1Seta0Given)            model->BSIM3v1Seta0 = 0.08;      /* no unit  */         if (!model->BSIM3v1SetabGiven)            model->BSIM3v1Setab = -0.07;      /* unit  1/V */         if (!model->BSIM3v1SpclmGiven)            model->BSIM3v1Spclm = 1.3;      /* no unit  */         if (!model->BSIM3v1Spdibl1Given)            model->BSIM3v1Spdibl1 = .39;    /* no unit  */        if (!model->BSIM3v1Spdibl2Given)            model->BSIM3v1Spdibl2 = 0.0086;    /* no unit  */         if (!model->BSIM3v1SpdiblbGiven)            model->BSIM3v1Spdiblb = 0.0;    /* 1/V  */         if (!model->BSIM3v1Spscbe1Given)            model->BSIM3v1Spscbe1 = 4.24e8;             if (!model->BSIM3v1Spscbe2Given)            model->BSIM3v1Spscbe2 = 1.0e-5;            if (!model->BSIM3v1SpvagGiven)            model->BSIM3v1Spvag = 0.0;             if (!model->BSIM3v1SwrGiven)              model->BSIM3v1Swr = 1.0;        if (!model->BSIM3v1SdwgGiven)              model->BSIM3v1Sdwg = 0.0;        if (!model->BSIM3v1SdwbGiven)              model->BSIM3v1Sdwb = 0.0;        if (!model->BSIM3v1Sb0Given)            model->BSIM3v1Sb0 = 0.0;        if (!model->BSIM3v1Sb1Given)              model->BSIM3v1Sb1 = 0.0;        if (!model->BSIM3v1Salpha0Given)              model->BSIM3v1Salpha0 = 0.0;        if (!model->BSIM3v1Sbeta0Given)              model->BSIM3v1Sbeta0 = 30.0;        if (!model->BSIM3v1SelmGiven)              model->BSIM3v1Selm = 5.0;        if (!model->BSIM3v1ScgslGiven)              model->BSIM3v1Scgsl = 0.0;        if (!model->BSIM3v1ScgdlGiven)              model->BSIM3v1Scgdl = 0.0;        if (!model->BSIM3v1SckappaGiven)              model->BSIM3v1Sckappa = 0.6;        if (!model->BSIM3v1SclcGiven)              model->BSIM3v1Sclc = 0.1e-6;        if (!model->BSIM3v1ScleGiven)              model->BSIM3v1Scle = 0.6;        if (!model->BSIM3v1SvfbcvGiven)              model->BSIM3v1Svfbcv = -1.0;	/* Length dependence */        if (!model->BSIM3v1SlcdscGiven)	    model->BSIM3v1Slcdsc = 0.0;        if (!model->BSIM3v1SlcdscbGiven)	    model->BSIM3v1Slcdscb = 0.0;	    if (!model->BSIM3v1SlcdscdGiven) 	    model->BSIM3v1Slcdscd = 0.0;        if (!model->BSIM3v1SlcitGiven)	    model->BSIM3v1Slcit = 0.0;        if (!model->BSIM3v1SlnfactorGiven)	    model->BSIM3v1Slnfactor = 0.0;        if (!model->BSIM3v1SlxjGiven)            model->BSIM3v1Slxj = 0.0;        if (!model->BSIM3v1SlvsatGiven)            model->BSIM3v1Slvsat = 0.0;        if (!model->BSIM3v1SlatGiven)            model->BSIM3v1Slat = 0.0;        if (!model->BSIM3v1Sla0Given)            model->BSIM3v1Sla0 = 0.0;         if (!model->BSIM3v1SlagsGiven)            model->BSIM3v1Slags = 0.0;        if (!model->BSIM3v1Sla1Given)            model->BSIM3v1Sla1 = 0.0;        if (!model->BSIM3v1Sla2Given)            model->BSIM3v1Sla2 = 0.0;        if (!model->BSIM3v1SlketaGiven)            model->BSIM3v1Slketa = 0.0;        if (!model->BSIM3v1SlnsubGiven)            model->BSIM3v1Slnsub = 0.0;        if (!model->BSIM3v1SlnpeakGiven)            model->BSIM3v1Slnpeak = 0.0;        if (!model->BSIM3v1SlngateGiven)            model->BSIM3v1Slngate = 0.0;        if (!model->BSIM3v1SlvbmGiven)	    model->BSIM3v1Slvbm = 0.0;        if (!model->BSIM3v1SlxtGiven)	    model->BSIM3v1Slxt = 0.0;        if (!model->BSIM3v1Slkt1Given)            model->BSIM3v1Slkt1 = 0.0;         if (!model->BSIM3v1Slkt1lGiven)            model->BSIM3v1Slkt1l = 0.0;        if (!model->BSIM3v1Slkt2Given)            model->BSIM3v1Slkt2 = 0.0;        if (!model->BSIM3v1Slk3Given)            model->BSIM3v1Slk3 = 0.0;              if (!model->BSIM3v1Slk3bGiven)            model->BSIM3v1Slk3b = 0.0;              if (!model->BSIM3v1Slw0Given)            model->BSIM3v1Slw0 = 0.0;            if (!model->BSIM3v1SlnlxGiven)            model->BSIM3v1Slnlx = 0.0;             if (!model->BSIM3v1Sldvt0Given)            model->BSIM3v1Sldvt0 = 0.0;            if (!model->BSIM3v1Sldvt1Given)            model->BSIM3v1Sldvt1 = 0.0;              if (!model->BSIM3v1Sldvt2Given)            model->BSIM3v1Sldvt2 = 0.0;        if (!model->BSIM3v1Sldvt0wGiven)            model->BSIM3v1Sldvt0w = 0.0;            if (!model->BSIM3v1Sldvt1wGiven)            model->BSIM3v1Sldvt1w = 0.0;              if (!model->BSIM3v1Sldvt2wGiven)            model->BSIM3v1Sldvt2w = 0.0;        if (!model->BSIM3v1SldroutGiven)            model->BSIM3v1Sldrout = 0.0;             if (!model->BSIM3v1SldsubGiven)            model->BSIM3v1Sldsub = 0.0;        if (!model->BSIM3v1Slvth0Given)           model->BSIM3v1Slvth0 = 0.0;        if (!model->BSIM3v1SluaGiven)            model->BSIM3v1Slua = 0.0;        if (!model->BSIM3v1Slua1Given)            model->BSIM3v1Slua1 = 0.0;        if (!model->BSIM3v1SlubGiven)            model->BSIM3v1Slub = 0.0;        if (!model->BSIM3v1Slub1Given)            model->BSIM3v1Slub1 = 0.0;        if (!model->BSIM3v1SlucGiven)            model->BSIM3v1Sluc = 0.0;        if (!model->BSIM3v1Sluc1Given)            model->BSIM3v1Sluc1 = 0.0;        if (!model->BSIM3v1Slu0Given)            model->BSIM3v1Slu0 = 0.0;        if (!model->BSIM3v1SluteGiven)	    model->BSIM3v1Slute = 0.0;            if (!model->BSIM3v1SlvoffGiven)	    model->BSIM3v1Slvoff = 0.0;        if (!model->BSIM3v1SldeltaGiven)              model->BSIM3v1Sldelta = 0.0;        if (!model->BSIM3v1SlrdswGiven)            model->BSIM3v1Slrdsw = 0.0;        if (!model->BSIM3v1SlprwbGiven)            model->BSIM3v1Slprwb = 0.0;        if (!model->BSIM3v1SlprwgGiven)            model->BSIM3v1Slprwg = 0.0;        if (!model->BSIM3v1SlprtGiven)        if (!model->BSIM3v1SlprtGiven)            model->BSIM3v1Slprt = 0.0;        if (!model->BSIM3v1Sleta0Given)            model->BSIM3v1Sleta0 = 0.0;        if (!model->BSIM3v1SletabGiven)            model->BSIM3v1Sletab = -0.0;        if (!model->BSIM3v1SlpclmGiven)            model->BSIM3v1Slpclm = 0.0;         if (!model->BSIM3v1Slpdibl1Given)            model->BSIM3v1Slpdibl1 = 0.0;        if (!model->BSIM3v1Slpdibl2Given)            model->BSIM3v1Slpdibl2 = 0.0;        if (!model->BSIM3v1SlpdiblbGiven)            model->BSIM3v1Slpdiblb = 0.0;        if (!model->BSIM3v1Slpscbe1Given)            model->BSIM3v1Slpscbe1 = 0.0;        if (!model->BSIM3v1Slpscbe2Given)            model->BSIM3v1Slpscbe2 = 0.0;        if (!model->BSIM3v1SlpvagGiven)            model->BSIM3v1Slpvag = 0.0;             if (!model->BSIM3v1SlwrGiven)              model->BSIM3v1Slwr = 0.0;        if (!model->BSIM3v1SldwgGiven)  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -