Browse Source

introduce jfet gate-drain and gate-source junction emission coefficient

pre-master-46
dwarning 2 years ago
parent
commit
7e39c10bee
  1. 1
      src/spicelib/devices/jfet/jfet.c
  2. 3
      src/spicelib/devices/jfet/jfetdefs.h
  3. 2
      src/spicelib/devices/jfet/jfetload.c
  4. 3
      src/spicelib/devices/jfet/jfetmask.c
  5. 4
      src/spicelib/devices/jfet/jfetmpar.c
  6. 3
      src/spicelib/devices/jfet/jfetset.c
  7. 7
      src/spicelib/devices/jfet/jfettemp.c

1
src/spicelib/devices/jfet/jfet.c

@ -62,6 +62,7 @@ IFparm JFETmPTable[] = { /* model parameters */
IOPA("cgd", JFET_MOD_CGD, IF_REAL,"G-D junction cap"),
IOP("pb", JFET_MOD_PB, IF_REAL,"Gate junction potential"),
IOP("is", JFET_MOD_IS, IF_REAL,"Gate junction saturation current"),
IOP("n", JFET_MOD_N, IF_REAL, "Emission Coefficient for gate-drain and gate-source diodes"),
IOP("fc", JFET_MOD_FC, IF_REAL,"Forward bias junction fit parm."),
/* Modification for Sydney University JFET model */
IOP("b", JFET_MOD_B, IF_REAL,"Doping tail parameter"),

3
src/spicelib/devices/jfet/jfetdefs.h

@ -211,6 +211,7 @@ typedef struct sJFETmodel { /* model structure for a jfet */
double JFETcapGD;
double JFETgatePotential;
double JFETgateSatCurrent;
double JFETemissionCoeff;
double JFETdepletionCapCoeff;
double JFETfNcoef;
double JFETfNexp;
@ -242,6 +243,7 @@ typedef struct sJFETmodel { /* model structure for a jfet */
unsigned JFETcapGDGiven : 1;
unsigned JFETgatePotentialGiven : 1;
unsigned JFETgateSatCurrentGiven : 1;
unsigned JFETemissionCoeffGiven: 1;
unsigned JFETdepletionCapCoeffGiven : 1;
/* Modification for Sydney University JFET model */
unsigned JFETbGiven : 1;
@ -290,6 +292,7 @@ enum {
JFET_MOD_CGD,
JFET_MOD_PB,
JFET_MOD_IS,
JFET_MOD_N,
JFET_MOD_FC,
JFET_MOD_NJF,
JFET_MOD_PJF,

2
src/spicelib/devices/jfet/jfetload.c

@ -224,7 +224,7 @@ JFETload(GENmodel *inModel, CKTcircuit *ckt)
*/
vds=vgs-vgd;
vt_temp=here->JFETtemp*CONSTKoverQ;
vt_temp=here->JFETtemp*CONSTKoverQ*model->JFETemissionCoeff;
if (vgs < -3*vt_temp) {
arg=3*vt_temp/(vgs*CONSTe);
arg = arg * arg * arg;

3
src/spicelib/devices/jfet/jfetmask.c

@ -62,6 +62,9 @@ JFETmAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value)
case JFET_MOD_IS:
value->rValue = model->JFETgateSatCurrent;
return(OK);
case JFET_MOD_N:
value->rValue = model->JFETemissionCoeff;
return(OK);
case JFET_MOD_FC:
value->rValue = model->JFETdepletionCapCoeff;
return(OK);

4
src/spicelib/devices/jfet/jfetmpar.c

@ -58,6 +58,10 @@ JFETmParam(int param, IFvalue *value, GENmodel *inModels)
model->JFETgateSatCurrentGiven = TRUE;
model->JFETgateSatCurrent = value->rValue;
break;
case JFET_MOD_N:
model->JFETemissionCoeff = value->rValue;
model->JFETemissionCoeffGiven = TRUE;
break;
case JFET_MOD_FC:
model->JFETdepletionCapCoeffGiven = TRUE;
model->JFETdepletionCapCoeff = value->rValue;

3
src/spicelib/devices/jfet/jfetset.c

@ -59,6 +59,9 @@ JFETsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
if(!model->JFETgateSatCurrentGiven) {
model->JFETgateSatCurrent = 1e-14;
}
if(!model->JFETemissionCoeffGiven) {
model->JFETemissionCoeff = 1;
}
if(!model->JFETdepletionCapCoeffGiven) {
model->JFETdepletionCapCoeff = .5;
}

7
src/spicelib/devices/jfet/jfettemp.c

@ -22,7 +22,7 @@ JFETtemp(GENmodel *inModel, CKTcircuit *ckt)
JFETmodel *model = (JFETmodel*)inModel;
JFETinstance *here;
double xfc;
double vt;
double vt, vtn;
double vtnom;
double kt,kt1;
double arg,arg1;
@ -87,12 +87,13 @@ JFETtemp(GENmodel *inModel, CKTcircuit *ckt)
here->JFETtemp = ckt->CKTtemp + here->JFETdtemp;
}
vt = here->JFETtemp * CONSTKoverQ;
vtn = vt * model->JFETemissionCoeff;
fact2 = here->JFETtemp/REFTEMP;
ratio1 = here->JFETtemp/model->JFETtnom -1;
if (model->JFETxtiGiven) {
here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*model->JFETeg/vt) * pow(ratio1+1,model->JFETxti);
here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*model->JFETeg/vtn) * pow(ratio1+1,model->JFETxti);
} else {
here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*model->JFETeg/vt);
here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*model->JFETeg/vtn);
}
here->JFETtCGS = model->JFETcapGS * cjfact;
here->JFETtCGD = model->JFETcapGD * cjfact;

Loading…
Cancel
Save