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

📄 b3v0set.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 3 页
字号:
        if (!model->BSIM3v0pb1Given)              model->BSIM3v0pb1 = 0.0;        if (!model->BSIM3v0palpha0Given)              model->BSIM3v0palpha0 = 0.0;        if (!model->BSIM3v0pbeta0Given)              model->BSIM3v0pbeta0 = 0.0;        if (!model->BSIM3v0pelmGiven)              model->BSIM3v0pelm = 0.0;        if (!model->BSIM3v0pcgslGiven)              model->BSIM3v0pcgsl = 0.0;        if (!model->BSIM3v0pcgdlGiven)              model->BSIM3v0pcgdl = 0.0;        if (!model->BSIM3v0pckappaGiven)              model->BSIM3v0pckappa = 0.0;        if (!model->BSIM3v0pcfGiven)              model->BSIM3v0pcf = 0.0;        if (!model->BSIM3v0pclcGiven)              model->BSIM3v0pclc = 0.0;        if (!model->BSIM3v0pcleGiven)              model->BSIM3v0pcle = 0.0;        /* unit degree celcius */        if (!model->BSIM3v0tnomGiven)  	    model->BSIM3v0tnom = ckt->CKTnomTemp;         if (!model->BSIM3v0LintGiven)             model->BSIM3v0Lint = 0.0;        if (!model->BSIM3v0LlGiven)             model->BSIM3v0Ll = 0.0;        if (!model->BSIM3v0LlnGiven)             model->BSIM3v0Lln = 1.0;        if (!model->BSIM3v0LwGiven)             model->BSIM3v0Lw = 0.0;        if (!model->BSIM3v0LwnGiven)             model->BSIM3v0Lwn = 1.0;        if (!model->BSIM3v0LwlGiven)             model->BSIM3v0Lwl = 0.0;        if (!model->BSIM3v0LminGiven)             model->BSIM3v0Lmin = 0.0;        if (!model->BSIM3v0LmaxGiven)             model->BSIM3v0Lmax = 1.0;        if (!model->BSIM3v0WintGiven)             model->BSIM3v0Wint = 0.0;        if (!model->BSIM3v0WlGiven)             model->BSIM3v0Wl = 0.0;        if (!model->BSIM3v0WlnGiven)             model->BSIM3v0Wln = 1.0;        if (!model->BSIM3v0WwGiven)             model->BSIM3v0Ww = 0.0;        if (!model->BSIM3v0WwnGiven)             model->BSIM3v0Wwn = 1.0;        if (!model->BSIM3v0WwlGiven)             model->BSIM3v0Wwl = 0.0;        if (!model->BSIM3v0WminGiven)             model->BSIM3v0Wmin = 0.0;        if (!model->BSIM3v0WmaxGiven)             model->BSIM3v0Wmax = 1.0;        if (!model->BSIM3v0dwcGiven)             model->BSIM3v0dwc = model->BSIM3v0Wint;        if (!model->BSIM3v0dlcGiven)             model->BSIM3v0dlc = model->BSIM3v0Lint;	   if (!model->BSIM3v0cfGiven)            model->BSIM3v0cf = 2.0 * EPSOX / PI			   * log(1.0 + 0.4e-6 / model->BSIM3v0tox);        if (!model->BSIM3v0cgdoGiven)	{   if (model->BSIM3v0dlcGiven && (model->BSIM3v0dlc > 0.0))	    {   model->BSIM3v0cgdo = model->BSIM3v0dlc * model->BSIM3v0cox				 - model->BSIM3v0cgdl ;		if (model->BSIM3v0cgdo < 0.0)		    model->BSIM3v0cgdo = 0.0;	    }	    else	        model->BSIM3v0cgdo = 0.6 * model->BSIM3v0xj * model->BSIM3v0cox; 	}        if (!model->BSIM3v0cgsoGiven)	{   if (model->BSIM3v0dlcGiven && (model->BSIM3v0dlc > 0.0))	    {   model->BSIM3v0cgso = model->BSIM3v0dlc * model->BSIM3v0cox				 - model->BSIM3v0cgsl ;		if (model->BSIM3v0cgso < 0.0)		    model->BSIM3v0cgso = 0.0;	    }	    else	        model->BSIM3v0cgso = 0.6 * model->BSIM3v0xj * model->BSIM3v0cox; 	}        if (!model->BSIM3v0cgboGiven)            model->BSIM3v0cgbo = 0.0;        if (!model->BSIM3v0xpartGiven)            model->BSIM3v0xpart = 0.0;        if (!model->BSIM3v0sheetResistanceGiven)            model->BSIM3v0sheetResistance = 0.0;        if (!model->BSIM3v0unitAreaJctCapGiven)            model->BSIM3v0unitAreaJctCap = 5.0E-4;        if (!model->BSIM3v0unitLengthSidewallJctCapGiven)            model->BSIM3v0unitLengthSidewallJctCap = 5.0E-10;        if (!model->BSIM3v0jctSatCurDensityGiven)            model->BSIM3v0jctSatCurDensity = 1.0E-4;        if (!model->BSIM3v0bulkJctPotentialGiven)            model->BSIM3v0bulkJctPotential = 1.0;        if (!model->BSIM3v0sidewallJctPotentialGiven)            model->BSIM3v0sidewallJctPotential = 1.0;        if (!model->BSIM3v0bulkJctBotGradingCoeffGiven)            model->BSIM3v0bulkJctBotGradingCoeff = 0.5;        if (!model->BSIM3v0bulkJctSideGradingCoeffGiven)            model->BSIM3v0bulkJctSideGradingCoeff = 0.33;        if (!model->BSIM3v0oxideTrapDensityAGiven)	{   if (model->BSIM3v0type == NMOS)                model->BSIM3v0oxideTrapDensityA = 1e20;            else                model->BSIM3v0oxideTrapDensityA=9.9e18;	}        if (!model->BSIM3v0oxideTrapDensityBGiven)	{   if (model->BSIM3v0type == NMOS)                model->BSIM3v0oxideTrapDensityB = 5e4;            else                model->BSIM3v0oxideTrapDensityB = 2.4e3;	}        if (!model->BSIM3v0oxideTrapDensityCGiven)	{   if (model->BSIM3v0type == NMOS)                model->BSIM3v0oxideTrapDensityC = -1.4e-12;            else                model->BSIM3v0oxideTrapDensityC = 1.4e-12;	}        if (!model->BSIM3v0emGiven)            model->BSIM3v0em = 4.1e7; /* V/m */        if (!model->BSIM3v0efGiven)            model->BSIM3v0ef = 1.0;        if (!model->BSIM3v0afGiven)            model->BSIM3v0af = 1.0;        if (!model->BSIM3v0kfGiven)            model->BSIM3v0kf = 0.0;        /* loop through all the instances of the model */        for (here = model->BSIM3v0instances; here != NULL ;             here=here->BSIM3v0nextInstance) 	{   	           if (here->BSIM3v0owner == ARCHme)           {   	        /* allocate a chunk of the state vector */                 here->BSIM3v0states = *states;                 *states += BSIM3v0numStates;           }    	    	    /* perform the parameter defaulting */	    if (!here->BSIM3v0drainAreaGiven)                here->BSIM3v0drainArea = 0.0;            if (!here->BSIM3v0drainPerimeterGiven)                here->BSIM3v0drainPerimeter = 0.0;            if (!here->BSIM3v0drainSquaresGiven)                here->BSIM3v0drainSquares = 1.0;            if (!here->BSIM3v0icVBSGiven)                here->BSIM3v0icVBS = 0;            if (!here->BSIM3v0icVDSGiven)                here->BSIM3v0icVDS = 0;            if (!here->BSIM3v0icVGSGiven)                here->BSIM3v0icVGS = 0;            if (!here->BSIM3v0lGiven)                here->BSIM3v0l = 5e-6;            if (!here->BSIM3v0sourceAreaGiven)                here->BSIM3v0sourceArea = 0;            if (!here->BSIM3v0sourcePerimeterGiven)                here->BSIM3v0sourcePerimeter = 0;            if (!here->BSIM3v0sourceSquaresGiven)                here->BSIM3v0sourceSquares = 1;            if (!here->BSIM3v0wGiven)                here->BSIM3v0w = 5e-6;            if (!here->BSIM3v0mGiven)                here->BSIM3v0m = 1;            if (!here->BSIM3v0nqsModGiven)                here->BSIM3v0nqsMod = model->BSIM3v0nqsMod;                                /* process drain series resistance */            if ((model->BSIM3v0sheetResistance > 0.0) &&                 (here->BSIM3v0drainSquares > 0.0 ) &&                (here->BSIM3v0dNodePrime == 0))	    {   error = CKTmkVolt(ckt,&tmp,here->BSIM3v0name,"drain");                if(error) return(error);                here->BSIM3v0dNodePrime = 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->BSIM3v0dNodePrime = here->BSIM3v0dNode;            }                               /* process source series resistance */            if ((model->BSIM3v0sheetResistance > 0.0) &&                 (here->BSIM3v0sourceSquares > 0.0 ) &&                (here->BSIM3v0sNodePrime == 0)) 	    {   error = CKTmkVolt(ckt,&tmp,here->BSIM3v0name,"source");                if(error) return(error);                here->BSIM3v0sNodePrime = 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->BSIM3v0sNodePrime = here->BSIM3v0sNode;            } /* internal charge node */                               if ((here->BSIM3v0nqsMod) && (here->BSIM3v0qNode == 0)) 	    {   error = CKTmkVolt(ckt,&tmp,here->BSIM3v0name,"charge");                if(error) return(error);                here->BSIM3v0qNode = tmp->number;            }	    else 	    {   here->BSIM3v0qNode = 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(BSIM3v0DdPtr, BSIM3v0dNode, BSIM3v0dNode)            TSTALLOC(BSIM3v0GgPtr, BSIM3v0gNode, BSIM3v0gNode)            TSTALLOC(BSIM3v0SsPtr, BSIM3v0sNode, BSIM3v0sNode)            TSTALLOC(BSIM3v0BbPtr, BSIM3v0bNode, BSIM3v0bNode)            TSTALLOC(BSIM3v0DPdpPtr, BSIM3v0dNodePrime, BSIM3v0dNodePrime)            TSTALLOC(BSIM3v0SPspPtr, BSIM3v0sNodePrime, BSIM3v0sNodePrime)            TSTALLOC(BSIM3v0DdpPtr, BSIM3v0dNode, BSIM3v0dNodePrime)            TSTALLOC(BSIM3v0GbPtr, BSIM3v0gNode, BSIM3v0bNode)            TSTALLOC(BSIM3v0GdpPtr, BSIM3v0gNode, BSIM3v0dNodePrime)            TSTALLOC(BSIM3v0GspPtr, BSIM3v0gNode, BSIM3v0sNodePrime)            TSTALLOC(BSIM3v0SspPtr, BSIM3v0sNode, BSIM3v0sNodePrime)            TSTALLOC(BSIM3v0BdpPtr, BSIM3v0bNode, BSIM3v0dNodePrime)            TSTALLOC(BSIM3v0BspPtr, BSIM3v0bNode, BSIM3v0sNodePrime)            TSTALLOC(BSIM3v0DPspPtr, BSIM3v0dNodePrime, BSIM3v0sNodePrime)            TSTALLOC(BSIM3v0DPdPtr, BSIM3v0dNodePrime, BSIM3v0dNode)            TSTALLOC(BSIM3v0BgPtr, BSIM3v0bNode, BSIM3v0gNode)            TSTALLOC(BSIM3v0DPgPtr, BSIM3v0dNodePrime, BSIM3v0gNode)            TSTALLOC(BSIM3v0SPgPtr, BSIM3v0sNodePrime, BSIM3v0gNode)            TSTALLOC(BSIM3v0SPsPtr, BSIM3v0sNodePrime, BSIM3v0sNode)            TSTALLOC(BSIM3v0DPbPtr, BSIM3v0dNodePrime, BSIM3v0bNode)            TSTALLOC(BSIM3v0SPbPtr, BSIM3v0sNodePrime, BSIM3v0bNode)            TSTALLOC(BSIM3v0SPdpPtr, BSIM3v0sNodePrime, BSIM3v0dNodePrime)            TSTALLOC(BSIM3v0QqPtr, BSIM3v0qNode, BSIM3v0qNode)             TSTALLOC(BSIM3v0QdpPtr, BSIM3v0qNode, BSIM3v0dNodePrime)            TSTALLOC(BSIM3v0QspPtr, BSIM3v0qNode, BSIM3v0sNodePrime)            TSTALLOC(BSIM3v0QgPtr, BSIM3v0qNode, BSIM3v0gNode)            TSTALLOC(BSIM3v0QbPtr, BSIM3v0qNode, BSIM3v0bNode)            TSTALLOC(BSIM3v0DPqPtr, BSIM3v0dNodePrime, BSIM3v0qNode)            TSTALLOC(BSIM3v0SPqPtr, BSIM3v0sNodePrime, BSIM3v0qNode)            TSTALLOC(BSIM3v0GqPtr, BSIM3v0gNode, BSIM3v0qNode)            TSTALLOC(BSIM3v0BqPtr, BSIM3v0bNode, BSIM3v0qNode)        }    }    return(OK);}  intBSIM3v0unsetup(GENmodel *inModel, CKTcircuit *ckt){    BSIM3v0model *model;    BSIM3v0instance *here;    for (model = (BSIM3v0model *)inModel; model != NULL;            model = model->BSIM3v0nextModel)    {        for (here = model->BSIM3v0instances; here != NULL;                here=here->BSIM3v0nextInstance)        {            if (here->BSIM3v0dNodePrime                    && here->BSIM3v0dNodePrime != here->BSIM3v0dNode)            {                CKTdltNNum(ckt, here->BSIM3v0dNodePrime);                here->BSIM3v0dNodePrime = 0;            }            if (here->BSIM3v0sNodePrime                    && here->BSIM3v0sNodePrime != here->BSIM3v0sNode)            {                CKTdltNNum(ckt, here->BSIM3v0sNodePrime);                here->BSIM3v0sNodePrime = 0;            }        }    }    return OK;}

⌨️ 快捷键说明

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