general update: fix temperature update, improve performance
This commit is contained in:
parent
f33e899fda
commit
de09636d1a
|
|
@ -66,6 +66,7 @@ IFparm VBICpTable[] = { /* parameters */
|
|||
|
||||
IFparm VBICmPTable[] = { /* model parameters */
|
||||
OP("type", VBIC_MOD_TYPE, IF_STRING, "NPN or PNP"),
|
||||
IOP("selft", VBIC_MOD_SELFT, IF_INTEGER, "0: self-heating off, 1: self-heating on"),
|
||||
IOPU("npn", VBIC_MOD_NPN, IF_FLAG, "NPN type device"),
|
||||
IOPU("pnp", VBIC_MOD_PNP, IF_FLAG, "PNP type device"),
|
||||
IOP("tnom", VBIC_MOD_TNOM, IF_REAL, "Parameter measurement temperature"),
|
||||
|
|
@ -73,6 +74,7 @@ IFparm VBICmPTable[] = { /* model parameters */
|
|||
IOP("rcx", VBIC_MOD_RCX, IF_REAL, "Extrinsic coll resistance"),
|
||||
IOP("rci", VBIC_MOD_RCI, IF_REAL, "Intrinsic coll resistance"),
|
||||
IOP("vo", VBIC_MOD_VO, IF_REAL, "Epi drift saturation voltage"),
|
||||
IOPR("v0", VBIC_MOD_VO, IF_REAL, "Epi drift saturation voltage"),
|
||||
IOP("gamm", VBIC_MOD_GAMM, IF_REAL, "Epi doping parameter"),
|
||||
IOP("hrcf", VBIC_MOD_HRCF, IF_REAL, "High current RC factor"),
|
||||
IOP("rbx", VBIC_MOD_RBX, IF_REAL, "Extrinsic base resistance"),
|
||||
|
|
@ -85,13 +87,16 @@ IFparm VBICmPTable[] = { /* model parameters */
|
|||
IOP("nr", VBIC_MOD_NR, IF_REAL, "Reverse emission coefficient"),
|
||||
IOP("fc", VBIC_MOD_FC, IF_REAL, "Fwd bias depletion capacitance limit"),
|
||||
IOP("cbeo", VBIC_MOD_CBEO, IF_REAL, "Extrinsic B-E overlap capacitance"),
|
||||
IOPR("cbe0", VBIC_MOD_CBEO, IF_REAL, "Extrinsic B-E overlap capacitance"),
|
||||
IOP("cje", VBIC_MOD_CJE, IF_REAL, "Zero bias B-E depletion capacitance"),
|
||||
IOP("pe", VBIC_MOD_PE, IF_REAL, "B-E built in potential"),
|
||||
IOP("me", VBIC_MOD_ME, IF_REAL, "B-E junction grading coefficient"),
|
||||
IOP("aje", VBIC_MOD_AJE, IF_REAL, "B-E capacitance smoothing factor"),
|
||||
IOP("cbco", VBIC_MOD_CBCO, IF_REAL, "Extrinsic B-C overlap capacitance"),
|
||||
IOPR("cbc0", VBIC_MOD_CBCO, IF_REAL, "Extrinsic B-C overlap capacitance"),
|
||||
IOP("cjc", VBIC_MOD_CJC, IF_REAL, "Zero bias B-C depletion capacitance"),
|
||||
IOP("qco", VBIC_MOD_QCO, IF_REAL, "Epi charge parameter"),
|
||||
IOPR("qc0", VBIC_MOD_QCO, IF_REAL, "Epi charge parameter"),
|
||||
IOP("cjep", VBIC_MOD_CJEP, IF_REAL, "B-C extrinsic zero bias capacitance"),
|
||||
IOP("pc", VBIC_MOD_PC, IF_REAL, "B-C built in potential"),
|
||||
IOP("mc", VBIC_MOD_MC, IF_REAL, "B-C junction grading coefficient"),
|
||||
|
|
@ -136,12 +141,11 @@ IFparm VBICmPTable[] = { /* model parameters */
|
|||
IOP("afn", VBIC_MOD_AFN, IF_REAL, "B-E Flicker Noise Exponent"),
|
||||
IOP("bfn", VBIC_MOD_BFN, IF_REAL, "B-E Flicker Noise 1/f dependence"),
|
||||
IOP("xre", VBIC_MOD_XRE, IF_REAL, "Temperature exponent of RE"),
|
||||
IOP("xrb", VBIC_MOD_XRB, IF_REAL, "Temperature exponent of RB"),
|
||||
IOP("xrbi", VBIC_MOD_XRBI, IF_REAL, "Temperature exponent of RBI"),
|
||||
IOP("xrc", VBIC_MOD_XRC, IF_REAL, "Temperature exponent of RC"),
|
||||
IOP("xrci", VBIC_MOD_XRCI, IF_REAL, "Temperature exponent of RCI"),
|
||||
IOP("xrs", VBIC_MOD_XRS, IF_REAL, "Temperature exponent of RS"),
|
||||
IOP("xvo", VBIC_MOD_XVO, IF_REAL, "Temperature exponent of VO"),
|
||||
IOPR("xv0", VBIC_MOD_XVO, IF_REAL, "Temperature exponent of VO"),
|
||||
IOP("ea", VBIC_MOD_EA, IF_REAL, "Activation energy for IS"),
|
||||
IOP("eaie", VBIC_MOD_EAIE, IF_REAL, "Activation energy for IBEI"),
|
||||
IOP("eaic", VBIC_MOD_EAIC, IF_REAL, "Activation energy for IBCI/IBEIP"),
|
||||
|
|
@ -163,7 +167,9 @@ IFparm VBICmPTable[] = { /* model parameters */
|
|||
IOP("nkf", VBIC_MOD_NKF, IF_REAL, "High current beta rolloff"),
|
||||
IOP("xikf", VBIC_MOD_XIKF, IF_REAL, "Temperature exponent of IKF"),
|
||||
IOP("xrcx", VBIC_MOD_XRCX, IF_REAL, "Temperature exponent of RCX"),
|
||||
IOPR("xrc", VBIC_MOD_XRCX, IF_REAL, "Temperature exponent of RCX"),
|
||||
IOP("xrbx", VBIC_MOD_XRBX, IF_REAL, "Temperature exponent of RBX"),
|
||||
IOPR("xrb", VBIC_MOD_XRBX, IF_REAL, "Temperature exponent of RBX"),
|
||||
IOP("xrbp", VBIC_MOD_XRBP, IF_REAL, "Temperature exponent of RBP"),
|
||||
IOP("isrr", VBIC_MOD_ISRR, IF_REAL, "Separate IS for fwd and rev"),
|
||||
IOP("xisr", VBIC_MOD_XISR, IF_REAL, "Temperature exponent of ISR"),
|
||||
|
|
@ -189,8 +195,7 @@ IFparm VBICmPTable[] = { /* model parameters */
|
|||
IOPR("bvsub", VBIC_MOD_VSUB_MAX, IF_REAL, "maximum voltage C-substrate branch"),
|
||||
IOP("vbefwd", VBIC_MOD_VBEFWD_MAX, IF_REAL, "maximum forward voltage B-E junction"),
|
||||
IOP("vbcfwd", VBIC_MOD_VBCFWD_MAX, IF_REAL, "maximum forward voltage B-C junction"),
|
||||
IOP("vsubfwd", VBIC_MOD_VSUBFWD_MAX, IF_REAL, "maximum forward voltage C-substrate junction"),
|
||||
IOP("selft", VBIC_MOD_SELFT, IF_INTEGER, "0: self-heating off, 1: self-heating on")
|
||||
IOP("vsubfwd", VBIC_MOD_VSUBFWD_MAX, IF_REAL, "maximum forward voltage C-substrate junction")
|
||||
};
|
||||
|
||||
char *VBICnames[] = {
|
||||
|
|
|
|||
|
|
@ -369,7 +369,7 @@ typedef struct sVBICmodel { /* model structure for a vbic */
|
|||
#define VBICmodName gen.GENmodName
|
||||
|
||||
int VBICtype;
|
||||
|
||||
int VBICselft;
|
||||
double VBICtnom;
|
||||
double VBICextCollResist;
|
||||
double VBICintCollResist;
|
||||
|
|
@ -437,9 +437,7 @@ typedef struct sVBICmodel { /* model structure for a vbic */
|
|||
double VBICfNexpA;
|
||||
double VBICfNexpB;
|
||||
double VBICtempExpRE;
|
||||
double VBICtempExpRB;
|
||||
double VBICtempExpRBI;
|
||||
double VBICtempExpRC;
|
||||
double VBICtempExpRCI;
|
||||
double VBICtempExpRS;
|
||||
double VBICtempExpVO;
|
||||
|
|
@ -457,7 +455,6 @@ typedef struct sVBICmodel { /* model structure for a vbic */
|
|||
double VBICtempExpAVC;
|
||||
double VBICthermalResist;
|
||||
double VBICthermalCapacitance;
|
||||
int VBICselft;
|
||||
double VBICpunchThroughVoltageBC;
|
||||
double VBICdeplCapCoeff1;
|
||||
double VBICfixedCapacitanceCS;
|
||||
|
|
@ -490,6 +487,7 @@ typedef struct sVBICmodel { /* model structure for a vbic */
|
|||
double VBICvbefwdMax; /* maximum forward voltage over C-E branch */
|
||||
double VBICvsubfwdMax; /* maximum forward voltage over C-substrate branch */
|
||||
|
||||
unsigned VBICselftGiven : 1;
|
||||
unsigned VBICtnomGiven : 1;
|
||||
unsigned VBICextCollResistGiven : 1;
|
||||
unsigned VBICintCollResistGiven : 1;
|
||||
|
|
@ -576,7 +574,6 @@ typedef struct sVBICmodel { /* model structure for a vbic */
|
|||
unsigned VBICtempExpNFGiven : 1;
|
||||
unsigned VBICtempExpAVCGiven : 1;
|
||||
unsigned VBICthermalResistGiven : 1;
|
||||
unsigned VBICselftGiven : 1;
|
||||
unsigned VBICthermalCapacitanceGiven : 1;
|
||||
unsigned VBICpunchThroughVoltageBCGiven : 1;
|
||||
unsigned VBICdeplCapCoeff1Given : 1;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -225,15 +225,9 @@ VBICmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
|
|||
case VBIC_MOD_XRE:
|
||||
value->rValue = here->VBICtempExpRE;
|
||||
return(OK);
|
||||
case VBIC_MOD_XRB:
|
||||
value->rValue = here->VBICtempExpRB;
|
||||
return(OK);
|
||||
case VBIC_MOD_XRBI:
|
||||
value->rValue = here->VBICtempExpRBI;
|
||||
return(OK);
|
||||
case VBIC_MOD_XRC:
|
||||
value->rValue = here->VBICtempExpRC;
|
||||
return(OK);
|
||||
case VBIC_MOD_XRCI:
|
||||
value->rValue = here->VBICtempExpRCI;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -325,18 +325,10 @@ VBICmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
mods->VBICtempExpRE = value->rValue;
|
||||
mods->VBICtempExpREGiven = TRUE;
|
||||
break;
|
||||
case VBIC_MOD_XRB:
|
||||
mods->VBICtempExpRB = value->rValue;
|
||||
mods->VBICtempExpRBGiven = TRUE;
|
||||
break;
|
||||
case VBIC_MOD_XRBI:
|
||||
mods->VBICtempExpRBI = value->rValue;
|
||||
mods->VBICtempExpRBIGiven = TRUE;
|
||||
break;
|
||||
case VBIC_MOD_XRC:
|
||||
mods->VBICtempExpRC = value->rValue;
|
||||
mods->VBICtempExpRCGiven = TRUE;
|
||||
break;
|
||||
case VBIC_MOD_XRCI:
|
||||
mods->VBICtempExpRCI = value->rValue;
|
||||
mods->VBICtempExpRCIGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -239,15 +239,9 @@ VBICsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
if(!model->VBICtempExpREGiven) {
|
||||
model->VBICtempExpRE = 0.0;
|
||||
}
|
||||
if(!model->VBICtempExpRBGiven) {
|
||||
model->VBICtempExpRB = 0.0;
|
||||
}
|
||||
if(!model->VBICtempExpRBIGiven) {
|
||||
model->VBICtempExpRBI = 0.0;
|
||||
}
|
||||
if(!model->VBICtempExpRCGiven) {
|
||||
model->VBICtempExpRC = 0.0;
|
||||
}
|
||||
if(!model->VBICtempExpRCIGiven) {
|
||||
model->VBICtempExpRCI = 0.0;
|
||||
}
|
||||
|
|
@ -369,19 +363,6 @@ VBICsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
model->VBICrefVersion = 0.0;
|
||||
}
|
||||
|
||||
if(model->VBICtempExpRBGiven && !model->VBICtempExpRBIGiven) {
|
||||
model->VBICtempExpRBI = model->VBICtempExpRB;
|
||||
}
|
||||
if(model->VBICtempExpRBGiven && !model->VBICtempExpRBXGiven) {
|
||||
model->VBICtempExpRBX = model->VBICtempExpRB;
|
||||
}
|
||||
if(model->VBICtempExpRCGiven && !model->VBICtempExpRCIGiven) {
|
||||
model->VBICtempExpRCI = model->VBICtempExpRC;
|
||||
}
|
||||
if(model->VBICtempExpRCGiven && !model->VBICtempExpRCXGiven) {
|
||||
model->VBICtempExpRCX = model->VBICtempExpRC;
|
||||
}
|
||||
|
||||
if(!model->VBICvbeMaxGiven) {
|
||||
model->VBICvbeMax = 1e99;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,114 +42,7 @@ VBICtemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
|
||||
TAMB = here->VBICtemp - CONSTCtoK;
|
||||
|
||||
pnom[0] = model->VBICtnom;
|
||||
pnom[1] = model->VBICextCollResist;
|
||||
pnom[2] = model->VBICintCollResist;
|
||||
pnom[3] = model->VBICepiSatVoltage;
|
||||
pnom[4] = model->VBICepiDoping;
|
||||
pnom[5] = model->VBIChighCurFac;
|
||||
pnom[6] = model->VBICextBaseResist;
|
||||
pnom[7] = model->VBICintBaseResist;
|
||||
pnom[8] = model->VBICemitterResist;
|
||||
pnom[9] = model->VBICsubstrateResist;
|
||||
pnom[10] = model->VBICparBaseResist;
|
||||
pnom[11] = model->VBICsatCur;
|
||||
pnom[12] = model->VBICemissionCoeffF;
|
||||
pnom[13] = model->VBICemissionCoeffR;
|
||||
pnom[14] = model->VBICdeplCapLimitF;
|
||||
pnom[15] = model->VBICextOverlapCapBE;
|
||||
pnom[16] = model->VBICdepletionCapBE;
|
||||
pnom[17] = model->VBICpotentialBE;
|
||||
pnom[18] = model->VBICjunctionExpBE;
|
||||
pnom[19] = model->VBICsmoothCapBE;
|
||||
pnom[20] = model->VBICextOverlapCapBC;
|
||||
pnom[21] = model->VBICdepletionCapBC;
|
||||
pnom[22] = model->VBICepiCharge;
|
||||
pnom[23] = model->VBICextCapBC;
|
||||
pnom[24] = model->VBICpotentialBC;
|
||||
pnom[25] = model->VBICjunctionExpBC;
|
||||
pnom[26] = model->VBICsmoothCapBC;
|
||||
pnom[27] = model->VBICextCapSC;
|
||||
pnom[28] = model->VBICpotentialSC;
|
||||
pnom[29] = model->VBICjunctionExpSC;
|
||||
pnom[30] = model->VBICsmoothCapSC;
|
||||
pnom[31] = model->VBICidealSatCurBE;
|
||||
pnom[32] = model->VBICportionIBEI;
|
||||
pnom[33] = model->VBICidealEmissCoeffBE;
|
||||
pnom[34] = model->VBICnidealSatCurBE;
|
||||
pnom[35] = model->VBICnidealEmissCoeffBE;
|
||||
pnom[36] = model->VBICidealSatCurBC;
|
||||
pnom[37] = model->VBICidealEmissCoeffBC;
|
||||
pnom[38] = model->VBICnidealSatCurBC;
|
||||
pnom[39] = model->VBICnidealEmissCoeffBC;
|
||||
pnom[40] = model->VBICavalanchePar1BC;
|
||||
pnom[41] = model->VBICavalanchePar2BC;
|
||||
pnom[42] = model->VBICparasitSatCur;
|
||||
pnom[43] = model->VBICportionICCP;
|
||||
pnom[44] = model->VBICparasitFwdEmissCoeff;
|
||||
pnom[45] = model->VBICidealParasitSatCurBE;
|
||||
pnom[46] = model->VBICnidealParasitSatCurBE;
|
||||
pnom[47] = model->VBICidealParasitSatCurBC;
|
||||
pnom[48] = model->VBICidealParasitEmissCoeffBC;
|
||||
pnom[49] = model->VBICnidealParasitSatCurBC;
|
||||
pnom[50] = model->VBICnidealParasitEmissCoeffBC;
|
||||
pnom[51] = model->VBICearlyVoltF;
|
||||
pnom[52] = model->VBICearlyVoltR;
|
||||
pnom[53] = model->VBICrollOffF;
|
||||
pnom[54] = model->VBICrollOffR;
|
||||
pnom[55] = model->VBICparRollOff;
|
||||
pnom[56] = model->VBICtransitTimeF;
|
||||
pnom[57] = model->VBICvarTransitTimeF;
|
||||
pnom[58] = model->VBICtransitTimeBiasCoeffF;
|
||||
pnom[59] = model->VBICtransitTimeFVBC;
|
||||
pnom[60] = model->VBICtransitTimeHighCurrentF;
|
||||
pnom[61] = model->VBICtransitTimeR;
|
||||
pnom[62] = model->VBICdelayTimeF;
|
||||
pnom[63] = model->VBICfNcoef;
|
||||
pnom[64] = model->VBICfNexpA;
|
||||
pnom[65] = model->VBICfNexpB;
|
||||
pnom[66] = model->VBICtempExpRE;
|
||||
pnom[67] = model->VBICtempExpRBI;
|
||||
pnom[68] = model->VBICtempExpRCI;
|
||||
pnom[69] = model->VBICtempExpRS;
|
||||
pnom[70] = model->VBICtempExpVO;
|
||||
pnom[71] = model->VBICactivEnergyEA;
|
||||
pnom[72] = model->VBICactivEnergyEAIE;
|
||||
pnom[73] = model->VBICactivEnergyEAIC;
|
||||
pnom[74] = model->VBICactivEnergyEAIS;
|
||||
pnom[75] = model->VBICactivEnergyEANE;
|
||||
pnom[76] = model->VBICactivEnergyEANC;
|
||||
pnom[77] = model->VBICactivEnergyEANS;
|
||||
pnom[78] = model->VBICtempExpIS;
|
||||
pnom[79] = model->VBICtempExpII;
|
||||
pnom[80] = model->VBICtempExpIN;
|
||||
pnom[81] = model->VBICtempExpNF;
|
||||
pnom[82] = model->VBICtempExpAVC;
|
||||
pnom[83] = model->VBICthermalResist;
|
||||
pnom[84] = model->VBICthermalCapacitance;
|
||||
pnom[85] = model->VBICpunchThroughVoltageBC;
|
||||
pnom[86] = model->VBICdeplCapCoeff1;
|
||||
pnom[87] = model->VBICfixedCapacitanceCS;
|
||||
pnom[88] = model->VBICsgpQBselector;
|
||||
pnom[89] = model->VBIChighCurrentBetaRolloff;
|
||||
pnom[90] = model->VBICtempExpIKF;
|
||||
pnom[91] = model->VBICtempExpRCX;
|
||||
pnom[92] = model->VBICtempExpRBX;
|
||||
pnom[93] = model->VBICtempExpRBP;
|
||||
pnom[94] = model->VBICsepISRR;
|
||||
pnom[95] = model->VBICtempExpXISR;
|
||||
pnom[96] = model->VBICdear;
|
||||
pnom[97] = model->VBICeap;
|
||||
pnom[98] = model->VBICvbbe;
|
||||
pnom[99] = model->VBICnbbe;
|
||||
pnom[100] = model->VBICibbe;
|
||||
pnom[101] = model->VBICtvbbe1;
|
||||
pnom[102] = model->VBICtvbbe2;
|
||||
pnom[103] = model->VBICtnbbe;
|
||||
pnom[104] = model->VBICebbe;
|
||||
pnom[105] = model->VBIClocTempDiff;
|
||||
pnom[106] = model->VBICrevVersion;
|
||||
pnom[107] = model->VBICrefVersion;
|
||||
memcpy (&pnom, &model->VBICtnom, 108*8);
|
||||
|
||||
iret = vbic_4T_et_cf_t(p,pnom,&TAMB);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue