📄 b3v0set.c
字号:
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 + -