📄 vbicsetup.c
字号:
} if(!model->VBICdeplCapCoeff1Given) { model->VBICdeplCapCoeff1 = 0.1; } if(!model->VBICfixedCapacitanceCSGiven) { model->VBICfixedCapacitanceCS = 0.0; } if(!model->VBICsgpQBselectorGiven) { model->VBICsgpQBselector = 0.0; } if(!model->VBIChighCurrentBetaRolloffGiven) { model->VBIChighCurrentBetaRolloff = 0.5; } if(!model->VBICtempExpIKFGiven) { model->VBICtempExpIKF = 0.0; } if(!model->VBICtempExpRCXGiven) { model->VBICtempExpRCX = 0.0; } if(!model->VBICtempExpRBXGiven) { model->VBICtempExpRBX = 0.0; } if(!model->VBICtempExpRBPGiven) { model->VBICtempExpRBP = 0.0; } if(!model->VBICsepISRRGiven) { model->VBICsepISRR = 1.0; } if(!model->VBICtempExpXISRGiven) { model->VBICtempExpXISR = 0.0; } if(!model->VBICdearGiven) { model->VBICdear = 0.0; } if(!model->VBICeapGiven) { model->VBICeap = 1.12; } if(!model->VBICvbbeGiven) { model->VBICvbbe = 0.0; } if(!model->VBICnbbeGiven) { model->VBICnbbe = 1.0; } if(!model->VBICibbeGiven) { model->VBICibbe = 1e-06; } if(!model->VBICtvbbe1Given) { model->VBICtvbbe1 = 0.0; } if(!model->VBICtvbbe2Given) { model->VBICtvbbe2 = 0.0; } if(!model->VBICtnbbeGiven) { model->VBICtnbbe = 0.0; } if(!model->VBICebbeGiven) { model->VBICebbe = 0.0; } if(!model->VBIClocTempDiffGiven) { model->VBIClocTempDiff = 0.0; } if(!model->VBICrevVersionGiven) { model->VBICrevVersion = 1.2; } if(!model->VBICrefVersionGiven) { model->VBICrefVersion = 0.0; } /* loop through all the instances of the model */ for (here = model->VBICinstances; here != NULL ; here=here->VBICnextInstance) { CKTnode *tmpNode; IFuid tmpName; if (here->VBICowner != ARCHme) goto matrixpointers; if(!here->VBICareaGiven) { here->VBICarea = 1.0; } if(!here->VBICmGiven) { here->VBICm = 1.0; } if(!here->VBICdtempGiven) { here->VBICdtemp = 0.0; } here->VBICstate = *states; *states += VBICnumStates; if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){ *states += 8 * (ckt->CKTsenInfo->SENparms); }matrixpointers: if(model->VBICextCollResist == 0) { here->VBICcollCXNode = here->VBICcollNode; } else if(here->VBICcollCXNode == 0) { error = CKTmkVolt(ckt,&tmp,here->VBICname,"collector"); if(error) return(error); here->VBICcollCXNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if(model->VBICextBaseResist == 0) { here->VBICbaseBXNode = here->VBICbaseNode; } else if(here->VBICbaseBXNode == 0){ error = CKTmkVolt(ckt,&tmp,here->VBICname, "base"); if(error) return(error); here->VBICbaseBXNode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,2,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if(model->VBICemitterResist == 0) { here->VBICemitEINode = here->VBICemitNode; } else if(here->VBICemitEINode == 0) { error = CKTmkVolt(ckt,&tmp,here->VBICname, "emitter"); if(error) return(error); here->VBICemitEINode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if(model->VBICsubstrateResist == 0) { here->VBICsubsSINode = here->VBICsubsNode; } else if(here->VBICsubsSINode == 0) { error = CKTmkVolt(ckt,&tmp,here->VBICname, "substrate"); if(error) return(error); here->VBICsubsSINode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,4,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } error = CKTmkVolt(ckt, &tmp, here->VBICname, "collCI"); if(error) return(error); here->VBICcollCINode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->VBICname, "baseBP"); if(error) return(error); here->VBICbaseBPNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->VBICname, "baseBI"); if(error) return(error); here->VBICbaseBINode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->VBICname, "subsSI"); if(error) return(error); here->VBICsubsSINode = tmp->number; /* 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(VBICcollCollPtr,VBICcollNode,VBICcollNode) TSTALLOC(VBICbaseBasePtr,VBICbaseNode,VBICbaseNode) TSTALLOC(VBICemitEmitPtr,VBICemitNode,VBICemitNode) TSTALLOC(VBICsubsSubsPtr,VBICsubsNode,VBICsubsNode) TSTALLOC(VBICcollCXCollCXPtr,VBICcollCXNode,VBICcollCXNode) TSTALLOC(VBICcollCICollCIPtr,VBICcollCINode,VBICcollCINode) TSTALLOC(VBICbaseBXBaseBXPtr,VBICbaseBXNode,VBICbaseBXNode) TSTALLOC(VBICbaseBIBaseBIPtr,VBICbaseBINode,VBICbaseBINode) TSTALLOC(VBICemitEIEmitEIPtr,VBICemitEINode,VBICemitEINode) TSTALLOC(VBICbaseBPBaseBPPtr,VBICbaseBPNode,VBICbaseBPNode) TSTALLOC(VBICsubsSISubsSIPtr,VBICsubsSINode,VBICsubsSINode) TSTALLOC(VBICbaseEmitPtr,VBICbaseNode,VBICemitNode) TSTALLOC(VBICemitBasePtr,VBICemitNode,VBICbaseNode) TSTALLOC(VBICbaseCollPtr,VBICbaseNode,VBICcollNode) TSTALLOC(VBICcollBasePtr,VBICcollNode,VBICbaseNode) TSTALLOC(VBICcollCollCXPtr,VBICcollNode,VBICcollCXNode) TSTALLOC(VBICbaseBaseBXPtr,VBICbaseNode,VBICbaseBXNode) TSTALLOC(VBICemitEmitEIPtr,VBICemitNode,VBICemitEINode) TSTALLOC(VBICsubsSubsSIPtr,VBICsubsNode,VBICsubsSINode) TSTALLOC(VBICcollCXCollCIPtr,VBICcollCXNode,VBICcollCINode) TSTALLOC(VBICcollCXBaseBXPtr,VBICcollCXNode,VBICbaseBXNode) TSTALLOC(VBICcollCXBaseBIPtr,VBICcollCXNode,VBICbaseBINode) TSTALLOC(VBICcollCXBaseBPPtr,VBICcollCXNode,VBICbaseBPNode) TSTALLOC(VBICcollCIBaseBIPtr,VBICcollCINode,VBICbaseBINode) TSTALLOC(VBICcollCIEmitEIPtr,VBICcollCINode,VBICemitEINode) TSTALLOC(VBICbaseBXBaseBIPtr,VBICbaseBXNode,VBICbaseBINode) TSTALLOC(VBICbaseBXEmitEIPtr,VBICbaseBXNode,VBICemitEINode) TSTALLOC(VBICbaseBXBaseBPPtr,VBICbaseBXNode,VBICbaseBPNode) TSTALLOC(VBICbaseBXSubsSIPtr,VBICbaseBXNode,VBICsubsSINode) TSTALLOC(VBICbaseBIEmitEIPtr,VBICbaseBINode,VBICemitEINode) TSTALLOC(VBICbaseBPSubsSIPtr,VBICbaseBPNode,VBICsubsSINode) TSTALLOC(VBICcollCXCollPtr,VBICcollCXNode,VBICcollNode) TSTALLOC(VBICbaseBXBasePtr,VBICbaseBXNode,VBICbaseNode) TSTALLOC(VBICemitEIEmitPtr,VBICemitEINode,VBICemitNode) TSTALLOC(VBICsubsSISubsPtr,VBICsubsSINode,VBICsubsNode) TSTALLOC(VBICcollCICollCXPtr,VBICcollCINode,VBICcollCXNode) TSTALLOC(VBICbaseBICollCXPtr,VBICbaseBINode,VBICcollCXNode) TSTALLOC(VBICbaseBPCollCXPtr,VBICbaseBPNode,VBICcollCXNode) TSTALLOC(VBICbaseBXCollCIPtr,VBICbaseBXNode,VBICcollCINode) TSTALLOC(VBICbaseBICollCIPtr,VBICbaseBINode,VBICcollCINode) TSTALLOC(VBICemitEICollCIPtr,VBICemitEINode,VBICcollCINode) TSTALLOC(VBICbaseBPCollCIPtr,VBICbaseBPNode,VBICcollCINode) TSTALLOC(VBICbaseBIBaseBXPtr,VBICbaseBINode,VBICbaseBXNode) TSTALLOC(VBICemitEIBaseBXPtr,VBICemitEINode,VBICbaseBXNode) TSTALLOC(VBICbaseBPBaseBXPtr,VBICbaseBPNode,VBICbaseBXNode) TSTALLOC(VBICsubsSIBaseBXPtr,VBICsubsSINode,VBICbaseBXNode) TSTALLOC(VBICemitEIBaseBIPtr,VBICemitEINode,VBICbaseBINode) TSTALLOC(VBICbaseBPBaseBIPtr,VBICbaseBPNode,VBICbaseBINode) TSTALLOC(VBICsubsSICollCIPtr,VBICsubsSINode,VBICcollCINode) TSTALLOC(VBICsubsSIBaseBIPtr,VBICsubsSINode,VBICbaseBINode) TSTALLOC(VBICsubsSIBaseBPPtr,VBICsubsSINode,VBICbaseBPNode) } } return(OK);}intVBICunsetup(inModel,ckt) GENmodel *inModel; CKTcircuit *ckt;{ VBICmodel *model; VBICinstance *here; for (model = (VBICmodel *)inModel; model != NULL; model = model->VBICnextModel) { for (here = model->VBICinstances; here != NULL; here=here->VBICnextInstance) { if (here->VBICcollCXNode && here->VBICcollCXNode != here->VBICcollNode) { CKTdltNNum(ckt, here->VBICcollCXNode); here->VBICcollCXNode = 0; } if (here->VBICcollCINode && here->VBICcollCINode != here->VBICcollNode) { CKTdltNNum(ckt, here->VBICcollCINode); here->VBICcollCINode = 0; } if (here->VBICbaseBXNode && here->VBICbaseBXNode != here->VBICbaseNode) { CKTdltNNum(ckt, here->VBICbaseBXNode); here->VBICbaseBXNode = 0; } if (here->VBICbaseBINode && here->VBICbaseBINode != here->VBICbaseNode) { CKTdltNNum(ckt, here->VBICbaseBINode); here->VBICbaseBINode = 0; } if (here->VBICbaseBPNode && here->VBICbaseBPNode != here->VBICbaseNode) { CKTdltNNum(ckt, here->VBICbaseBPNode); here->VBICbaseBPNode = 0; } if (here->VBICemitEINode && here->VBICemitEINode != here->VBICemitNode) { CKTdltNNum(ckt, here->VBICemitEINode); here->VBICemitEINode = 0; } if (here->VBICsubsSINode && here->VBICsubsSINode != here->VBICsubsNode) { CKTdltNNum(ckt, here->VBICsubsSINode); here->VBICsubsSINode = 0; } } } return OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -