add alternative temperature model for certain jfet parameter
This commit is contained in:
parent
b0a790a463
commit
aab54e8a55
|
|
@ -67,10 +67,14 @@ IFparm JFETmPTable[] = { /* model parameters */
|
|||
IOP("b", JFET_MOD_B, IF_REAL,"Doping tail parameter"),
|
||||
/* end Sydney University mod. */
|
||||
IOPU("tnom", JFET_MOD_TNOM, IF_REAL,"parameter measurement temperature"),
|
||||
IOP("tcv", JFET_MOD_TCV, IF_REAL, "Threshold voltage temperature coefficient"),
|
||||
IOP("vtotc", JFET_MOD_VTOTC, IF_REAL, "Threshold voltage temperature coefficient alternative"),
|
||||
IOP("bex", JFET_MOD_BEX, IF_REAL, "Mobility temperature exponent"),
|
||||
IOP("betatce", JFET_MOD_BETATCE, IF_REAL, "Mobility temperature exponent alternative"),
|
||||
IOP("xti", JFET_MOD_XTI, IF_REAL, "Gate junction saturation current temperature exponent"),
|
||||
IOP("eg", JFET_MOD_EG, IF_REAL, "Bandgap voltage"),
|
||||
IOP("kf", JFET_MOD_KF, IF_REAL, "Flicker Noise Coefficient"),
|
||||
IOP("af", JFET_MOD_AF, IF_REAL, "Flicker Noise Exponent"),
|
||||
IOP("tcv", JFET_MOD_TCV, IF_REAL, "Threshold voltage temperature coefficient"),
|
||||
IOP("bex", JFET_MOD_BEX, IF_REAL, "Mobility temperature exponent"),
|
||||
IOP("nlev",JFET_MOD_NLEV, IF_INTEGER, "Noise equation selector"),
|
||||
IOP("gdsnoi", JFET_MOD_GDSNOI, IF_REAL, "Channel noise coefficient")
|
||||
};
|
||||
|
|
|
|||
|
|
@ -207,9 +207,13 @@ typedef struct sJFETmodel { /* model structure for a jfet */
|
|||
double JFETb; /* doping profile parameter */
|
||||
double JFETbFac; /* internal derived doping profile parameter */
|
||||
/* end Sydney University mod */
|
||||
double JFETtnom; /* temperature at which parameters were measured */
|
||||
double JFETtnom; /* temperature at which parameters were measured */
|
||||
double JFETtcv;
|
||||
double JFETvtotc;
|
||||
double JFETbex;
|
||||
double JFETbetatce;
|
||||
double JFETxti;
|
||||
double JFETeg;
|
||||
|
||||
unsigned JFETthresholdGiven : 1;
|
||||
unsigned JFETbetaGiven : 1;
|
||||
|
|
@ -225,12 +229,16 @@ typedef struct sJFETmodel { /* model structure for a jfet */
|
|||
unsigned JFETbGiven : 1;
|
||||
/* end Sydney University mod */
|
||||
unsigned JFETtnomGiven : 1; /* user specified Tnom for model */
|
||||
unsigned JFETtcvGiven : 1;
|
||||
unsigned JFETvtotcGiven : 1;
|
||||
unsigned JFETbexGiven : 1;
|
||||
unsigned JFETbetatceGiven : 1;
|
||||
unsigned JFETxtiGiven : 1;
|
||||
unsigned JFETegGiven : 1;
|
||||
unsigned JFETfNcoefGiven : 1;
|
||||
unsigned JFETfNexpGiven : 1;
|
||||
unsigned JFETnlevGiven : 1;
|
||||
unsigned JFETgdsnoiGiven : 1;
|
||||
unsigned JFETtcvGiven : 1;
|
||||
unsigned JFETbexGiven : 1;
|
||||
|
||||
} JFETmodel;
|
||||
|
||||
|
|
@ -268,11 +276,15 @@ enum {
|
|||
JFET_MOD_NJF,
|
||||
JFET_MOD_PJF,
|
||||
JFET_MOD_TNOM,
|
||||
JFET_MOD_KF,
|
||||
JFET_MOD_AF,
|
||||
JFET_MOD_B, /* Modification for Sydney University JFET model */
|
||||
JFET_MOD_TCV,
|
||||
JFET_MOD_VTOTC,
|
||||
JFET_MOD_BEX,
|
||||
JFET_MOD_BETATCE,
|
||||
JFET_MOD_XTI,
|
||||
JFET_MOD_EG,
|
||||
JFET_MOD_KF,
|
||||
JFET_MOD_AF,
|
||||
JFET_MOD_NLEV,
|
||||
JFET_MOD_GDSNOI,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -71,24 +71,36 @@ JFETmAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value)
|
|||
case JFET_MOD_SOURCECONDUCT:
|
||||
value->rValue = model->JFETsourceConduct;
|
||||
return(OK);
|
||||
case JFET_MOD_KF:
|
||||
value->rValue = model->JFETfNcoef;
|
||||
return(OK);
|
||||
case JFET_MOD_AF:
|
||||
value->rValue = model->JFETfNexp;
|
||||
return(OK);
|
||||
case JFET_MOD_TCV:
|
||||
value->rValue = model->JFETtcv;
|
||||
return(OK);
|
||||
case JFET_MOD_VTOTC:
|
||||
value->rValue = model->JFETvtotc;
|
||||
return(OK);
|
||||
case JFET_MOD_BEX:
|
||||
value->rValue = model->JFETbex;
|
||||
return(OK);
|
||||
case JFET_MOD_BETATCE:
|
||||
value->rValue = model->JFETbetatce;
|
||||
return(OK);
|
||||
case JFET_MOD_XTI:
|
||||
value->rValue = model->JFETxti;
|
||||
return(OK);
|
||||
case JFET_MOD_EG:
|
||||
value->rValue = model->JFETeg;
|
||||
return(OK);
|
||||
case JFET_MOD_TYPE:
|
||||
if (model->JFETtype == NJF)
|
||||
value->sValue = "njf";
|
||||
else
|
||||
value->sValue = "pjf";
|
||||
return(OK);
|
||||
case JFET_MOD_KF:
|
||||
value->rValue = model->JFETfNcoef;
|
||||
return(OK);
|
||||
case JFET_MOD_AF:
|
||||
value->rValue = model->JFETfNexp;
|
||||
return(OK);
|
||||
case JFET_MOD_NLEV:
|
||||
value->iValue = model->JFETnlev;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -72,14 +72,6 @@ JFETmParam(int param, IFvalue *value, GENmodel *inModels)
|
|||
model->JFETtype = PJF;
|
||||
}
|
||||
break;
|
||||
case JFET_MOD_KF:
|
||||
model->JFETfNcoefGiven = TRUE;
|
||||
model->JFETfNcoef = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_AF:
|
||||
model->JFETfNexpGiven = TRUE;
|
||||
model->JFETfNexp = value->rValue;
|
||||
break;
|
||||
/* Modification for Sydney University JFET model */
|
||||
case JFET_MOD_B:
|
||||
model->JFETbGiven = TRUE;
|
||||
|
|
@ -90,10 +82,34 @@ JFETmParam(int param, IFvalue *value, GENmodel *inModels)
|
|||
model->JFETtcvGiven = TRUE;
|
||||
model->JFETtcv = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_VTOTC:
|
||||
model->JFETvtotcGiven = TRUE;
|
||||
model->JFETvtotc = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_BETATCE:
|
||||
model->JFETbetatceGiven = TRUE;
|
||||
model->JFETbetatce = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_BEX:
|
||||
model->JFETbexGiven = TRUE;
|
||||
model->JFETbex = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_XTI:
|
||||
model->JFETxtiGiven = TRUE;
|
||||
model->JFETxti = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_EG:
|
||||
model->JFETegGiven = TRUE;
|
||||
model->JFETeg = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_KF:
|
||||
model->JFETfNcoefGiven = TRUE;
|
||||
model->JFETfNcoef = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_AF:
|
||||
model->JFETfNexpGiven = TRUE;
|
||||
model->JFETfNexp = value->rValue;
|
||||
break;
|
||||
case JFET_MOD_NLEV:
|
||||
model->JFETnlevGiven = TRUE;
|
||||
model->JFETnlev = value->iValue;
|
||||
|
|
|
|||
|
|
@ -62,12 +62,6 @@ JFETsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
if(!model->JFETdepletionCapCoeffGiven) {
|
||||
model->JFETdepletionCapCoeff = .5;
|
||||
}
|
||||
if(!model->JFETfNcoefGiven) {
|
||||
model->JFETfNcoef = 0;
|
||||
}
|
||||
if(!model->JFETfNexpGiven) {
|
||||
model->JFETfNexp = 1;
|
||||
}
|
||||
|
||||
/* Modification for Sydney University JFET model */
|
||||
if(!model->JFETbGiven) {
|
||||
|
|
@ -78,9 +72,27 @@ JFETsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
if(!model->JFETtcvGiven) {
|
||||
model->JFETtcv = 0.0;
|
||||
}
|
||||
if(!model->JFETvtotcGiven) {
|
||||
model->JFETvtotc = 0.0;
|
||||
}
|
||||
if(!model->JFETbexGiven) {
|
||||
model->JFETbex = 0.0;
|
||||
}
|
||||
if(!model->JFETbetatceGiven) {
|
||||
model->JFETbetatce = 0.0;
|
||||
}
|
||||
if(!model->JFETxtiGiven) {
|
||||
model->JFETxti = 3.0;
|
||||
}
|
||||
if(!model->JFETegGiven) {
|
||||
model->JFETeg = 1.11;
|
||||
}
|
||||
if(!model->JFETfNcoefGiven) {
|
||||
model->JFETfNcoef = 0;
|
||||
}
|
||||
if(!model->JFETfNexpGiven) {
|
||||
model->JFETfNexp = 1;
|
||||
}
|
||||
if(!model->JFETnlevGiven) {
|
||||
model->JFETnlev = 2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,7 +89,11 @@ JFETtemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
vt = here->JFETtemp * CONSTKoverQ;
|
||||
fact2 = here->JFETtemp/REFTEMP;
|
||||
ratio1 = here->JFETtemp/model->JFETtnom -1;
|
||||
here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*1.11/vt);
|
||||
if (model->JFETxtiGiven) {
|
||||
here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*model->JFETeg/vt) * pow(ratio1+1,model->JFETxti);
|
||||
} else {
|
||||
here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*model->JFETeg/vt);
|
||||
}
|
||||
here->JFETtCGS = model->JFETcapGS * cjfact;
|
||||
here->JFETtCGD = model->JFETcapGD * cjfact;
|
||||
kt = CONSTboltz*here->JFETtemp;
|
||||
|
|
@ -108,9 +112,16 @@ JFETtemp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
here->JFETf1 = here->JFETtGatePot * (1 - exp((1-.5)*xfc))/(1-.5);
|
||||
here->JFETvcrit = vt * log(vt/(CONSTroot2 * here->JFETtSatCur));
|
||||
|
||||
here->JFETtThreshold = model->JFETthreshold - model->JFETtcv*(here->JFETtemp-model->JFETtnom);
|
||||
here->JFETtBeta = model->JFETbeta * pow(here->JFETtemp/model->JFETtnom,model->JFETbex);
|
||||
|
||||
if (model->JFETvtotcGiven) {
|
||||
here->JFETtThreshold = model->JFETthreshold + model->JFETvtotc*(here->JFETtemp-model->JFETtnom);
|
||||
} else {
|
||||
here->JFETtThreshold = model->JFETthreshold - model->JFETtcv*(here->JFETtemp-model->JFETtnom);
|
||||
}
|
||||
if (model->JFETbetatceGiven) {
|
||||
here->JFETtBeta = model->JFETbeta * pow(1.01,model->JFETbetatce*(here->JFETtemp-model->JFETtnom));
|
||||
} else {
|
||||
here->JFETtBeta = model->JFETbeta * pow(here->JFETtemp/model->JFETtnom,model->JFETbex);
|
||||
}
|
||||
}
|
||||
}
|
||||
return(OK);
|
||||
|
|
|
|||
Loading…
Reference in New Issue