part of temperature level=3 model
This commit is contained in:
parent
67132108ad
commit
5ca213b481
|
|
@ -206,7 +206,13 @@ IFparm BJTmPTable[] = { /* model parameters */
|
|||
IOP("tmjs2",BJT_MOD_TMJS2, IF_REAL, "MJS 2. temperature coefficient"),
|
||||
IOP("tns1", BJT_MOD_TNS1, IF_REAL, "NS 1. temperature coefficient"),
|
||||
IOP("tns2", BJT_MOD_TNS2, IF_REAL, "NS 2. temperature coefficient"),
|
||||
IOP("nkf", BJT_MOD_NKF, IF_REAL, "NKF High current beta rolloff exponent")
|
||||
IOP("nkf", BJT_MOD_NKF, IF_REAL, "NKF High current beta rolloff exponent"),
|
||||
IOP("tis1", BJT_MOD_TIS1, IF_REAL, "IS 1. temperature coefficient"),
|
||||
IOP("tis2", BJT_MOD_TIS2, IF_REAL, "IS 2. temperature coefficient"),
|
||||
IOP("tise1", BJT_MOD_TISE1, IF_REAL, "ISE 1. temperature coefficient"),
|
||||
IOP("tise2", BJT_MOD_TISE2, IF_REAL, "ISE 2. temperature coefficient"),
|
||||
IOP("tisc1", BJT_MOD_TISC1, IF_REAL, "ISC 1. temperature coefficient"),
|
||||
IOP("tisc2", BJT_MOD_TISC2, IF_REAL, "ISC 2. temperature coefficient")
|
||||
};
|
||||
|
||||
char *BJTnames[] = {
|
||||
|
|
|
|||
|
|
@ -443,6 +443,12 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
|||
double BJTf3;
|
||||
double BJTf6;
|
||||
double BJTf7;
|
||||
double BJTtis1;
|
||||
double BJTtis2;
|
||||
double BJTtise1;
|
||||
double BJTtise2;
|
||||
double BJTtisc1;
|
||||
double BJTtisc2;
|
||||
|
||||
unsigned BJTsubsGiven : 1;
|
||||
unsigned BJTtnomGiven : 1;
|
||||
|
|
@ -543,6 +549,12 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
|||
unsigned BJTtns1Given : 1;
|
||||
unsigned BJTtns2Given : 1;
|
||||
unsigned BJTnkfGiven : 1;
|
||||
unsigned BJTtis1Given : 1;
|
||||
unsigned BJTtis2Given : 1;
|
||||
unsigned BJTtise1Given : 1;
|
||||
unsigned BJTtise2Given : 1;
|
||||
unsigned BJTtisc1Given : 1;
|
||||
unsigned BJTtisc2Given : 1;
|
||||
} BJTmodel;
|
||||
|
||||
#ifndef NPN
|
||||
|
|
@ -673,7 +685,13 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
|||
#define BJT_MOD_TNS1 198
|
||||
#define BJT_MOD_TNS2 199
|
||||
#define BJT_MOD_SUBS 200
|
||||
#define BJT_MOD_NKF 100
|
||||
#define BJT_MOD_NKF 201
|
||||
#define BJT_MOD_TIS1 202
|
||||
#define BJT_MOD_TIS2 203
|
||||
#define BJT_MOD_TISE1 204
|
||||
#define BJT_MOD_TISE2 205
|
||||
#define BJT_MOD_TISC1 206
|
||||
#define BJT_MOD_TISC2 207
|
||||
|
||||
/* device questions */
|
||||
#define BJT_QUEST_FT 201
|
||||
|
|
|
|||
|
|
@ -360,6 +360,24 @@ BJTmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
|
|||
case BJT_MOD_NKF:
|
||||
value->rValue = here->BJTnkf;
|
||||
return(OK);
|
||||
case BJT_MOD_TIS1:
|
||||
value->rValue = here->BJTtis1;
|
||||
return(OK);
|
||||
case BJT_MOD_TIS2:
|
||||
value->rValue = here->BJTtis2;
|
||||
return(OK);
|
||||
case BJT_MOD_TISE1:
|
||||
value->rValue = here->BJTtise1;
|
||||
return(OK);
|
||||
case BJT_MOD_TISE2:
|
||||
value->rValue = here->BJTtise2;
|
||||
return(OK);
|
||||
case BJT_MOD_TISC1:
|
||||
value->rValue = here->BJTtisc1;
|
||||
return(OK);
|
||||
case BJT_MOD_TISC2:
|
||||
value->rValue = here->BJTtisc2;
|
||||
return(OK);
|
||||
default:
|
||||
return(E_BADPARM);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -430,6 +430,30 @@ BJTmParam(int param, IFvalue *value, GENmodel *inModel)
|
|||
mods->BJTnkf = value->rValue;
|
||||
mods->BJTnkfGiven = TRUE;
|
||||
break;
|
||||
case BJT_MOD_TIS1:
|
||||
mods->BJTtis1 = value->rValue;
|
||||
mods->BJTtis1Given = TRUE;
|
||||
break;
|
||||
case BJT_MOD_TIS2:
|
||||
mods->BJTtis2 = value->rValue;
|
||||
mods->BJTtis2Given = TRUE;
|
||||
break;
|
||||
case BJT_MOD_TISE1:
|
||||
mods->BJTtise1 = value->rValue;
|
||||
mods->BJTtise1Given = TRUE;
|
||||
break;
|
||||
case BJT_MOD_TISE2:
|
||||
mods->BJTtise2 = value->rValue;
|
||||
mods->BJTtise2Given = TRUE;
|
||||
break;
|
||||
case BJT_MOD_TISC1:
|
||||
mods->BJTtisc1 = value->rValue;
|
||||
mods->BJTtisc1Given = TRUE;
|
||||
break;
|
||||
case BJT_MOD_TISC2:
|
||||
mods->BJTtisc2 = value->rValue;
|
||||
mods->BJTtisc2Given = TRUE;
|
||||
break;
|
||||
default:
|
||||
return(E_BADPARM);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -304,6 +304,24 @@ BJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
model->BJTnkf = 1.0;
|
||||
}
|
||||
}
|
||||
if(!model->BJTtis1Given) {
|
||||
model->BJTtis1 = 0.0;
|
||||
}
|
||||
if(!model->BJTtis2Given) {
|
||||
model->BJTtis2 = 0.0;
|
||||
}
|
||||
if(!model->BJTtise1Given) {
|
||||
model->BJTtise1 = 0.0;
|
||||
}
|
||||
if(!model->BJTtise2Given) {
|
||||
model->BJTtise2 = 0.0;
|
||||
}
|
||||
if(!model->BJTtisc1Given) {
|
||||
model->BJTtisc1 = 0.0;
|
||||
}
|
||||
if(!model->BJTtisc2Given) {
|
||||
model->BJTtisc2 = 0.0;
|
||||
}
|
||||
|
||||
/*
|
||||
* COMPATABILITY WARNING!
|
||||
|
|
|
|||
|
|
@ -156,21 +156,25 @@ BJTtemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
here->BJTtjunctionExpSub = model->BJTexponentialSubstrate * (1+model->BJTtmjs1*dt+model->BJTtmjs2*dt*dt);
|
||||
here->BJTtemissionCoeffS = model->BJTemissionCoeffS * (1+model->BJTtns1*dt+model->BJTtns2*dt*dt);
|
||||
|
||||
vt = here->BJTtemp * CONSTKoverQ;
|
||||
fact2 = here->BJTtemp/REFTEMP;
|
||||
egfet = 1.16-(7.02e-4*here->BJTtemp*here->BJTtemp)/
|
||||
(here->BJTtemp+1108);
|
||||
arg = -egfet/(2*CONSTboltz*here->BJTtemp)+
|
||||
1.1150877/(CONSTboltz*(REFTEMP+REFTEMP));
|
||||
pbfact = -2*vt*(1.5*log(fact2)+CHARGE*arg);
|
||||
if ((model->BJTtlev == 0) || (model->BJTtlev == 1)) {
|
||||
vt = here->BJTtemp * CONSTKoverQ;
|
||||
fact2 = here->BJTtemp/REFTEMP;
|
||||
egfet = 1.16-(7.02e-4*here->BJTtemp*here->BJTtemp)/
|
||||
(here->BJTtemp+1108);
|
||||
arg = -egfet/(2*CONSTboltz*here->BJTtemp)+
|
||||
1.1150877/(CONSTboltz*(REFTEMP+REFTEMP));
|
||||
pbfact = -2*vt*(1.5*log(fact2)+CHARGE*arg);
|
||||
|
||||
ratlog = log(here->BJTtemp/model->BJTtnom);
|
||||
ratio1 = here->BJTtemp/model->BJTtnom -1;
|
||||
factlog = ratio1 * model->BJTenergyGap/vt +
|
||||
model->BJTtempExpIS*ratlog;
|
||||
factor = exp(factlog);
|
||||
here->BJTtSatCur = model->BJTsatCur * factor;
|
||||
here->BJTtSubSatCur = model->BJTsubSatCur * factor;
|
||||
ratlog = log(here->BJTtemp/model->BJTtnom);
|
||||
ratio1 = here->BJTtemp/model->BJTtnom -1;
|
||||
factlog = ratio1 * model->BJTenergyGap/vt +
|
||||
model->BJTtempExpIS*ratlog;
|
||||
factor = exp(factlog);
|
||||
here->BJTtSatCur = model->BJTsatCur * factor;
|
||||
here->BJTtSubSatCur = model->BJTsubSatCur * factor;
|
||||
} else if (model->BJTtlev == 3) {
|
||||
here->BJTtSatCur = pow(model->BJTsatCur,(1+model->BJTtis1*dt+model->BJTtis2*dt*dt));
|
||||
}
|
||||
|
||||
if (model->BJTtlev == 0) {
|
||||
bfactor = exp(ratlog*model->BJTbetaExp);
|
||||
|
|
@ -186,10 +190,15 @@ BJTtemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
else
|
||||
here->BJTtBetaR = model->BJTbetaR * bfactor;
|
||||
|
||||
here->BJTtBEleakCur = model->BJTleakBEcurrent *
|
||||
exp(factlog/model->BJTleakBEemissionCoeff)/bfactor;
|
||||
here->BJTtBCleakCur = model->BJTleakBCcurrent *
|
||||
exp(factlog/model->BJTleakBCemissionCoeff)/bfactor;
|
||||
if ((model->BJTtlev == 0) || (model->BJTtlev == 1)) {
|
||||
here->BJTtBEleakCur = model->BJTleakBEcurrent *
|
||||
exp(factlog/model->BJTleakBEemissionCoeff)/bfactor;
|
||||
here->BJTtBCleakCur = model->BJTleakBCcurrent *
|
||||
exp(factlog/model->BJTleakBCemissionCoeff)/bfactor;
|
||||
} else if (model->BJTtlev == 3) {
|
||||
here->BJTtBEleakCur = pow(model->BJTleakBEcurrent,(1+model->BJTtise1*dt+model->BJTtise2*dt*dt));
|
||||
here->BJTtBCleakCur = pow(model->BJTleakBCcurrent,(1+model->BJTtisc1*dt+model->BJTtisc2*dt*dt));
|
||||
}
|
||||
|
||||
if (model->BJTtlevc == 0) {
|
||||
pbo = (model->BJTpotentialBE-pbfact)/fact1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue