Browse Source

Added areab and areac parameters.

pre-master-46
pnenzi 23 years ago
parent
commit
b6ff05468c
  1. 4
      src/spicelib/devices/bjt/bjt.c
  2. 6
      src/spicelib/devices/bjt/bjtask.c
  3. 8
      src/spicelib/devices/bjt/bjtdefs.h
  4. 6
      src/spicelib/devices/bjt/bjtdset.c
  5. 4
      src/spicelib/devices/bjt/bjtload.c
  6. 2
      src/spicelib/devices/bjt/bjtnoise.c
  7. 8
      src/spicelib/devices/bjt/bjtparam.c
  8. 9
      src/spicelib/devices/bjt/bjtsetup.c

4
src/spicelib/devices/bjt/bjt.c

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

6
src/spicelib/devices/bjt/bjtask.c

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

8
src/spicelib/devices/bjt/bjtdefs.h

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

6
src/spicelib/devices/bjt/bjtdset.c

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

4
src/spicelib/devices/bjt/bjtload.c

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

2
src/spicelib/devices/bjt/bjtnoise.c

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

8
src/spicelib/devices/bjt/bjtparam.c

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

9
src/spicelib/devices/bjt/bjtsetup.c

@ -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…
Cancel
Save