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"),
|
||||
IOPAU("icvbe", BJT_IC_VBE, IF_REAL, "Initial B-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"),
|
||||
IP("ic", BJT_IC, IF_REALVEC, "Initial condition vector"),
|
||||
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:
|
||||
value->rValue = here->BJTarea;
|
||||
return(OK);
|
||||
case BJT_AREAB:
|
||||
value->rValue = here->BJTareab;
|
||||
return(OK);
|
||||
case BJT_AREAC:
|
||||
value->rValue = here->BJTareac;
|
||||
return(OK);
|
||||
case BJT_M:
|
||||
value->rValue = here->BJTm;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ typedef struct sBJTinstance {
|
|||
int BJTcolPrimeNode; /* number of internal collector node of bjt */
|
||||
int BJTbasePrimeNode; /* number of internal base 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 BJTicVBE; /* initial condition voltage B-E*/
|
||||
double BJTicVCE; /* initial condition voltage C-E*/
|
||||
|
|
@ -103,6 +105,8 @@ typedef struct sBJTinstance {
|
|||
unsigned BJTtempGiven :1; /* temperature given for bjt instance*/
|
||||
unsigned BJTdtempGiven :1; /* delta temperature given for bjt instance*/
|
||||
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 BJTicVBEGiven :1; /* flag to indicate VBE 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_DTEMP 8
|
||||
#define BJT_M 9
|
||||
#define BJT_AREAB 10
|
||||
#define BJT_AREAC 11
|
||||
|
||||
/* model parameters */
|
||||
#define BJT_MOD_NPN 101
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ BJTdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
c2=here->BJTtBEleakCur*here->BJTarea * here->BJTm;
|
||||
vte=model->BJTleakBEemissionCoeff*vt;
|
||||
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;
|
||||
xjrb=model->BJTbaseCurrentHalfResist*here->BJTarea * here->BJTm;
|
||||
|
||||
|
|
@ -483,13 +483,13 @@ BJTdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
pe=here->BJTtBEpot;
|
||||
xme=model->BJTjunctionExpBE;
|
||||
cdis=model->BJTbaseFractionBCcap;
|
||||
ctot=here->BJTtBCcap*here->BJTarea * here->BJTm;
|
||||
ctot=here->BJTtBCcap*here->BJTareab * here->BJTm;
|
||||
czbc=ctot*cdis;
|
||||
czbx=ctot-czbc;
|
||||
pc=here->BJTtBCpot;
|
||||
xmc=model->BJTjunctionExpBC;
|
||||
fcpe=here->BJTtDepCap;
|
||||
czcs=model->BJTcapCS*here->BJTarea * here->BJTm;
|
||||
czcs=model->BJTcapCS*here->BJTareac * here->BJTm;
|
||||
ps=model->BJTpotentialSubstrate;
|
||||
xms=model->BJTexponentialSubstrate;
|
||||
xtf=model->BJTtransitTimeBiasCoeffF;
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
c2=here->BJTtBEleakCur*here->BJTarea;
|
||||
vte=model->BJTleakBEemissionCoeff*vt;
|
||||
oikr=model->BJTinvRollOffR/here->BJTarea;
|
||||
c4=here->BJTtBCleakCur*here->BJTarea;
|
||||
c4=here->BJTtBCleakCur*here->BJTareab;
|
||||
vtc=model->BJTleakBCemissionCoeff*vt;
|
||||
td=model->BJTexcessPhaseFactor;
|
||||
xjrb=model->BJTbaseCurrentHalfResist*here->BJTarea;
|
||||
|
|
@ -507,7 +507,7 @@ next1: vtn=vt*model->BJTemissionCoeffF;
|
|||
pc=here->BJTtBCpot;
|
||||
xmc=model->BJTjunctionExpBC;
|
||||
fcpe=here->BJTtDepCap;
|
||||
czcs=model->BJTcapCS*here->BJTarea;
|
||||
czcs=model->BJTcapCS*here->BJTareac;
|
||||
ps=model->BJTpotentialSubstrate;
|
||||
xms=model->BJTexponentialSubstrate;
|
||||
xtf=model->BJTtransitTimeBiasCoeffF;
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ if (!data->namelist) return(E_NOMEM);
|
|||
|
||||
NevalSrc(&noizDens[BJTRBNOIZ],&lnNdens[BJTRBNOIZ],
|
||||
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],
|
||||
ckt,THERMNOISE,inst->BJTemitPrimeNode,inst->BJTemitNode,
|
||||
|
|
|
|||
|
|
@ -29,6 +29,14 @@ BJTparam(int param, IFvalue *value, GENinstance *instPtr, IFvalue *select)
|
|||
here->BJTarea = value->rValue;
|
||||
here->BJTareaGiven = TRUE;
|
||||
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:
|
||||
here->BJTm = value->rValue;
|
||||
here->BJTmGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -150,9 +150,14 @@ BJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
goto matrixpointers;
|
||||
|
||||
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) {
|
||||
here->BJTm = 1.0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue