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

📄 b3soiddset.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 TangModified by Pin Su, Wei Jin 99/9/27File: b3soiddset.c          98/5/01Modified by Paolo Nenzi 2002**********//* * Revision 2.1  99/9/27 Pin Su  * BSIMDD2.1 release */#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "b3soidddef.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.0e6intB3SOIDDsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,              int *states){B3SOIDDmodel *model = (B3SOIDDmodel*)inModel;B3SOIDDinstance *here;int error;CKTnode *tmp;double tmp1, tmp2;double nfb0, Cboxt;CKTnode *tmpNode;IFuid tmpName;    /*  loop through all the B3SOIDD device models */    for( ; model != NULL; model = model->B3SOIDDnextModel )    {/* Default value Processing for B3SOIDD MOSFET Models */        if (!model->B3SOIDDtypeGiven)            model->B3SOIDDtype = NMOS;             if (!model->B3SOIDDmobModGiven)             model->B3SOIDDmobMod = 1;        if (!model->B3SOIDDbinUnitGiven)             model->B3SOIDDbinUnit = 1;        if (!model->B3SOIDDparamChkGiven)             model->B3SOIDDparamChk = 0;        if (!model->B3SOIDDcapModGiven)             model->B3SOIDDcapMod = 2;        if (!model->B3SOIDDnoiModGiven)             model->B3SOIDDnoiMod = 1;        if (!model->B3SOIDDshModGiven)             model->B3SOIDDshMod = 0;        if (!model->B3SOIDDversionGiven)             model->B3SOIDDversion = 2.0;        if (!model->B3SOIDDtoxGiven)            model->B3SOIDDtox = 100.0e-10;        model->B3SOIDDcox = 3.453133e-11 / model->B3SOIDDtox;        if (!model->B3SOIDDcdscGiven)	    model->B3SOIDDcdsc = 2.4e-4;   /* unit Q/V/m^2  */        if (!model->B3SOIDDcdscbGiven)	    model->B3SOIDDcdscb = 0.0;   /* unit Q/V/m^2  */    	    if (!model->B3SOIDDcdscdGiven)	    model->B3SOIDDcdscd = 0.0;   /* unit Q/V/m^2  */        if (!model->B3SOIDDcitGiven)	    model->B3SOIDDcit = 0.0;   /* unit Q/V/m^2  */        if (!model->B3SOIDDnfactorGiven)	    model->B3SOIDDnfactor = 1;        if (!model->B3SOIDDvsatGiven)            model->B3SOIDDvsat = 8.0e4;    /* unit m/s */         if (!model->B3SOIDDatGiven)            model->B3SOIDDat = 3.3e4;    /* unit m/s */         if (!model->B3SOIDDa0Given)            model->B3SOIDDa0 = 1.0;          if (!model->B3SOIDDagsGiven)            model->B3SOIDDags = 0.0;        if (!model->B3SOIDDa1Given)            model->B3SOIDDa1 = 0.0;        if (!model->B3SOIDDa2Given)            model->B3SOIDDa2 = 1.0;        if (!model->B3SOIDDketaGiven)            model->B3SOIDDketa = -0.6;    /* unit  / V */        if (!model->B3SOIDDnsubGiven)            model->B3SOIDDnsub = 6.0e16;   /* unit 1/cm3 */        if (!model->B3SOIDDnpeakGiven)            model->B3SOIDDnpeak = 1.7e17;   /* unit 1/cm3 */        if (!model->B3SOIDDngateGiven)            model->B3SOIDDngate = 0;   /* unit 1/cm3 */        if (!model->B3SOIDDvbmGiven)	    model->B3SOIDDvbm = -3.0;        if (!model->B3SOIDDxtGiven)	    model->B3SOIDDxt = 1.55e-7;        if (!model->B3SOIDDkt1Given)            model->B3SOIDDkt1 = -0.11;      /* unit V */        if (!model->B3SOIDDkt1lGiven)            model->B3SOIDDkt1l = 0.0;      /* unit V*m */        if (!model->B3SOIDDkt2Given)            model->B3SOIDDkt2 = 0.022;      /* No unit */        if (!model->B3SOIDDk3Given)            model->B3SOIDDk3 = 0.0;              if (!model->B3SOIDDk3bGiven)            model->B3SOIDDk3b = 0.0;              if (!model->B3SOIDDw0Given)            model->B3SOIDDw0 = 2.5e-6;            if (!model->B3SOIDDnlxGiven)            model->B3SOIDDnlx = 1.74e-7;             if (!model->B3SOIDDdvt0Given)            model->B3SOIDDdvt0 = 2.2;            if (!model->B3SOIDDdvt1Given)            model->B3SOIDDdvt1 = 0.53;              if (!model->B3SOIDDdvt2Given)            model->B3SOIDDdvt2 = -0.032;   /* unit 1 / V */             if (!model->B3SOIDDdvt0wGiven)            model->B3SOIDDdvt0w = 0.0;            if (!model->B3SOIDDdvt1wGiven)            model->B3SOIDDdvt1w = 5.3e6;            if (!model->B3SOIDDdvt2wGiven)            model->B3SOIDDdvt2w = -0.032;           if (!model->B3SOIDDdroutGiven)            model->B3SOIDDdrout = 0.56;             if (!model->B3SOIDDdsubGiven)            model->B3SOIDDdsub = model->B3SOIDDdrout;             if (!model->B3SOIDDvth0Given)            model->B3SOIDDvth0 = (model->B3SOIDDtype == NMOS) ? 0.7 : -0.7;        if (!model->B3SOIDDuaGiven)            model->B3SOIDDua = 2.25e-9;      /* unit m/V */        if (!model->B3SOIDDua1Given)            model->B3SOIDDua1 = 4.31e-9;      /* unit m/V */        if (!model->B3SOIDDubGiven)            model->B3SOIDDub = 5.87e-19;     /* unit (m/V)**2 */        if (!model->B3SOIDDub1Given)            model->B3SOIDDub1 = -7.61e-18;     /* unit (m/V)**2 */        if (!model->B3SOIDDucGiven)            model->B3SOIDDuc = (model->B3SOIDDmobMod == 3) ? -0.0465 : -0.0465e-9;           if (!model->B3SOIDDuc1Given)            model->B3SOIDDuc1 = (model->B3SOIDDmobMod == 3) ? -0.056 : -0.056e-9;           if (!model->B3SOIDDu0Given)            model->B3SOIDDu0 = (model->B3SOIDDtype == NMOS) ? 0.067 : 0.025;        if (!model->B3SOIDDuteGiven)	    model->B3SOIDDute = -1.5;            if (!model->B3SOIDDvoffGiven)	    model->B3SOIDDvoff = -0.08;        if (!model->B3SOIDDdeltaGiven)             model->B3SOIDDdelta = 0.01;        if (!model->B3SOIDDrdswGiven)            model->B3SOIDDrdsw = 100;        if (!model->B3SOIDDprwgGiven)            model->B3SOIDDprwg = 0.0;      /* unit 1/V */        if (!model->B3SOIDDprwbGiven)            model->B3SOIDDprwb = 0.0;              if (!model->B3SOIDDprtGiven)        if (!model->B3SOIDDprtGiven)            model->B3SOIDDprt = 0.0;              if (!model->B3SOIDDeta0Given)            model->B3SOIDDeta0 = 0.08;      /* no unit  */         if (!model->B3SOIDDetabGiven)            model->B3SOIDDetab = -0.07;      /* unit  1/V */         if (!model->B3SOIDDpclmGiven)            model->B3SOIDDpclm = 1.3;      /* no unit  */         if (!model->B3SOIDDpdibl1Given)            model->B3SOIDDpdibl1 = .39;    /* no unit  */        if (!model->B3SOIDDpdibl2Given)            model->B3SOIDDpdibl2 = 0.0086;    /* no unit  */         if (!model->B3SOIDDpdiblbGiven)            model->B3SOIDDpdiblb = 0.0;    /* 1/V  */         if (!model->B3SOIDDpvagGiven)            model->B3SOIDDpvag = 0.0;             if (!model->B3SOIDDwrGiven)              model->B3SOIDDwr = 1.0;        if (!model->B3SOIDDdwgGiven)              model->B3SOIDDdwg = 0.0;        if (!model->B3SOIDDdwbGiven)              model->B3SOIDDdwb = 0.0;        if (!model->B3SOIDDb0Given)            model->B3SOIDDb0 = 0.0;        if (!model->B3SOIDDb1Given)              model->B3SOIDDb1 = 0.0;        if (!model->B3SOIDDalpha0Given)              model->B3SOIDDalpha0 = 0.0;        if (!model->B3SOIDDalpha1Given)              model->B3SOIDDalpha1 = 1.0;        if (!model->B3SOIDDbeta0Given)              model->B3SOIDDbeta0 = 30.0;        if (!model->B3SOIDDcgslGiven)              model->B3SOIDDcgsl = 0.0;        if (!model->B3SOIDDcgdlGiven)              model->B3SOIDDcgdl = 0.0;        if (!model->B3SOIDDckappaGiven)              model->B3SOIDDckappa = 0.6;        if (!model->B3SOIDDclcGiven)              model->B3SOIDDclc = 0.1e-7;        if (!model->B3SOIDDcleGiven)              model->B3SOIDDcle = 0.0;        if (!model->B3SOIDDtboxGiven)              model->B3SOIDDtbox = 3e-7;        if (!model->B3SOIDDtsiGiven)              model->B3SOIDDtsi = 1e-7;        if (!model->B3SOIDDxjGiven)              model->B3SOIDDxj = model->B3SOIDDtsi;        if (!model->B3SOIDDkb1Given)              model->B3SOIDDkb1 = 1;        if (!model->B3SOIDDkb3Given)              model->B3SOIDDkb3 = 1;        if (!model->B3SOIDDdvbd0Given)              model->B3SOIDDdvbd0 = 0.0;        if (!model->B3SOIDDdvbd1Given)              model->B3SOIDDdvbd1 = 0.0;        if (!model->B3SOIDDvbsaGiven)              model->B3SOIDDvbsa = 0.0;        if (!model->B3SOIDDdelpGiven)              model->B3SOIDDdelp = 0.02;        if (!model->B3SOIDDrbodyGiven)              model->B3SOIDDrbody = 0.0;        if (!model->B3SOIDDrbshGiven)              model->B3SOIDDrbsh = 0.0;        if (!model->B3SOIDDadice0Given)              model->B3SOIDDadice0 = 1;        if (!model->B3SOIDDabpGiven)              model->B3SOIDDabp = 1;        if (!model->B3SOIDDmxcGiven)              model->B3SOIDDmxc = -0.9;        if (!model->B3SOIDDrth0Given)              model->B3SOIDDrth0 = 0;        if (!model->B3SOIDDcth0Given)            model->B3SOIDDcth0 = 0;        if (!model->B3SOIDDaiiGiven)              model->B3SOIDDaii = 0.0;        if (!model->B3SOIDDbiiGiven)              model->B3SOIDDbii = 0.0;        if (!model->B3SOIDDciiGiven)              model->B3SOIDDcii = 0.0;        if (!model->B3SOIDDdiiGiven)              model->B3SOIDDdii = -1.0;        if (!model->B3SOIDDagidlGiven)              model->B3SOIDDagidl = 0.0;        if (!model->B3SOIDDbgidlGiven)              model->B3SOIDDbgidl = 0.0;        if (!model->B3SOIDDngidlGiven)              model->B3SOIDDngidl = 1.2;        if (!model->B3SOIDDndiodeGiven)              model->B3SOIDDndiode = 1.0;        if (!model->B3SOIDDntunGiven)              model->B3SOIDDntun = 10.0;        if (!model->B3SOIDDisbjtGiven)              model->B3SOIDDisbjt = 1e-6;        if (!model->B3SOIDDisdifGiven)              model->B3SOIDDisdif = 0.0;        if (!model->B3SOIDDisrecGiven)              model->B3SOIDDisrec = 1e-5;        if (!model->B3SOIDDistunGiven)              model->B3SOIDDistun = 0.0;        if (!model->B3SOIDDxbjtGiven)              model->B3SOIDDxbjt = 2;        if (!model->B3SOIDDxdifGiven)              model->B3SOIDDxdif = 2;        if (!model->B3SOIDDxrecGiven)              model->B3SOIDDxrec = 20;        if (!model->B3SOIDDxtunGiven)              model->B3SOIDDxtun = 0;        if (!model->B3SOIDDedlGiven)              model->B3SOIDDedl = 2e-6;        if (!model->B3SOIDDkbjt1Given)              model->B3SOIDDkbjt1 = 0;        if (!model->B3SOIDDttGiven)              model->B3SOIDDtt = 1e-12;        if (!model->B3SOIDDasdGiven)              model->B3SOIDDasd = 0.3;        /* unit degree celcius */        if (!model->B3SOIDDtnomGiven)  	    model->B3SOIDDtnom = ckt->CKTnomTemp;         if (!model->B3SOIDDLintGiven)             model->B3SOIDDLint = 0.0;        if (!model->B3SOIDDLlGiven)             model->B3SOIDDLl = 0.0;        if (!model->B3SOIDDLlnGiven)             model->B3SOIDDLln = 1.0;        if (!model->B3SOIDDLwGiven)             model->B3SOIDDLw = 0.0;        if (!model->B3SOIDDLwnGiven)             model->B3SOIDDLwn = 1.0;        if (!model->B3SOIDDLwlGiven)             model->B3SOIDDLwl = 0.0;        if (!model->B3SOIDDLminGiven)             model->B3SOIDDLmin = 0.0;        if (!model->B3SOIDDLmaxGiven)             model->B3SOIDDLmax = 1.0;        if (!model->B3SOIDDWintGiven)             model->B3SOIDDWint = 0.0;        if (!model->B3SOIDDWlGiven)             model->B3SOIDDWl = 0.0;        if (!model->B3SOIDDWlnGiven)             model->B3SOIDDWln = 1.0;        if (!model->B3SOIDDWwGiven)             model->B3SOIDDWw = 0.0;        if (!model->B3SOIDDWwnGiven)             model->B3SOIDDWwn = 1.0;        if (!model->B3SOIDDWwlGiven)             model->B3SOIDDWwl = 0.0;        if (!model->B3SOIDDWminGiven)             model->B3SOIDDWmin = 0.0;        if (!model->B3SOIDDWmaxGiven)             model->B3SOIDDWmax = 1.0;        if (!model->B3SOIDDdwcGiven)             model->B3SOIDDdwc = model->B3SOIDDWint;        if (!model->B3SOIDDdlcGiven)             model->B3SOIDDdlc = model->B3SOIDDLint;/* Added for binning - START */        /* Length dependence */        if (!model->B3SOIDDlnpeakGiven)            model->B3SOIDDlnpeak = 0.0;        if (!model->B3SOIDDlnsubGiven)            model->B3SOIDDlnsub = 0.0;        if (!model->B3SOIDDlngateGiven)            model->B3SOIDDlngate = 0.0;        if (!model->B3SOIDDlvth0Given)           model->B3SOIDDlvth0 = 0.0;        if (!model->B3SOIDDlk1Given)            model->B3SOIDDlk1 = 0.0;        if (!model->B3SOIDDlk2Given)            model->B3SOIDDlk2 = 0.0;        if (!model->B3SOIDDlk3Given)            model->B3SOIDDlk3 = 0.0;        if (!model->B3SOIDDlk3bGiven)            model->B3SOIDDlk3b = 0.0;        if (!model->B3SOIDDlvbsaGiven)

⌨️ 快捷键说明

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