Added areab and areac parameters.

This commit is contained in:
pnenzi 2003-10-31 22:11:49 +00:00
parent 1b367de70d
commit b6ff05468c
8 changed files with 37 additions and 10 deletions

View File

@ -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"),

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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,

View File

@ -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;

View File

@ -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;
} }