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

📄 b3v1aset.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 3 页
字号:
            model->BSIM3v1Apb0 = 0.0;        if (!model->BSIM3v1Apb1Given)              model->BSIM3v1Apb1 = 0.0;        if (!model->BSIM3v1Apalpha0Given)              model->BSIM3v1Apalpha0 = 0.0;        if (!model->BSIM3v1Apbeta0Given)              model->BSIM3v1Apbeta0 = 0.0;        if (!model->BSIM3v1ApelmGiven)              model->BSIM3v1Apelm = 0.0;        if (!model->BSIM3v1ApcgslGiven)              model->BSIM3v1Apcgsl = 0.0;        if (!model->BSIM3v1ApcgdlGiven)              model->BSIM3v1Apcgdl = 0.0;        if (!model->BSIM3v1ApckappaGiven)              model->BSIM3v1Apckappa = 0.0;        if (!model->BSIM3v1ApcfGiven)              model->BSIM3v1Apcf = 0.0;        if (!model->BSIM3v1ApclcGiven)              model->BSIM3v1Apclc = 0.0;        if (!model->BSIM3v1ApcleGiven)              model->BSIM3v1Apcle = 0.0;        /* unit degree celcius */        if (!model->BSIM3v1AtnomGiven)  	    model->BSIM3v1Atnom = ckt->CKTnomTemp;           if (!model->BSIM3v1ALintGiven)             model->BSIM3v1ALint = 0.0;        if (!model->BSIM3v1ALlGiven)             model->BSIM3v1ALl = 0.0;        if (!model->BSIM3v1ALlnGiven)             model->BSIM3v1ALln = 1.0;        if (!model->BSIM3v1ALwGiven)             model->BSIM3v1ALw = 0.0;        if (!model->BSIM3v1ALwnGiven)             model->BSIM3v1ALwn = 1.0;        if (!model->BSIM3v1ALwlGiven)             model->BSIM3v1ALwl = 0.0;        if (!model->BSIM3v1ALminGiven)             model->BSIM3v1ALmin = 0.0;        if (!model->BSIM3v1ALmaxGiven)             model->BSIM3v1ALmax = 1.0;        if (!model->BSIM3v1AWintGiven)             model->BSIM3v1AWint = 0.0;        if (!model->BSIM3v1AWlGiven)             model->BSIM3v1AWl = 0.0;        if (!model->BSIM3v1AWlnGiven)             model->BSIM3v1AWln = 1.0;        if (!model->BSIM3v1AWwGiven)             model->BSIM3v1AWw = 0.0;        if (!model->BSIM3v1AWwnGiven)             model->BSIM3v1AWwn = 1.0;        if (!model->BSIM3v1AWwlGiven)             model->BSIM3v1AWwl = 0.0;        if (!model->BSIM3v1AWminGiven)             model->BSIM3v1AWmin = 0.0;        if (!model->BSIM3v1AWmaxGiven)             model->BSIM3v1AWmax = 1.0;        if (!model->BSIM3v1AdwcGiven)             model->BSIM3v1Adwc = model->BSIM3v1AWint;        if (!model->BSIM3v1AdlcGiven)             model->BSIM3v1Adlc = model->BSIM3v1ALint;	   if (!model->BSIM3v1AcfGiven)            model->BSIM3v1Acf = 2.0 * EPSOX / PI			   * log(1.0 + 0.4e-6 / model->BSIM3v1Atox);        if (!model->BSIM3v1AcgdoGiven)	{   if (model->BSIM3v1AdlcGiven && (model->BSIM3v1Adlc > 0.0))	    {   model->BSIM3v1Acgdo = model->BSIM3v1Adlc * model->BSIM3v1Acox				 - model->BSIM3v1Acgdl ;		if (model->BSIM3v1Acgdo < 0.0)		    model->BSIM3v1Acgdo = 0.0;	    }	    else	        model->BSIM3v1Acgdo = 0.6 * model->BSIM3v1Axj * model->BSIM3v1Acox; 	}        if (!model->BSIM3v1AcgsoGiven)	{   if (model->BSIM3v1AdlcGiven && (model->BSIM3v1Adlc > 0.0))	    {   model->BSIM3v1Acgso = model->BSIM3v1Adlc * model->BSIM3v1Acox				 - model->BSIM3v1Acgsl ;		if (model->BSIM3v1Acgso < 0.0)		    model->BSIM3v1Acgso = 0.0;	    }	    else	        model->BSIM3v1Acgso = 0.6 * model->BSIM3v1Axj * model->BSIM3v1Acox; 	}        if (!model->BSIM3v1AcgboGiven)            model->BSIM3v1Acgbo = 0.0;        if (!model->BSIM3v1AxpartGiven)            model->BSIM3v1Axpart = 0.0;        if (!model->BSIM3v1AsheetResistanceGiven)            model->BSIM3v1AsheetResistance = 0.0;        if (!model->BSIM3v1AunitAreaJctCapGiven)            model->BSIM3v1AunitAreaJctCap = 5.0E-4;        if (!model->BSIM3v1AunitLengthSidewallJctCapGiven)            model->BSIM3v1AunitLengthSidewallJctCap = 5.0E-10;        if (!model->BSIM3v1AjctSatCurDensityGiven)            model->BSIM3v1AjctSatCurDensity = 1.0E-4;        if (!model->BSIM3v1AbulkJctPotentialGiven)            model->BSIM3v1AbulkJctPotential = 1.0;        if (!model->BSIM3v1AsidewallJctPotentialGiven)            model->BSIM3v1AsidewallJctPotential = 1.0;        if (!model->BSIM3v1AbulkJctBotGradingCoeffGiven)            model->BSIM3v1AbulkJctBotGradingCoeff = 0.5;        if (!model->BSIM3v1AbulkJctSideGradingCoeffGiven)            model->BSIM3v1AbulkJctSideGradingCoeff = 0.33;        if (!model->BSIM3v1AoxideTrapDensityAGiven)	{   if (model->BSIM3v1Atype == NMOS)                model->BSIM3v1AoxideTrapDensityA = 1e20;            else                model->BSIM3v1AoxideTrapDensityA=9.9e18;	}        if (!model->BSIM3v1AoxideTrapDensityBGiven)	{   if (model->BSIM3v1Atype == NMOS)                model->BSIM3v1AoxideTrapDensityB = 5e4;            else                model->BSIM3v1AoxideTrapDensityB = 2.4e3;	}        if (!model->BSIM3v1AoxideTrapDensityCGiven)	{   if (model->BSIM3v1Atype == NMOS)                model->BSIM3v1AoxideTrapDensityC = -1.4e-12;            else                model->BSIM3v1AoxideTrapDensityC = 1.4e-12;	}        if (!model->BSIM3v1AemGiven)            model->BSIM3v1Aem = 4.1e7; /* V/m */        if (!model->BSIM3v1AefGiven)            model->BSIM3v1Aef = 1.0;        if (!model->BSIM3v1AafGiven)            model->BSIM3v1Aaf = 1.0;        if (!model->BSIM3v1AkfGiven)            model->BSIM3v1Akf = 0.0;        /* loop through all the instances of the model */        for (here = model->BSIM3v1Ainstances; here != NULL ;             here=here->BSIM3v1AnextInstance) 	{   	    if (here->BSIM3v1Aowner == ARCHme)            {  	       /* allocate a chunk of the state vector */                here->BSIM3v1Astates = *states;                *states += BSIM3v1AnumStates;            }	    	                /* perform the parameter defaulting */            if (!here->BSIM3v1AdrainAreaGiven)                here->BSIM3v1AdrainArea = 0.0;            if (!here->BSIM3v1AdrainPerimeterGiven)                here->BSIM3v1AdrainPerimeter = 0.0;            if (!here->BSIM3v1AdrainSquaresGiven)                here->BSIM3v1AdrainSquares = 1.0;            if (!here->BSIM3v1AicVBSGiven)                here->BSIM3v1AicVBS = 0;            if (!here->BSIM3v1AicVDSGiven)                here->BSIM3v1AicVDS = 0;            if (!here->BSIM3v1AicVGSGiven)                here->BSIM3v1AicVGS = 0;            if (!here->BSIM3v1AlGiven)                here->BSIM3v1Al = 5e-6;            if (!here->BSIM3v1AsourceAreaGiven)                here->BSIM3v1AsourceArea = 0;            if (!here->BSIM3v1AsourcePerimeterGiven)                here->BSIM3v1AsourcePerimeter = 0;            if (!here->BSIM3v1AsourceSquaresGiven)                here->BSIM3v1AsourceSquares = 1;            if (!here->BSIM3v1AwGiven)                here->BSIM3v1Aw = 5e-6;            if (!here->BSIM3v1AmGiven)                here->BSIM3v1Am = 1;            if (!here->BSIM3v1AnqsModGiven)                here->BSIM3v1AnqsMod = model->BSIM3v1AnqsMod;                                /* process drain series resistance */            if ((model->BSIM3v1AsheetResistance > 0.0) &&                 (here->BSIM3v1AdrainSquares > 0.0 ) &&                (here->BSIM3v1AdNodePrime == 0))	    {   error = CKTmkVolt(ckt,&tmp,here->BSIM3v1Aname,"drain");                if(error) return(error);                here->BSIM3v1AdNodePrime = tmp->number;                if (ckt->CKTcopyNodesets) {                  if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {                     if (tmpNode->nsGiven) {                       tmp->nodeset=tmpNode->nodeset;                        tmp->nsGiven=tmpNode->nsGiven;                      }                  }                }            }	    else	    {   here->BSIM3v1AdNodePrime = here->BSIM3v1AdNode;            }                               /* process source series resistance */            if ((model->BSIM3v1AsheetResistance > 0.0) &&                 (here->BSIM3v1AsourceSquares > 0.0 ) &&                (here->BSIM3v1AsNodePrime == 0)) 	    {   error = CKTmkVolt(ckt,&tmp,here->BSIM3v1Aname,"source");                if(error) return(error);                here->BSIM3v1AsNodePrime = tmp->number;                if (ckt->CKTcopyNodesets) {                  if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {                     if (tmpNode->nsGiven) {                       tmp->nodeset=tmpNode->nodeset;                        tmp->nsGiven=tmpNode->nsGiven;                      }                  }                }            }	    else 	    {   here->BSIM3v1AsNodePrime = here->BSIM3v1AsNode;            } /* internal charge node */                               if ((here->BSIM3v1AnqsMod) && (here->BSIM3v1AqNode == 0)) 	    {   error = CKTmkVolt(ckt,&tmp,here->BSIM3v1Aname,"charge");                if(error) return(error);                here->BSIM3v1AqNode = tmp->number;            }	    else 	    {   here->BSIM3v1AqNode = 0;            }        /* set Sparse Matrix Pointers *//* macro to make elements with built in test for out of memory */#define TSTALLOC(ptr,first,second) \if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\    return(E_NOMEM);\}            TSTALLOC(BSIM3v1ADdPtr, BSIM3v1AdNode, BSIM3v1AdNode)            TSTALLOC(BSIM3v1AGgPtr, BSIM3v1AgNode, BSIM3v1AgNode)            TSTALLOC(BSIM3v1ASsPtr, BSIM3v1AsNode, BSIM3v1AsNode)            TSTALLOC(BSIM3v1ABbPtr, BSIM3v1AbNode, BSIM3v1AbNode)            TSTALLOC(BSIM3v1ADPdpPtr, BSIM3v1AdNodePrime, BSIM3v1AdNodePrime)            TSTALLOC(BSIM3v1ASPspPtr, BSIM3v1AsNodePrime, BSIM3v1AsNodePrime)            TSTALLOC(BSIM3v1ADdpPtr, BSIM3v1AdNode, BSIM3v1AdNodePrime)            TSTALLOC(BSIM3v1AGbPtr, BSIM3v1AgNode, BSIM3v1AbNode)            TSTALLOC(BSIM3v1AGdpPtr, BSIM3v1AgNode, BSIM3v1AdNodePrime)            TSTALLOC(BSIM3v1AGspPtr, BSIM3v1AgNode, BSIM3v1AsNodePrime)            TSTALLOC(BSIM3v1ASspPtr, BSIM3v1AsNode, BSIM3v1AsNodePrime)            TSTALLOC(BSIM3v1ABdpPtr, BSIM3v1AbNode, BSIM3v1AdNodePrime)            TSTALLOC(BSIM3v1ABspPtr, BSIM3v1AbNode, BSIM3v1AsNodePrime)            TSTALLOC(BSIM3v1ADPspPtr, BSIM3v1AdNodePrime, BSIM3v1AsNodePrime)            TSTALLOC(BSIM3v1ADPdPtr, BSIM3v1AdNodePrime, BSIM3v1AdNode)            TSTALLOC(BSIM3v1ABgPtr, BSIM3v1AbNode, BSIM3v1AgNode)            TSTALLOC(BSIM3v1ADPgPtr, BSIM3v1AdNodePrime, BSIM3v1AgNode)            TSTALLOC(BSIM3v1ASPgPtr, BSIM3v1AsNodePrime, BSIM3v1AgNode)            TSTALLOC(BSIM3v1ASPsPtr, BSIM3v1AsNodePrime, BSIM3v1AsNode)            TSTALLOC(BSIM3v1ADPbPtr, BSIM3v1AdNodePrime, BSIM3v1AbNode)            TSTALLOC(BSIM3v1ASPbPtr, BSIM3v1AsNodePrime, BSIM3v1AbNode)            TSTALLOC(BSIM3v1ASPdpPtr, BSIM3v1AsNodePrime, BSIM3v1AdNodePrime)            TSTALLOC(BSIM3v1AQqPtr, BSIM3v1AqNode, BSIM3v1AqNode)             TSTALLOC(BSIM3v1AQdpPtr, BSIM3v1AqNode, BSIM3v1AdNodePrime)            TSTALLOC(BSIM3v1AQspPtr, BSIM3v1AqNode, BSIM3v1AsNodePrime)            TSTALLOC(BSIM3v1AQgPtr, BSIM3v1AqNode, BSIM3v1AgNode)            TSTALLOC(BSIM3v1AQbPtr, BSIM3v1AqNode, BSIM3v1AbNode)            TSTALLOC(BSIM3v1ADPqPtr, BSIM3v1AdNodePrime, BSIM3v1AqNode)            TSTALLOC(BSIM3v1ASPqPtr, BSIM3v1AsNodePrime, BSIM3v1AqNode)            TSTALLOC(BSIM3v1AGqPtr, BSIM3v1AgNode, BSIM3v1AqNode)            TSTALLOC(BSIM3v1ABqPtr, BSIM3v1AbNode, BSIM3v1AqNode)        }    }    return(OK);}  intBSIM3v1Aunsetup(GENmodel *inModel, CKTcircuit *ckt){    BSIM3v1Amodel *model;    BSIM3v1Ainstance *here;    for (model = (BSIM3v1Amodel *)inModel; model != NULL;            model = model->BSIM3v1AnextModel)    {        for (here = model->BSIM3v1Ainstances; here != NULL;                here=here->BSIM3v1AnextInstance)        {            if (here->BSIM3v1AdNodePrime                    && here->BSIM3v1AdNodePrime != here->BSIM3v1AdNode)            {                CKTdltNNum(ckt, here->BSIM3v1AdNodePrime);                here->BSIM3v1AdNodePrime = 0;            }            if (here->BSIM3v1AsNodePrime                    && here->BSIM3v1AsNodePrime != here->BSIM3v1AsNode)            {                CKTdltNNum(ckt, here->BSIM3v1AsNodePrime);                here->BSIM3v1AsNodePrime = 0;            }        }    }    return OK;}

⌨️ 快捷键说明

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