Completed "m" support and fixed some bug introduced in the previous commit.
This commit is contained in:
parent
ea26a7f6ff
commit
e936ee783c
|
|
@ -19,7 +19,7 @@ IFparm BJT2pTable[] = { /* parameters */
|
|||
IOPAU("icvbe", BJT2_IC_VBE, IF_REAL, "Initial B-E voltage"),
|
||||
IOPAU("icvce", BJT2_IC_VCE, IF_REAL, "Initial C-E voltage"),
|
||||
IOPU("area", BJT2_AREA, IF_REAL, "Area factor"),
|
||||
IOPU("m", BJT_M, IF_REAL, "Parallel Multiplier"),
|
||||
IOPU("m", BJT2_M, IF_REAL, "Parallel Multiplier"),
|
||||
IP("ic", BJT2_IC, IF_REALVEC, "Initial condition vector"),
|
||||
IP("sens_area",BJT2_AREA_SENS,IF_FLAG, "flag to request sensitivity WRT area"),
|
||||
OPU("colnode", BJT2_QUEST_COLNODE, IF_INTEGER, "Number of collector node"),
|
||||
|
|
@ -70,7 +70,7 @@ IFparm BJT2pTable[] = { /* parameters */
|
|||
OPU("sens_ph", BJT2_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"),
|
||||
OPU("sens_cplx", BJT2_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity"),
|
||||
IOPU("temp", BJT2_TEMP, IF_REAL, "instance temperature"),
|
||||
IOPU("dtemp", BJT_DTEMP, IF_REAL, "instance temperature delta from circuit")
|
||||
IOPU("dtemp", BJT2_DTEMP, IF_REAL, "instance temperature delta from circuit")
|
||||
};
|
||||
|
||||
IFparm BJT2mPTable[] = { /* model parameters */
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
|
|||
return(OK);
|
||||
case BJT2_QUEST_CC:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2cc);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CB:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2cb);
|
||||
|
|
@ -98,60 +99,79 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
|
|||
value->rValue -= *(ckt->CKTstate0 + here->BJT2cqsub);
|
||||
}
|
||||
};
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GPI:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2gpi);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GMU:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2gmu);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GM:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2gm);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GO:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2go);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_QBE:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2qbe);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CQBE:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2cqbe);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_QBC:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2qbc);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CQBC:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2cqbc);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_QSUB:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2qsub);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CQSUB:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2cqsub);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_QBX:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2qbx);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CQBX:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2cqbx);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GX:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2gx);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CEXBC:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2cexbc);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GEQCB:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2geqcb);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GCSUB:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2gcsub);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GDSUB:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2gdsub);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_GEQBX:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BJT2geqbx);
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_SENS_DC:
|
||||
if(ckt->CKTsenInfo){
|
||||
|
|
@ -229,6 +249,7 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
|
|||
(*(ckt->CKTstate0 + here->BJT2cqsub) +
|
||||
*(ckt->CKTstate0 + here->BJT2cdsub)));
|
||||
}
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CE :
|
||||
if (ckt->CKTcurrentAnalysis & DOING_AC) {
|
||||
|
|
@ -247,6 +268,7 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
|
|||
}
|
||||
}
|
||||
}
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_POWER :
|
||||
if (ckt->CKTcurrentAnalysis & DOING_AC) {
|
||||
|
|
@ -274,18 +296,23 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
|
|||
*(ckt->CKTrhsOld + here->BJT2substNode));
|
||||
}
|
||||
}
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CPI:
|
||||
value->rValue = here->BJT2capbe;
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CMU:
|
||||
value->rValue = here->BJT2capbc;
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CBX:
|
||||
value->rValue = here->BJT2capbx;
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
case BJT2_QUEST_CSUB:
|
||||
value->rValue = here->BJT2capsub;
|
||||
value->rValue *= here->BJT2m;
|
||||
return(OK);
|
||||
default:
|
||||
return(E_BADPARM);
|
||||
|
|
|
|||
|
|
@ -37,11 +37,11 @@ typedef struct sBJT2instance {
|
|||
* or collector prime depending on whether *
|
||||
* the device is VERTICAL or LATERAL */
|
||||
double BJT2area; /* area factor for the bjt2 */
|
||||
double BJTm; /* parallel multiplier */
|
||||
double BJT2m; /* parallel multiplier */
|
||||
double BJT2icVBE; /* initial condition voltage B-E*/
|
||||
double BJT2icVCE; /* initial condition voltage C-E*/
|
||||
double BJT2temp; /* instance temperature */
|
||||
double BJTdtemp; /* instance delta temperature from circuit */
|
||||
double BJT2dtemp; /* instance delta temperature from circuit */
|
||||
double BJT2tSatCur; /* temperature adjusted saturation current */
|
||||
double BJT2tSubSatCur; /* temperature adjusted subst. saturation current */
|
||||
double BJT2tEmitterConduct; /* emitter conductance */
|
||||
|
|
|
|||
|
|
@ -155,16 +155,16 @@ for( ; model != NULL; model = model->BJT2nextModel ) {
|
|||
/*
|
||||
* dc model paramters
|
||||
*/
|
||||
csat=here->BJT2tSatCur*here->BJT2area;
|
||||
rbpr=model->BJT2minBaseResist/here->BJT2area;
|
||||
rbpi=model->BJT2baseResist/here->BJT2area-rbpr;
|
||||
oik=model->BJT2invRollOffF/here->BJT2area;
|
||||
c2=here->BJT2tBEleakCur*here->BJT2area;
|
||||
csat=here->BJT2tSatCur*here->BJT2area * here->BJT2m;
|
||||
rbpr=model->BJT2minBaseResist/(here->BJT2area * here->BJT2m);
|
||||
rbpi=model->BJT2baseResist/(here->BJT2area * here->BJT2m) - rbpr;
|
||||
oik=model->BJT2invRollOffF/(here->BJT2area * here->BJT2m);
|
||||
c2=here->BJT2tBEleakCur*here->BJT2area * here->BJT2m;
|
||||
vte=model->BJT2leakBEemissionCoeff*vt;
|
||||
oikr=model->BJT2invRollOffR/here->BJT2area;
|
||||
c4=here->BJT2tBCleakCur*here->BJT2area;
|
||||
oikr=model->BJT2invRollOffR/(here->BJT2area * here->BJT2m);
|
||||
c4=here->BJT2tBCleakCur*here->BJT2area * here->BJT2m;
|
||||
vtc=model->BJT2leakBCemissionCoeff*vt;
|
||||
xjrb=model->BJT2baseCurrentHalfResist*here->BJT2area;
|
||||
xjrb=model->BJT2baseCurrentHalfResist*here->BJT2area * here->BJT2m;
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -481,22 +481,22 @@ d_ibb.d3_r3 = 6.0*gbb3;
|
|||
*/
|
||||
tf=model->BJT2transitTimeF;
|
||||
tr=model->BJT2transitTimeR;
|
||||
czbe=here->BJT2tBEcap*here->BJT2area;
|
||||
czbe=here->BJT2tBEcap*here->BJT2area * here->BJT2m;
|
||||
pe=here->BJT2tBEpot;
|
||||
xme=model->BJT2junctionExpBE;
|
||||
cdis=model->BJT2baseFractionBCcap;
|
||||
ctot=here->BJT2tBCcap*here->BJT2area;
|
||||
ctot=here->BJT2tBCcap*here->BJT2area * here->BJT2m;
|
||||
czbc=ctot*cdis;
|
||||
czbx=ctot-czbc;
|
||||
pc=here->BJT2tBCpot;
|
||||
xmc=model->BJT2junctionExpBC;
|
||||
fcpe=here->BJT2tDepCap;
|
||||
czcs=model->BJT2capSub*here->BJT2area; /* PN */
|
||||
czcs=model->BJT2capSub*here->BJT2area * here->BJT2m; /* PN */
|
||||
ps=model->BJT2potentialSubstrate;
|
||||
xms=model->BJT2exponentialSubstrate;
|
||||
xtf=model->BJT2transitTimeBiasCoeffF;
|
||||
ovtf=model->BJT2transitTimeVBCFactor;
|
||||
xjtf=model->BJT2transitTimeHighCurrentF*here->BJT2area;
|
||||
xjtf=model->BJT2transitTimeHighCurrentF*here->BJT2area * here->BJT2m;
|
||||
if(tf != 0 && vbe >0) {
|
||||
EqualDeriv(&d_cbe, &d_p);
|
||||
d_cbe.value = cbe;
|
||||
|
|
|
|||
|
|
@ -134,6 +134,8 @@ BJT2load(GENmodel *inModel, CKTcircuit *ckt)
|
|||
int ichk1;
|
||||
int error;
|
||||
int SenCond=0;
|
||||
double m;
|
||||
|
||||
/* loop through all the models */
|
||||
for( ; model != NULL; model = model->BJT2nextModel ) {
|
||||
|
||||
|
|
@ -738,6 +740,7 @@ next2:
|
|||
|
||||
if(SenCond)continue;
|
||||
load:
|
||||
m = here->BJT2m;
|
||||
/*
|
||||
* load current excitation vector
|
||||
*/
|
||||
|
|
@ -754,42 +757,42 @@ load:
|
|||
(go - geqcb));
|
||||
ceqbc=model->BJT2type * (-cc + vbe * (gm + go) - vbc * (gmu + go));
|
||||
|
||||
*(ckt->CKTrhs + here->BJT2baseNode) += (-ceqbx);
|
||||
*(ckt->CKTrhs + here->BJT2baseNode) += m * (-ceqbx);
|
||||
*(ckt->CKTrhs + here->BJT2colPrimeNode) +=
|
||||
(ceqbx+ceqbc);
|
||||
*(ckt->CKTrhs + here->BJT2substConNode) += ceqsub;
|
||||
m * (ceqbx+ceqbc);
|
||||
*(ckt->CKTrhs + here->BJT2substConNode) += m * ceqsub;
|
||||
*(ckt->CKTrhs + here->BJT2basePrimeNode) +=
|
||||
(-ceqbe-ceqbc);
|
||||
*(ckt->CKTrhs + here->BJT2emitPrimeNode) += (ceqbe);
|
||||
*(ckt->CKTrhs + here->BJT2substNode) += (-ceqsub);
|
||||
m * (-ceqbe-ceqbc);
|
||||
*(ckt->CKTrhs + here->BJT2emitPrimeNode) += m * (ceqbe);
|
||||
*(ckt->CKTrhs + here->BJT2substNode) += m * (-ceqsub);
|
||||
|
||||
/*
|
||||
* load y matrix
|
||||
*/
|
||||
*(here->BJT2colColPtr) += (gcpr);
|
||||
*(here->BJT2baseBasePtr) += (gx+geqbx);
|
||||
*(here->BJT2emitEmitPtr) += (gepr);
|
||||
*(here->BJT2colPrimeColPrimePtr) += (gmu+go+gcpr+geqbx);
|
||||
*(here->BJT2substConSubstConPtr) += (geqsub);
|
||||
*(here->BJT2basePrimeBasePrimePtr) += (gx +gpi+gmu+geqcb);
|
||||
*(here->BJT2emitPrimeEmitPrimePtr) += (gpi+gepr+gm+go);
|
||||
*(here->BJT2colColPrimePtr) += (-gcpr);
|
||||
*(here->BJT2baseBasePrimePtr) += (-gx);
|
||||
*(here->BJT2emitEmitPrimePtr) += (-gepr);
|
||||
*(here->BJT2colPrimeColPtr) += (-gcpr);
|
||||
*(here->BJT2colPrimeBasePrimePtr) += (-gmu+gm);
|
||||
*(here->BJT2colPrimeEmitPrimePtr) += (-gm-go);
|
||||
*(here->BJT2basePrimeBasePtr) += (-gx);
|
||||
*(here->BJT2basePrimeColPrimePtr) += (-gmu-geqcb);
|
||||
*(here->BJT2basePrimeEmitPrimePtr) += (-gpi);
|
||||
*(here->BJT2emitPrimeEmitPtr) += (-gepr);
|
||||
*(here->BJT2emitPrimeColPrimePtr) += (-go+geqcb);
|
||||
*(here->BJT2emitPrimeBasePrimePtr) += (-gpi-gm-geqcb);
|
||||
*(here->BJT2substSubstPtr) += (geqsub);
|
||||
*(here->BJT2substConSubstPtr) += (-geqsub);
|
||||
*(here->BJT2substSubstConPtr) += (-geqsub);
|
||||
*(here->BJT2baseColPrimePtr) += (-geqbx);
|
||||
*(here->BJT2colPrimeBasePtr) += (-geqbx);
|
||||
*(here->BJT2colColPtr) += m * (gcpr);
|
||||
*(here->BJT2baseBasePtr) += m * (gx+geqbx);
|
||||
*(here->BJT2emitEmitPtr) += m * (gepr);
|
||||
*(here->BJT2colPrimeColPrimePtr) += m * (gmu+go+gcpr+geqbx);
|
||||
*(here->BJT2substConSubstConPtr) += m * (geqsub);
|
||||
*(here->BJT2basePrimeBasePrimePtr) += m * (gx +gpi+gmu+geqcb);
|
||||
*(here->BJT2emitPrimeEmitPrimePtr) += m * (gpi+gepr+gm+go);
|
||||
*(here->BJT2colColPrimePtr) += m * (-gcpr);
|
||||
*(here->BJT2baseBasePrimePtr) += m * (-gx);
|
||||
*(here->BJT2emitEmitPrimePtr) += m * (-gepr);
|
||||
*(here->BJT2colPrimeColPtr) += m * (-gcpr);
|
||||
*(here->BJT2colPrimeBasePrimePtr) += m * (-gmu+gm);
|
||||
*(here->BJT2colPrimeEmitPrimePtr) += m * (-gm-go);
|
||||
*(here->BJT2basePrimeBasePtr) += m * (-gx);
|
||||
*(here->BJT2basePrimeColPrimePtr) += m * (-gmu-geqcb);
|
||||
*(here->BJT2basePrimeEmitPrimePtr) += m * (-gpi);
|
||||
*(here->BJT2emitPrimeEmitPtr) += m * (-gepr);
|
||||
*(here->BJT2emitPrimeColPrimePtr) += m * (-go+geqcb);
|
||||
*(here->BJT2emitPrimeBasePrimePtr) += m * (-gpi-gm-geqcb);
|
||||
*(here->BJT2substSubstPtr) += m * (geqsub);
|
||||
*(here->BJT2substConSubstPtr) += m * (-geqsub);
|
||||
*(here->BJT2substSubstConPtr) += m * (-geqsub);
|
||||
*(here->BJT2baseColPrimePtr) += m * (-geqbx);
|
||||
*(here->BJT2colPrimeBasePtr) += m * (-geqbx);
|
||||
}
|
||||
}
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -117,28 +117,28 @@ if (!data->namelist) return(E_NOMEM);
|
|||
case N_DENS:
|
||||
NevalSrc(&noizDens[BJT2RCNOIZ],&lnNdens[BJT2RCNOIZ],
|
||||
ckt,THERMNOISE,inst->BJT2colPrimeNode,inst->BJT2colNode,
|
||||
model->BJT2collectorConduct * inst->BJT2area);
|
||||
model->BJT2collectorConduct * inst->BJT2area * inst->BJT2m);
|
||||
|
||||
NevalSrc(&noizDens[BJT2RBNOIZ],&lnNdens[BJT2RBNOIZ],
|
||||
ckt,THERMNOISE,inst->BJT2basePrimeNode,inst->BJT2baseNode,
|
||||
*(ckt->CKTstate0 + inst->BJT2gx));
|
||||
*(ckt->CKTstate0 + inst->BJT2gx) * inst->BJT2m);
|
||||
|
||||
NevalSrc(&noizDens[BJT2_RE_NOISE],&lnNdens[BJT2_RE_NOISE],
|
||||
ckt,THERMNOISE,inst->BJT2emitPrimeNode,inst->BJT2emitNode,
|
||||
model->BJT2emitterConduct * inst->BJT2area);
|
||||
model->BJT2emitterConduct * inst->BJT2area * inst->BJT2m);
|
||||
|
||||
NevalSrc(&noizDens[BJT2ICNOIZ],&lnNdens[BJT2ICNOIZ],
|
||||
ckt,SHOTNOISE,inst->BJT2colPrimeNode, inst->BJT2emitPrimeNode,
|
||||
*(ckt->CKTstate0 + inst->BJT2cc));
|
||||
*(ckt->CKTstate0 + inst->BJT2cc) * inst->BJT2m);
|
||||
|
||||
NevalSrc(&noizDens[BJT2IBNOIZ],&lnNdens[BJT2IBNOIZ],
|
||||
ckt,SHOTNOISE,inst->BJT2basePrimeNode, inst->BJT2emitPrimeNode,
|
||||
*(ckt->CKTstate0 + inst->BJT2cb));
|
||||
*(ckt->CKTstate0 + inst->BJT2cb) * inst->BJT2m);
|
||||
|
||||
NevalSrc(&noizDens[BJT2FLNOIZ],(double*)NULL,ckt,
|
||||
N_GAIN,inst->BJT2basePrimeNode, inst->BJT2emitPrimeNode,
|
||||
(double)0.0);
|
||||
noizDens[BJT2FLNOIZ] *= model->BJT2fNcoef *
|
||||
noizDens[BJT2FLNOIZ] *= inst->BJT2m * model->BJT2fNcoef *
|
||||
exp(model->BJT2fNexp *
|
||||
log(MAX(fabs(*(ckt->CKTstate0 + inst->BJT2cb)),N_MINLOG))) /
|
||||
data->freq;
|
||||
|
|
|
|||
|
|
@ -32,11 +32,14 @@ BJT2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
|||
double xcbx;
|
||||
double xccs;
|
||||
double xcmcb;
|
||||
double m;
|
||||
|
||||
for( ; model != NULL; model = model->BJT2nextModel) {
|
||||
for( here = model->BJT2instances; here!= NULL;
|
||||
here = here->BJT2nextInstance) {
|
||||
if (here->BJT2owner != ARCHme) continue;
|
||||
|
||||
m = here->BJT2m;
|
||||
|
||||
gcpr=model->BJT2collectorResist * here->BJT2area;
|
||||
gepr=model->BJT2emitterResist * here->BJT2area;
|
||||
|
|
@ -51,64 +54,66 @@ BJT2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
|||
xcbx= *(ckt->CKTstate0 + here->BJT2cqbx);
|
||||
xccs= *(ckt->CKTstate0 + here->BJT2cqsub); /* PN */
|
||||
xcmcb= *(ckt->CKTstate0 + here->BJT2cexbc);
|
||||
*(here->BJT2colColPtr) += (gcpr);
|
||||
*(here->BJT2baseBasePtr) += (gx) + (xcbx) * (s->real);
|
||||
*(here->BJT2baseBasePtr + 1) += (xcbx) * (s->imag);
|
||||
*(here->BJT2emitEmitPtr) += (gepr);
|
||||
*(here->BJT2colPrimeColPrimePtr) += (gmu+go+gcpr)
|
||||
+ (xcmu+xccs+xcbx) * (s->real);
|
||||
*(here->BJT2colPrimeColPrimePtr + 1) += (xcmu+xccs+xcbx)
|
||||
* (s->imag);
|
||||
*(here->BJT2basePrimeBasePrimePtr) += (gx+gpi+gmu)
|
||||
+ (xcpi+xcmu+xcmcb) * (s->real);
|
||||
*(here->BJT2basePrimeBasePrimePtr + 1) += (xcpi+xcmu+xcmcb)
|
||||
* (s->imag);
|
||||
*(here->BJT2emitPrimeEmitPrimePtr) += (gpi+gepr+gm+go)
|
||||
+ (xcpi+xgm) * (s->real);
|
||||
*(here->BJT2emitPrimeEmitPrimePtr + 1) += (xcpi+xgm)
|
||||
* (s->imag);
|
||||
*(here->BJT2colColPrimePtr) += (-gcpr);
|
||||
*(here->BJT2baseBasePrimePtr) += (-gx);
|
||||
*(here->BJT2emitEmitPrimePtr) += (-gepr);
|
||||
*(here->BJT2colPrimeColPtr) += (-gcpr);
|
||||
*(here->BJT2colPrimeBasePrimePtr) += (-gmu+gm)
|
||||
+ (-xcmu+xgm) * (s->real);
|
||||
*(here->BJT2colPrimeBasePrimePtr + 1) += (-xcmu+xgm)
|
||||
* (s->imag);
|
||||
*(here->BJT2colPrimeEmitPrimePtr) += (-gm-go)
|
||||
+ (-xgm) * (s->real);
|
||||
*(here->BJT2colPrimeEmitPrimePtr + 1) += (-xgm) *
|
||||
(s->imag);
|
||||
*(here->BJT2basePrimeBasePtr) += (-gx);
|
||||
*(here->BJT2basePrimeColPrimePtr) += (-gmu)
|
||||
+ (-xcmu-xcmcb) * (s->real);
|
||||
*(here->BJT2basePrimeColPrimePtr + 1) += (-xcmu-xcmcb)
|
||||
* (s->imag);
|
||||
*(here->BJT2basePrimeEmitPrimePtr) += (-gpi)
|
||||
+ (-xcpi) * (s->real);
|
||||
*(here->BJT2basePrimeEmitPrimePtr + 1) += (-xcpi)
|
||||
* (s->imag);
|
||||
*(here->BJT2emitPrimeEmitPtr) += (-gepr);
|
||||
*(here->BJT2emitPrimeColPrimePtr) += (-go)
|
||||
+ (xcmcb) * (s->real);
|
||||
*(here->BJT2emitPrimeColPrimePtr + 1) += (xcmcb)
|
||||
* (s->imag);
|
||||
*(here->BJT2emitPrimeBasePrimePtr) += (-gpi-gm)
|
||||
+ (-xcpi-xgm-xcmcb) * (s->real);
|
||||
*(here->BJT2emitPrimeBasePrimePtr + 1) += (-xcpi-xgm-xcmcb)
|
||||
* (s->imag);
|
||||
*(here->BJT2substSubstPtr) += (xccs) * (s->real);
|
||||
*(here->BJT2substSubstPtr + 1) += (xccs) * (s->imag);
|
||||
|
||||
|
||||
*(here->BJT2colColPtr) += m * (gcpr);
|
||||
*(here->BJT2baseBasePtr) += m * ((gx) + (xcbx) * (s->real));
|
||||
*(here->BJT2baseBasePtr + 1) += m * ((xcbx) * (s->imag));
|
||||
*(here->BJT2emitEmitPtr) += m * (gepr);
|
||||
*(here->BJT2colPrimeColPrimePtr) += m * ((gmu+go+gcpr)
|
||||
+ (xcmu+xccs+xcbx) * (s->real));
|
||||
*(here->BJT2colPrimeColPrimePtr + 1) += m * ((xcmu+xccs+xcbx)
|
||||
* (s->imag));
|
||||
*(here->BJT2basePrimeBasePrimePtr) += m * ((gx+gpi+gmu)
|
||||
+ (xcpi+xcmu+xcmcb) * (s->real));
|
||||
*(here->BJT2basePrimeBasePrimePtr + 1) += m * ((xcpi+xcmu+xcmcb)
|
||||
* (s->imag));
|
||||
*(here->BJT2emitPrimeEmitPrimePtr) += m * ((gpi+gepr+gm+go)
|
||||
+ (xcpi+xgm) * (s->real));
|
||||
*(here->BJT2emitPrimeEmitPrimePtr + 1) += m * ((xcpi+xgm)
|
||||
* (s->imag));
|
||||
*(here->BJT2colColPrimePtr) += m *(-gcpr);
|
||||
*(here->BJT2baseBasePrimePtr) += m * (-gx);
|
||||
*(here->BJT2emitEmitPrimePtr) += m * (-gepr);
|
||||
*(here->BJT2colPrimeColPtr) += m * (-gcpr);
|
||||
*(here->BJT2colPrimeBasePrimePtr) += m * ((-gmu+gm)
|
||||
+ (-xcmu+xgm) * (s->real));
|
||||
*(here->BJT2colPrimeBasePrimePtr + 1) += m * ((-xcmu+xgm)
|
||||
* (s->imag));
|
||||
*(here->BJT2colPrimeEmitPrimePtr) += m *b((-gm-go)
|
||||
+ (-xgm) * (s->real));
|
||||
*(here->BJT2colPrimeEmitPrimePtr + 1) += m * ((-xgm) *
|
||||
(s->imag));
|
||||
*(here->BJT2basePrimeBasePtr) += m * (-gx);
|
||||
*(here->BJT2basePrimeColPrimePtr) += m * ((-gmu)
|
||||
+ (-xcmu-xcmcb) * (s->real));
|
||||
*(here->BJT2basePrimeColPrimePtr + 1) += m * ((-xcmu-xcmcb)
|
||||
* (s->imag));
|
||||
*(here->BJT2basePrimeEmitPrimePtr) += m * ((-gpi)
|
||||
+ (-xcpi) * (s->real));
|
||||
*(here->BJT2basePrimeEmitPrimePtr + 1) += m * ((-xcpi)
|
||||
* (s->imag));
|
||||
*(here->BJT2emitPrimeEmitPtr) += m * (-gepr);
|
||||
*(here->BJT2emitPrimeColPrimePtr) += m * ((-go)
|
||||
+ (xcmcb) * (s->real));
|
||||
*(here->BJT2emitPrimeColPrimePtr + 1) += m * ((xcmcb)
|
||||
* (s->imag));
|
||||
*(here->BJT2emitPrimeBasePrimePtr) += m * ((-gpi-gm)
|
||||
+ (-xcpi-xgm-xcmcb) * (s->real));
|
||||
*(here->BJT2emitPrimeBasePrimePtr + 1) += m * ((-xcpi-xgm-xcmcb)
|
||||
* (s->imag));
|
||||
*(here->BJT2substSubstPtr) += m * ((xccs) * (s->real));
|
||||
*(here->BJT2substSubstPtr + 1) += m * ((xccs) * (s->imag));
|
||||
/*DW survived from bjt
|
||||
*(here->BJT2colPrimeSubstPtr) += (-xccs) * (s->real);
|
||||
*(here->BJT2colPrimeSubstPtr + 1) += (-xccs) * (s->imag);
|
||||
*(here->BJT2substColPrimePtr) += (-xccs) * (s->real);
|
||||
*(here->BJT2substColPrimePtr + 1) += (-xccs) * (s->imag);
|
||||
*/
|
||||
*(here->BJT2baseColPrimePtr) += (-xcbx) * (s->real);
|
||||
*(here->BJT2baseColPrimePtr + 1) += (-xcbx) * (s->imag);
|
||||
*(here->BJT2colPrimeBasePtr) += (-xcbx) * (s->real);
|
||||
*(here->BJT2colPrimeBasePtr + 1) += (-xcbx) * (s->imag);
|
||||
*(here->BJT2baseColPrimePtr) += m * ((-xcbx) * (s->real));
|
||||
*(here->BJT2baseColPrimePtr + 1) += m * ((-xcbx) * (s->imag));
|
||||
*(here->BJT2colPrimeBasePtr) += m * ((-xcbx) * (s->real));
|
||||
*(here->BJT2colPrimeBasePtr + 1) += m * ((-xcbx) * (s->imag));
|
||||
}
|
||||
}
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
Modified: Alan Gillespie
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* actually load the current ac sensitivity
|
||||
|
|
|
|||
|
|
@ -185,6 +185,18 @@ BJT2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
if(!here->BJT2areaGiven) {
|
||||
here->BJT2area = 1;
|
||||
}
|
||||
|
||||
if(!here->BJT2mGiven) {
|
||||
here->BJT2m = 1.0;
|
||||
}
|
||||
|
||||
here->BJT2state = *states;
|
||||
*states += BJT2numStates;
|
||||
if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){
|
||||
*states += 8 * (ckt->CKTsenInfo->SENparms);
|
||||
}
|
||||
|
||||
matrixpointers:
|
||||
if(model->BJT2collectorResist == 0) {
|
||||
here->BJT2colPrimeNode = here->BJT2colNode;
|
||||
} else if(here->BJT2colPrimeNode == 0) {
|
||||
|
|
@ -243,12 +255,6 @@ BJT2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
|||
}
|
||||
}
|
||||
|
||||
here->BJT2state = *states;
|
||||
*states += BJT2numStates;
|
||||
if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){
|
||||
*states += 8 * (ckt->CKTsenInfo->SENparms);
|
||||
}
|
||||
|
||||
/* macro to make elements with built in test for out of memory */
|
||||
#define TSTALLOC(ptr,first,second) \
|
||||
if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
Modified: Alan Gillespie
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* actually load the current sensitivity
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
Modified: Alan Gillespie
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* Pretty print the sensitivity info for all
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
Modified: Alan Gillespie
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* loop through all the devices and
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
Modified: Alan Gillespie
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* update the charge sensitivities and their derivatives */
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ BJT2temp(GENmodel *inModel, CKTcircuit *ckt)
|
|||
here=here->BJT2nextInstance) {
|
||||
if (here->BJT2owner != ARCHme) continue;
|
||||
|
||||
if(!here->BJT2tempGiven) here->BJT2temp = ckt->CKTtemp + here->BJT2_dtemp;
|
||||
if(!here->BJT2tempGiven) here->BJT2temp = ckt->CKTtemp + here->BJT2dtemp;
|
||||
vt = here->BJT2temp * CONSTKoverQ;
|
||||
fact2 = here->BJT2temp/REFTEMP;
|
||||
egfet = 1.16-(7.02e-4*here->BJT2temp*here->BJT2temp)/
|
||||
|
|
|
|||
Loading…
Reference in New Issue