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

📄 b3soifdset.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 4 页
字号:
/**********Copyright 1999 Regents of the University of California.  All rights reserved.Author: Weidong Liu and Pin Su         Feb 1999Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen TangFile: b3soifdset.c          98/5/01Modified by Pin Su, Wei Jin 99/9/27Modified by Paolo Nenzi 2002**********//* * Revision 2.1  99/9/27 Pin Su  * BSIMFD2.1 release */#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "b3soifddef.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.0e6intB3SOIFDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,             int *states){B3SOIFDmodel *model = (B3SOIFDmodel*)inModel;B3SOIFDinstance *here;int error;CKTnode *tmp;double tmp1, tmp2;double nfb0, Cboxt;CKTnode *tmpNode;IFuid tmpName;    /*  loop through all the B3SOIFD device models */    for( ; model != NULL; model = model->B3SOIFDnextModel )    {/* Default value Processing for B3SOIFD MOSFET Models */        if (!model->B3SOIFDtypeGiven)            model->B3SOIFDtype = NMOS;             if (!model->B3SOIFDmobModGiven)             model->B3SOIFDmobMod = 1;        if (!model->B3SOIFDbinUnitGiven)             model->B3SOIFDbinUnit = 1;        if (!model->B3SOIFDparamChkGiven)             model->B3SOIFDparamChk = 0;        if (!model->B3SOIFDcapModGiven)             model->B3SOIFDcapMod = 2;        if (!model->B3SOIFDnoiModGiven)             model->B3SOIFDnoiMod = 1;        if (!model->B3SOIFDshModGiven)             model->B3SOIFDshMod = 0;        if (!model->B3SOIFDversionGiven)             model->B3SOIFDversion = 2.0;        if (!model->B3SOIFDtoxGiven)            model->B3SOIFDtox = 100.0e-10;        model->B3SOIFDcox = 3.453133e-11 / model->B3SOIFDtox;        if (!model->B3SOIFDcdscGiven)	    model->B3SOIFDcdsc = 2.4e-4;   /* unit Q/V/m^2  */        if (!model->B3SOIFDcdscbGiven)	    model->B3SOIFDcdscb = 0.0;   /* unit Q/V/m^2  */    	    if (!model->B3SOIFDcdscdGiven)	    model->B3SOIFDcdscd = 0.0;   /* unit Q/V/m^2  */        if (!model->B3SOIFDcitGiven)	    model->B3SOIFDcit = 0.0;   /* unit Q/V/m^2  */        if (!model->B3SOIFDnfactorGiven)	    model->B3SOIFDnfactor = 1;        if (!model->B3SOIFDvsatGiven)            model->B3SOIFDvsat = 8.0e4;    /* unit m/s */         if (!model->B3SOIFDatGiven)            model->B3SOIFDat = 3.3e4;    /* unit m/s */         if (!model->B3SOIFDa0Given)            model->B3SOIFDa0 = 1.0;          if (!model->B3SOIFDagsGiven)            model->B3SOIFDags = 0.0;        if (!model->B3SOIFDa1Given)            model->B3SOIFDa1 = 0.0;        if (!model->B3SOIFDa2Given)            model->B3SOIFDa2 = 1.0;        if (!model->B3SOIFDketaGiven)            model->B3SOIFDketa = -0.6;    /* unit  / V */        if (!model->B3SOIFDnsubGiven)            model->B3SOIFDnsub = 6.0e16;   /* unit 1/cm3 */        if (!model->B3SOIFDnpeakGiven)            model->B3SOIFDnpeak = 1.7e17;   /* unit 1/cm3 */        if (!model->B3SOIFDngateGiven)            model->B3SOIFDngate = 0;   /* unit 1/cm3 */        if (!model->B3SOIFDvbmGiven)	    model->B3SOIFDvbm = -3.0;        if (!model->B3SOIFDxtGiven)	    model->B3SOIFDxt = 1.55e-7;        if (!model->B3SOIFDkt1Given)            model->B3SOIFDkt1 = -0.11;      /* unit V */        if (!model->B3SOIFDkt1lGiven)            model->B3SOIFDkt1l = 0.0;      /* unit V*m */        if (!model->B3SOIFDkt2Given)            model->B3SOIFDkt2 = 0.022;      /* No unit */        if (!model->B3SOIFDk3Given)            model->B3SOIFDk3 = 0.0;              if (!model->B3SOIFDk3bGiven)            model->B3SOIFDk3b = 0.0;              if (!model->B3SOIFDw0Given)            model->B3SOIFDw0 = 2.5e-6;            if (!model->B3SOIFDnlxGiven)            model->B3SOIFDnlx = 1.74e-7;             if (!model->B3SOIFDdvt0Given)            model->B3SOIFDdvt0 = 2.2;            if (!model->B3SOIFDdvt1Given)            model->B3SOIFDdvt1 = 0.53;              if (!model->B3SOIFDdvt2Given)            model->B3SOIFDdvt2 = -0.032;   /* unit 1 / V */             if (!model->B3SOIFDdvt0wGiven)            model->B3SOIFDdvt0w = 0.0;            if (!model->B3SOIFDdvt1wGiven)            model->B3SOIFDdvt1w = 5.3e6;            if (!model->B3SOIFDdvt2wGiven)            model->B3SOIFDdvt2w = -0.032;           if (!model->B3SOIFDdroutGiven)            model->B3SOIFDdrout = 0.56;             if (!model->B3SOIFDdsubGiven)            model->B3SOIFDdsub = model->B3SOIFDdrout;             if (!model->B3SOIFDvth0Given)            model->B3SOIFDvth0 = (model->B3SOIFDtype == NMOS) ? 0.7 : -0.7;        if (!model->B3SOIFDuaGiven)            model->B3SOIFDua = 2.25e-9;      /* unit m/V */        if (!model->B3SOIFDua1Given)            model->B3SOIFDua1 = 4.31e-9;      /* unit m/V */        if (!model->B3SOIFDubGiven)            model->B3SOIFDub = 5.87e-19;     /* unit (m/V)**2 */        if (!model->B3SOIFDub1Given)            model->B3SOIFDub1 = -7.61e-18;     /* unit (m/V)**2 */        if (!model->B3SOIFDucGiven)            model->B3SOIFDuc = (model->B3SOIFDmobMod == 3) ? -0.0465 : -0.0465e-9;           if (!model->B3SOIFDuc1Given)            model->B3SOIFDuc1 = (model->B3SOIFDmobMod == 3) ? -0.056 : -0.056e-9;           if (!model->B3SOIFDu0Given)            model->B3SOIFDu0 = (model->B3SOIFDtype == NMOS) ? 0.067 : 0.025;        if (!model->B3SOIFDuteGiven)	    model->B3SOIFDute = -1.5;            if (!model->B3SOIFDvoffGiven)	    model->B3SOIFDvoff = -0.08;        if (!model->B3SOIFDdeltaGiven)             model->B3SOIFDdelta = 0.01;        if (!model->B3SOIFDrdswGiven)            model->B3SOIFDrdsw = 100;        if (!model->B3SOIFDprwgGiven)            model->B3SOIFDprwg = 0.0;      /* unit 1/V */        if (!model->B3SOIFDprwbGiven)            model->B3SOIFDprwb = 0.0;              if (!model->B3SOIFDprtGiven)        if (!model->B3SOIFDprtGiven)            model->B3SOIFDprt = 0.0;              if (!model->B3SOIFDeta0Given)            model->B3SOIFDeta0 = 0.08;      /* no unit  */         if (!model->B3SOIFDetabGiven)            model->B3SOIFDetab = -0.07;      /* unit  1/V */         if (!model->B3SOIFDpclmGiven)            model->B3SOIFDpclm = 1.3;      /* no unit  */         if (!model->B3SOIFDpdibl1Given)            model->B3SOIFDpdibl1 = .39;    /* no unit  */        if (!model->B3SOIFDpdibl2Given)            model->B3SOIFDpdibl2 = 0.0086;    /* no unit  */         if (!model->B3SOIFDpdiblbGiven)            model->B3SOIFDpdiblb = 0.0;    /* 1/V  */         if (!model->B3SOIFDpvagGiven)            model->B3SOIFDpvag = 0.0;             if (!model->B3SOIFDwrGiven)              model->B3SOIFDwr = 1.0;        if (!model->B3SOIFDdwgGiven)              model->B3SOIFDdwg = 0.0;        if (!model->B3SOIFDdwbGiven)              model->B3SOIFDdwb = 0.0;        if (!model->B3SOIFDb0Given)            model->B3SOIFDb0 = 0.0;        if (!model->B3SOIFDb1Given)              model->B3SOIFDb1 = 0.0;        if (!model->B3SOIFDalpha0Given)              model->B3SOIFDalpha0 = 0.0;        if (!model->B3SOIFDalpha1Given)              model->B3SOIFDalpha1 = 1.0;        if (!model->B3SOIFDbeta0Given)              model->B3SOIFDbeta0 = 30.0;        if (!model->B3SOIFDcgslGiven)              model->B3SOIFDcgsl = 0.0;        if (!model->B3SOIFDcgdlGiven)              model->B3SOIFDcgdl = 0.0;        if (!model->B3SOIFDckappaGiven)              model->B3SOIFDckappa = 0.6;        if (!model->B3SOIFDclcGiven)              model->B3SOIFDclc = 0.1e-7;        if (!model->B3SOIFDcleGiven)              model->B3SOIFDcle = 0.0;        if (!model->B3SOIFDtboxGiven)              model->B3SOIFDtbox = 3e-7;        if (!model->B3SOIFDtsiGiven)              model->B3SOIFDtsi = 1e-7;        if (!model->B3SOIFDxjGiven)              model->B3SOIFDxj = model->B3SOIFDtsi;        if (!model->B3SOIFDkb1Given)              model->B3SOIFDkb1 = 1;        if (!model->B3SOIFDkb3Given)              model->B3SOIFDkb3 = 1;        if (!model->B3SOIFDdvbd0Given)              model->B3SOIFDdvbd0 = 0.0;        if (!model->B3SOIFDdvbd1Given)              model->B3SOIFDdvbd1 = 0.0;        if (!model->B3SOIFDvbsaGiven)              model->B3SOIFDvbsa = 0.0;        if (!model->B3SOIFDdelpGiven)              model->B3SOIFDdelp = 0.02;        if (!model->B3SOIFDrbodyGiven)              model->B3SOIFDrbody = 0.0;        if (!model->B3SOIFDrbshGiven)              model->B3SOIFDrbsh = 0.0;        if (!model->B3SOIFDadice0Given)              model->B3SOIFDadice0 = 1;        if (!model->B3SOIFDabpGiven)              model->B3SOIFDabp = 1;        if (!model->B3SOIFDmxcGiven)              model->B3SOIFDmxc = -0.9;        if (!model->B3SOIFDrth0Given)              model->B3SOIFDrth0 = 0;        if (!model->B3SOIFDcth0Given)            model->B3SOIFDcth0 =0;        if (!model->B3SOIFDaiiGiven)              model->B3SOIFDaii = 0.0;        if (!model->B3SOIFDbiiGiven)              model->B3SOIFDbii = 0.0;        if (!model->B3SOIFDciiGiven)              model->B3SOIFDcii = 0.0;        if (!model->B3SOIFDdiiGiven)              model->B3SOIFDdii = -1.0;        if (!model->B3SOIFDagidlGiven)              model->B3SOIFDagidl = 0.0;        if (!model->B3SOIFDbgidlGiven)              model->B3SOIFDbgidl = 0.0;        if (!model->B3SOIFDngidlGiven)              model->B3SOIFDngidl = 1.2;        if (!model->B3SOIFDndiodeGiven)              model->B3SOIFDndiode = 1.0;        if (!model->B3SOIFDntunGiven)              model->B3SOIFDntun = 10.0;        if (!model->B3SOIFDisbjtGiven)              model->B3SOIFDisbjt = 1e-6;        if (!model->B3SOIFDisdifGiven)              model->B3SOIFDisdif = 0.0;        if (!model->B3SOIFDisrecGiven)              model->B3SOIFDisrec = 1e-5;        if (!model->B3SOIFDistunGiven)              model->B3SOIFDistun = 0.0;        if (!model->B3SOIFDxbjtGiven)              model->B3SOIFDxbjt = 2;        if (!model->B3SOIFDxdifGiven)              model->B3SOIFDxdif = 2;        if (!model->B3SOIFDxrecGiven)              model->B3SOIFDxrec = 20;        if (!model->B3SOIFDxtunGiven)              model->B3SOIFDxtun = 0;        if (!model->B3SOIFDedlGiven)              model->B3SOIFDedl = 2e-6;        if (!model->B3SOIFDkbjt1Given)              model->B3SOIFDkbjt1 = 0;        if (!model->B3SOIFDttGiven)              model->B3SOIFDtt = 1e-12;        if (!model->B3SOIFDasdGiven)              model->B3SOIFDasd = 0.3;        /* unit degree celcius */        if (!model->B3SOIFDtnomGiven)  	    model->B3SOIFDtnom = ckt->CKTnomTemp;         if (!model->B3SOIFDLintGiven)             model->B3SOIFDLint = 0.0;        if (!model->B3SOIFDLlGiven)             model->B3SOIFDLl = 0.0;        if (!model->B3SOIFDLlnGiven)             model->B3SOIFDLln = 1.0;        if (!model->B3SOIFDLwGiven)             model->B3SOIFDLw = 0.0;        if (!model->B3SOIFDLwnGiven)             model->B3SOIFDLwn = 1.0;        if (!model->B3SOIFDLwlGiven)             model->B3SOIFDLwl = 0.0;        if (!model->B3SOIFDLminGiven)             model->B3SOIFDLmin = 0.0;        if (!model->B3SOIFDLmaxGiven)             model->B3SOIFDLmax = 1.0;        if (!model->B3SOIFDWintGiven)             model->B3SOIFDWint = 0.0;        if (!model->B3SOIFDWlGiven)             model->B3SOIFDWl = 0.0;        if (!model->B3SOIFDWlnGiven)             model->B3SOIFDWln = 1.0;        if (!model->B3SOIFDWwGiven)             model->B3SOIFDWw = 0.0;        if (!model->B3SOIFDWwnGiven)             model->B3SOIFDWwn = 1.0;        if (!model->B3SOIFDWwlGiven)             model->B3SOIFDWwl = 0.0;        if (!model->B3SOIFDWminGiven)             model->B3SOIFDWmin = 0.0;        if (!model->B3SOIFDWmaxGiven)             model->B3SOIFDWmax = 1.0;        if (!model->B3SOIFDdwcGiven)             model->B3SOIFDdwc = model->B3SOIFDWint;        if (!model->B3SOIFDdlcGiven)             model->B3SOIFDdlc = model->B3SOIFDLint;/* Added for binning - START */        /* Length dependence */        if (!model->B3SOIFDlnpeakGiven)            model->B3SOIFDlnpeak = 0.0;        if (!model->B3SOIFDlnsubGiven)            model->B3SOIFDlnsub = 0.0;        if (!model->B3SOIFDlngateGiven)            model->B3SOIFDlngate = 0.0;        if (!model->B3SOIFDlvth0Given)           model->B3SOIFDlvth0 = 0.0;        if (!model->B3SOIFDlk1Given)            model->B3SOIFDlk1 = 0.0;        if (!model->B3SOIFDlk2Given)            model->B3SOIFDlk2 = 0.0;        if (!model->B3SOIFDlk3Given)

⌨️ 快捷键说明

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