Added areab and areac parameters.
This commit is contained in:
parent
1b367de70d
commit
b6ff05468c
|
|
@ -23,7 +23,9 @@ IFparm BJTpTable[] = { /* parameters */
|
||||||
IOPU("off", BJT_OFF, IF_FLAG, "Device initially off"),
|
IOPU("off", BJT_OFF, IF_FLAG, "Device initially off"),
|
||||||
IOPAU("icvbe", BJT_IC_VBE, IF_REAL, "Initial B-E voltage"),
|
IOPAU("icvbe", BJT_IC_VBE, IF_REAL, "Initial B-E voltage"),
|
||||||
IOPAU("icvce", BJT_IC_VCE, IF_REAL, "Initial C-E voltage"),
|
IOPAU("icvce", BJT_IC_VCE, IF_REAL, "Initial C-E voltage"),
|
||||||
IOPU("area", BJT_AREA, IF_REAL, "Area factor"),
|
IOPU("area", BJT_AREA, IF_REAL, "(Emitter )Area factor"),
|
||||||
|
IOPU("areab", BJT_AREAB, IF_REAL, "Base area factor"),
|
||||||
|
IOPU("areac", BJT_AREAC, IF_REAL, "Collector area factor"),
|
||||||
IOPU("m", BJT_M, IF_REAL, "Parallel Multiplier"),
|
IOPU("m", BJT_M, IF_REAL, "Parallel Multiplier"),
|
||||||
IP("ic", BJT_IC, IF_REALVEC, "Initial condition vector"),
|
IP("ic", BJT_IC, IF_REALVEC, "Initial condition vector"),
|
||||||
IP("sens_area",BJT_AREA_SENS,IF_FLAG, "flag to request sensitivity WRT area"),
|
IP("sens_area",BJT_AREA_SENS,IF_FLAG, "flag to request sensitivity WRT area"),
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,12 @@ BJTask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue
|
||||||
case BJT_AREA:
|
case BJT_AREA:
|
||||||
value->rValue = here->BJTarea;
|
value->rValue = here->BJTarea;
|
||||||
return(OK);
|
return(OK);
|
||||||
|
case BJT_AREAB:
|
||||||
|
value->rValue = here->BJTareab;
|
||||||
|
return(OK);
|
||||||
|
case BJT_AREAC:
|
||||||
|
value->rValue = here->BJTareac;
|
||||||
|
return(OK);
|
||||||
case BJT_M:
|
case BJT_M:
|
||||||
value->rValue = here->BJTm;
|
value->rValue = here->BJTm;
|
||||||
return(OK);
|
return(OK);
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,9 @@ typedef struct sBJTinstance {
|
||||||
int BJTcolPrimeNode; /* number of internal collector node of bjt */
|
int BJTcolPrimeNode; /* number of internal collector node of bjt */
|
||||||
int BJTbasePrimeNode; /* number of internal base node of bjt */
|
int BJTbasePrimeNode; /* number of internal base node of bjt */
|
||||||
int BJTemitPrimeNode; /* number of internal emitter node of bjt */
|
int BJTemitPrimeNode; /* number of internal emitter node of bjt */
|
||||||
double BJTarea; /* area factor for the bjt */
|
double BJTarea; /* (emitter) area factor for the bjt */
|
||||||
|
double BJTareab; /* base area factor for the bjt */
|
||||||
|
double BJTareac; /* collector area factor for the bjt */
|
||||||
double BJTm; /* parallel multiplier */
|
double BJTm; /* parallel multiplier */
|
||||||
double BJTicVBE; /* initial condition voltage B-E*/
|
double BJTicVBE; /* initial condition voltage B-E*/
|
||||||
double BJTicVCE; /* initial condition voltage C-E*/
|
double BJTicVCE; /* initial condition voltage C-E*/
|
||||||
|
|
@ -103,6 +105,8 @@ typedef struct sBJTinstance {
|
||||||
unsigned BJTtempGiven :1; /* temperature given for bjt instance*/
|
unsigned BJTtempGiven :1; /* temperature given for bjt instance*/
|
||||||
unsigned BJTdtempGiven :1; /* delta temperature given for bjt instance*/
|
unsigned BJTdtempGiven :1; /* delta temperature given for bjt instance*/
|
||||||
unsigned BJTareaGiven :1; /* flag to indicate area was specified */
|
unsigned BJTareaGiven :1; /* flag to indicate area was specified */
|
||||||
|
unsigned BJTareabGiven :1; /* flag to indicate base area was specified */
|
||||||
|
unsigned BJTareacGiven :1; /* flag to indicate collector area was specified */
|
||||||
unsigned BJTmGiven :1; /* flag to indicate m parameter specified */
|
unsigned BJTmGiven :1; /* flag to indicate m parameter specified */
|
||||||
unsigned BJTicVBEGiven :1; /* flag to indicate VBE init. cond. given */
|
unsigned BJTicVBEGiven :1; /* flag to indicate VBE init. cond. given */
|
||||||
unsigned BJTicVCEGiven :1; /* flag to indicate VCE init. cond. given */
|
unsigned BJTicVCEGiven :1; /* flag to indicate VCE init. cond. given */
|
||||||
|
|
@ -409,6 +413,8 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
||||||
#define BJT_TEMP 7
|
#define BJT_TEMP 7
|
||||||
#define BJT_DTEMP 8
|
#define BJT_DTEMP 8
|
||||||
#define BJT_M 9
|
#define BJT_M 9
|
||||||
|
#define BJT_AREAB 10
|
||||||
|
#define BJT_AREAC 11
|
||||||
|
|
||||||
/* model parameters */
|
/* model parameters */
|
||||||
#define BJT_MOD_NPN 101
|
#define BJT_MOD_NPN 101
|
||||||
|
|
|
||||||
|
|
@ -160,7 +160,7 @@ BJTdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
c2=here->BJTtBEleakCur*here->BJTarea * here->BJTm;
|
c2=here->BJTtBEleakCur*here->BJTarea * here->BJTm;
|
||||||
vte=model->BJTleakBEemissionCoeff*vt;
|
vte=model->BJTleakBEemissionCoeff*vt;
|
||||||
oikr=model->BJTinvRollOffR/(here->BJTarea * here->BJTm);
|
oikr=model->BJTinvRollOffR/(here->BJTarea * here->BJTm);
|
||||||
c4=here->BJTtBCleakCur*here->BJTarea * here->BJTm;
|
c4=here->BJTtBCleakCur*here->BJTareab * here->BJTm;
|
||||||
vtc=model->BJTleakBCemissionCoeff*vt;
|
vtc=model->BJTleakBCemissionCoeff*vt;
|
||||||
xjrb=model->BJTbaseCurrentHalfResist*here->BJTarea * here->BJTm;
|
xjrb=model->BJTbaseCurrentHalfResist*here->BJTarea * here->BJTm;
|
||||||
|
|
||||||
|
|
@ -483,13 +483,13 @@ BJTdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
pe=here->BJTtBEpot;
|
pe=here->BJTtBEpot;
|
||||||
xme=model->BJTjunctionExpBE;
|
xme=model->BJTjunctionExpBE;
|
||||||
cdis=model->BJTbaseFractionBCcap;
|
cdis=model->BJTbaseFractionBCcap;
|
||||||
ctot=here->BJTtBCcap*here->BJTarea * here->BJTm;
|
ctot=here->BJTtBCcap*here->BJTareab * here->BJTm;
|
||||||
czbc=ctot*cdis;
|
czbc=ctot*cdis;
|
||||||
czbx=ctot-czbc;
|
czbx=ctot-czbc;
|
||||||
pc=here->BJTtBCpot;
|
pc=here->BJTtBCpot;
|
||||||
xmc=model->BJTjunctionExpBC;
|
xmc=model->BJTjunctionExpBC;
|
||||||
fcpe=here->BJTtDepCap;
|
fcpe=here->BJTtDepCap;
|
||||||
czcs=model->BJTcapCS*here->BJTarea * here->BJTm;
|
czcs=model->BJTcapCS*here->BJTareac * here->BJTm;
|
||||||
ps=model->BJTpotentialSubstrate;
|
ps=model->BJTpotentialSubstrate;
|
||||||
xms=model->BJTexponentialSubstrate;
|
xms=model->BJTexponentialSubstrate;
|
||||||
xtf=model->BJTtransitTimeBiasCoeffF;
|
xtf=model->BJTtransitTimeBiasCoeffF;
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,7 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
c2=here->BJTtBEleakCur*here->BJTarea;
|
c2=here->BJTtBEleakCur*here->BJTarea;
|
||||||
vte=model->BJTleakBEemissionCoeff*vt;
|
vte=model->BJTleakBEemissionCoeff*vt;
|
||||||
oikr=model->BJTinvRollOffR/here->BJTarea;
|
oikr=model->BJTinvRollOffR/here->BJTarea;
|
||||||
c4=here->BJTtBCleakCur*here->BJTarea;
|
c4=here->BJTtBCleakCur*here->BJTareab;
|
||||||
vtc=model->BJTleakBCemissionCoeff*vt;
|
vtc=model->BJTleakBCemissionCoeff*vt;
|
||||||
td=model->BJTexcessPhaseFactor;
|
td=model->BJTexcessPhaseFactor;
|
||||||
xjrb=model->BJTbaseCurrentHalfResist*here->BJTarea;
|
xjrb=model->BJTbaseCurrentHalfResist*here->BJTarea;
|
||||||
|
|
@ -507,7 +507,7 @@ next1: vtn=vt*model->BJTemissionCoeffF;
|
||||||
pc=here->BJTtBCpot;
|
pc=here->BJTtBCpot;
|
||||||
xmc=model->BJTjunctionExpBC;
|
xmc=model->BJTjunctionExpBC;
|
||||||
fcpe=here->BJTtDepCap;
|
fcpe=here->BJTtDepCap;
|
||||||
czcs=model->BJTcapCS*here->BJTarea;
|
czcs=model->BJTcapCS*here->BJTareac;
|
||||||
ps=model->BJTpotentialSubstrate;
|
ps=model->BJTpotentialSubstrate;
|
||||||
xms=model->BJTexponentialSubstrate;
|
xms=model->BJTexponentialSubstrate;
|
||||||
xtf=model->BJTtransitTimeBiasCoeffF;
|
xtf=model->BJTtransitTimeBiasCoeffF;
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ if (!data->namelist) return(E_NOMEM);
|
||||||
|
|
||||||
NevalSrc(&noizDens[BJTRBNOIZ],&lnNdens[BJTRBNOIZ],
|
NevalSrc(&noizDens[BJTRBNOIZ],&lnNdens[BJTRBNOIZ],
|
||||||
ckt,THERMNOISE,inst->BJTbasePrimeNode,inst->BJTbaseNode,
|
ckt,THERMNOISE,inst->BJTbasePrimeNode,inst->BJTbaseNode,
|
||||||
*(ckt->CKTstate0 + inst->BJTgx) * here->BJTm);
|
*(ckt->CKTstate0 + inst->BJTgx) * inst->BJTm);
|
||||||
|
|
||||||
NevalSrc(&noizDens[BJT_RE_NOISE],&lnNdens[BJT_RE_NOISE],
|
NevalSrc(&noizDens[BJT_RE_NOISE],&lnNdens[BJT_RE_NOISE],
|
||||||
ckt,THERMNOISE,inst->BJTemitPrimeNode,inst->BJTemitNode,
|
ckt,THERMNOISE,inst->BJTemitPrimeNode,inst->BJTemitNode,
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,14 @@ BJTparam(int param, IFvalue *value, GENinstance *instPtr, IFvalue *select)
|
||||||
here->BJTarea = value->rValue;
|
here->BJTarea = value->rValue;
|
||||||
here->BJTareaGiven = TRUE;
|
here->BJTareaGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
|
case BJT_AREAB:
|
||||||
|
here->BJTareab = value->rValue;
|
||||||
|
here->BJTareabGiven = TRUE;
|
||||||
|
break;
|
||||||
|
case BJT_AREAC:
|
||||||
|
here->BJTareac = value->rValue;
|
||||||
|
here->BJTareacGiven = TRUE;
|
||||||
|
break;
|
||||||
case BJT_M:
|
case BJT_M:
|
||||||
here->BJTm = value->rValue;
|
here->BJTm = value->rValue;
|
||||||
here->BJTmGiven = TRUE;
|
here->BJTmGiven = TRUE;
|
||||||
|
|
|
||||||
|
|
@ -150,9 +150,14 @@ BJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
goto matrixpointers;
|
goto matrixpointers;
|
||||||
|
|
||||||
if(!here->BJTareaGiven) {
|
if(!here->BJTareaGiven) {
|
||||||
here->BJTarea = 1;
|
here->BJTarea = 1.0;
|
||||||
|
}
|
||||||
|
if(!here->BJTareabGiven) {
|
||||||
|
here->BJTareab = here->BJTarea;
|
||||||
|
}
|
||||||
|
if(!here->BJTareacGiven) {
|
||||||
|
here->BJTareac = here->BJTarea;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!here->BJTmGiven) {
|
if(!here->BJTmGiven) {
|
||||||
here->BJTm = 1.0;
|
here->BJTm = 1.0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue