37 static int bjt_pnjlim(
double*,
double,
double,
double);
109 bjt_iv(ckt,model,here,&bj);
136 bj.
bj_vbe = xf1* *(ckt->CKTstate1 + here->BJTvbe) +
137 xf2* *(ckt->CKTstate2 + here->BJTvbe);
138 bj.
bj_vbc = xf1* *(ckt->CKTstate1 + here->BJTvbc) +
139 xf2* *(ckt->CKTstate2 + here->BJTvbc);
140 bj.
bj_vbx = xf1* *(ckt->CKTstate1 + here->BJTvbx) +
141 xf2* *(ckt->CKTstate2 + here->BJTvbx);
142 bj.
bj_vcs = xf1* *(ckt->CKTstate1 + here->BJTvcs) +
143 xf2* *(ckt->CKTstate2 + here->BJTvcs);
144 *(ckt->CKTstate0 + here->BJTvbe) =
145 *(ckt->CKTstate1 + here->BJTvbe);
146 *(ckt->CKTstate0 + here->BJTvbc) =
147 *(ckt->CKTstate1 + here->BJTvbc);
150 bjt_iv(ckt,model,here,&bj);
210 bjt_iv(ckt,model,here,&bj);
228 bj.
bj_vbe = *(ckt->CKTstate1 + here->BJTvbe);
229 bj.
bj_vbc = *(ckt->CKTstate1 + here->BJTvbc);
230 bj.
bj_vbx = *(ckt->CKTstate1 + here->BJTvbx);
231 bj.
bj_vcs = *(ckt->CKTstate1 + here->BJTvcs);
233 bjt_iv(ckt,model,here,&bj);
236 *(ckt->CKTstate1 + here->BJTqbe) =
237 *(ckt->CKTstate0 + here->BJTqbe);
238 *(ckt->CKTstate1 + here->BJTqbc) =
239 *(ckt->CKTstate0 + here->BJTqbc);
240 *(ckt->CKTstate1 + here->BJTqbx) =
241 *(ckt->CKTstate0 + here->BJTqbx);
242 *(ckt->CKTstate1 + here->BJTqcs) =
243 *(ckt->CKTstate0 + here->BJTqcs);
263 bj.
bj_vbe = *(ckt->CKTstate0 + here->BJTvbe);
264 bj.
bj_vbc = *(ckt->CKTstate0 + here->BJTvbc);
265 bj.
bj_vbx = *(ckt->CKTstate0 + here->BJTvbx);
266 bj.
bj_vcs = *(ckt->CKTstate0 + here->BJTvcs);
268 bjt_iv(ckt,model,here,&bj);
286 *(ckt->CKTstate0 + here->BJTvbe) = here->
BJTicVBE;
287 *(ckt->CKTstate0 + here->BJTvbc) =
289 *(ckt->CKTstate0 + here->BJTvbx) =
293 *(ckt->CKTstate0 + here->BJTvbe) = -here->
BJTicVBE;
294 *(ckt->CKTstate0 + here->BJTvbc) =
296 *(ckt->CKTstate0 + here->BJTvbx) =
299 *(ckt->CKTstate0 + here->BJTvcs) = 0;
324 bjt_iv(ckt,model,here,&bj);
350 delvbe = bj->
bj_vbe - *(ckt->CKTstate0 + here->BJTvbe);
352 A2 =
FABS(*(ckt->CKTstate0 + here->BJTvbe));
353 if (
FABS(delvbe) >= ckt->CKTreltol*
MAX(A1,A2) + ckt->CKTvoltTol)
356 delvbc = bj->
bj_vbc - *(ckt->CKTstate0 + here->BJTvbc);
358 A2 =
FABS(*(ckt->CKTstate0 + here->BJTvbc));
359 if (
FABS(delvbc) >= ckt->CKTreltol*
MAX(A1,A2) + ckt->CKTvoltTol)
362 cchat = here->
BJTcc +
366 A1 = cchat - here->
BJTcc;
369 if (
FABS(A1) >= ckt->CKTreltol*
MAX(A2,A3) + ckt->CKTabstol)
372 cbhat = here->
BJTcb +
376 A1 = cbhat - here->
BJTcb;
379 if (
FABS(A1) >= ckt->CKTreltol*
MAX(A2,A3) + ckt->CKTabstol)
385 bj->
bj_vbe = *(ckt->CKTstate0 + here->BJTvbe);
386 bj->
bj_vbc = *(ckt->CKTstate0 + here->BJTvbc);
387 bj->
bj_vbx = *(ckt->CKTstate0 + here->BJTvbx);
388 bj->
bj_vcs = *(ckt->CKTstate0 + here->BJTvcs);
431 if ((vn > vcrit) && (
FABS(vn - vold) > (vt + vt))) {
433 arg = 1 + (vn - vold)/vt;
435 *vnew = vold + vt*log(arg);
442 *vnew = vt*log(vn/vt);
482 double arg1, arg2, arg3;
517 cbe = csat*(temp - 1) + ckt->CKTgmin*vbe;
518 gbe = csat*temp/vtn + ckt->CKTgmin;
525 cben = c2*(temp - 1);
530 gbe = -csat/vbe + ckt->CKTgmin;
539 cbc = csat*(temp - 1) + ckt->CKTgmin*vbc;
540 gbc = csat*temp/vtn + ckt->CKTgmin;
547 cbcn = c4*(temp - 1);
552 gbc = -csat/vbc + ckt->CKTgmin;
571 double arg, sqarg, oik, oikr;
576 arg = 1 + 4*(oik*cbe + oikr*cbc);
577 if (arg < 0) arg = 0;
579 if (arg != 0) sqarg = sqrt(arg);
580 qb = .5*temp*(1 + sqarg);
593 temp = here->
BJTcb/xjrb;
594 arg1 =
MAX(temp,1
e-9);
595 arg2 = (-1 + sqrt(1 + 14.59025*arg1))/(2.4317*sqrt(arg1));
597 temp = rbpr + 3*rbpi*(arg1 - arg2)/(arg2*arg1*arg1);
600 temp = rbpr + rbpi*qb;
603 here->
BJTgx = 1/temp;
616 double denom, xf1, xf2, cex, gex;
618 arg1 = ckt->CKTdelta/td;
621 denom = 1 + arg1 + arg2;
624 *(ckt->CKTstate1 + here->BJTcexbc) = cbe*qb;
625 *(ckt->CKTstate2 + here->BJTcexbc) =
626 *(ckt->CKTstate1 + here->BJTcexbc);
628 xf2 = -ckt->CKTdelta/ckt->CKTdeltaOld[1];
630 here->
BJTcc = (*(ckt->CKTstate1 + here->BJTcexbc)*(xf1 + arg2) +
631 *(ckt->CKTstate2 + here->BJTcexbc)*xf2)/denom;
634 *(ckt->CKTstate0 + here->BJTcexbc) = here->
BJTcc + cex*qb;
635 temp = (cex - cbc)*qb;
637 here->
BJTgo = (gbc + temp*dqbdvc)*qb;
638 here->
BJTgm = (gex - temp*dqbdve)*qb - here->
BJTgo;
641 temp = (cbe - cbc)*qb;
643 here->
BJTgo = (gbc + temp*dqbdvc)*qb;
644 here->
BJTgm = (gbe - temp*dqbdve)*qb - here->
BJTgo;
653 if (tf != 0 && vbe > 0) {
661 arg1 *= exp(bj->
bj_vbc*ovtf);
665 temp = cbe/(cbe + xjtf*here->
BJTarea);
667 arg2 = arg1*(3 - temp - temp);
669 arg3 = cbe*arg1*ovtf;
671 cbe *= (1 + arg1)*qb;
672 gbe = (gbe*(1 + arg2) - cbe*dqbdve)*qb;
673 here->
BJTgeqcb = tf*(arg3 - cbe*dqbdvc)*qb;
717 sarg = exp(-xm*log(arg));
718 *(ckt->CKTstate0 + here->BJTqbe) =
719 tf*bj->
bj_cbe + pt*cap*(1 - arg*sarg)/(1 - xm);
727 *(ckt->CKTstate0 + here->BJTqbe) = tf*bj->
bj_cbe + cap*f1 +
728 czf2*(f3*(vx - fcp) + (xm/(pt + pt))*(vx*vx - fcp*fcp));
740 sarg = exp(-xm*log(arg));
741 *(ckt->CKTstate0 + here->BJTqbc) = tr*bj->
bj_cbc +
742 pt*cap*(1 - arg*sarg)/(1 - xm);
750 *(ckt->CKTstate0 + here->BJTqbc) = tr*bj->
bj_cbc + cap*f1 +
751 czf2*(f3*(vx - fcp) + (xm/(pt + pt))*(vx*vx - fcp*fcp));
760 sarg = exp(-xm*log(arg));
761 *(ckt->CKTstate0 + here->BJTqbx) = pt*cap*(1 - arg*sarg)/(1 - xm);
769 *(ckt->CKTstate0 + here->BJTqbx) = cap*f1 +
770 czf2*(f3*(vx - fcp) + (xm/(pt + pt))*(vx*vx - fcp*fcp));
771 here->
BJTcapbx = czf2*(f3 + xm*vx/pt);
781 sarg = exp(-xm*log(arg));
782 *(ckt->CKTstate0 + here->BJTqcs) = pt*cap*(1 - arg*sarg)/(1 - xm);
786 *(ckt->CKTstate0 + here->BJTqcs) = vx*cap*(1 + xm*vx/(pt + pt));
787 here->
BJTcapcs = cap*(1 + xm*vx/pt);
807 here->
BJTcb += *(ckt->CKTstate0 + here->BJTcqbe);
811 here->
BJTcb += *(ckt->CKTstate0 + here->BJTcqbc);
812 here->
BJTcc -= *(ckt->CKTstate0 + here->BJTcqbc);
861 *(ckt->CKTstate0 + here->BJTvbe) = bj->
bj_vbe;
862 *(ckt->CKTstate0 + here->BJTvbc) = bj->
bj_vbc;
863 *(ckt->CKTstate0 + here->BJTvbx) = bj->
bj_vbx;
864 *(ckt->CKTstate0 + here->BJTvcs) = bj->
bj_vcs;
870 ceqcs = (*(ckt->CKTstate0 + here->BJTcqcs) - bj->
bj_vcs*gccs);
871 ceqbx = (*(ckt->CKTstate0 + here->BJTcqbx) - bj->
bj_vbx*geqbx);
873 bj->
bj_vbe*(gm + go + gpi) +
875 ceqbc = (-cc + bj->
bj_vbe*(gm + go) -
879 ceqcs = -(*(ckt->CKTstate0 + here->BJTcqcs) - bj->
bj_vcs*gccs);
880 ceqbx = -(*(ckt->CKTstate0 + here->BJTcqbx) - bj->
bj_vbx*geqbx);
882 bj->
bj_vbe*(gm + go + gpi) +
884 ceqbc = -(-cc + bj->
bj_vbe*(gm + go) -
double * BJTcolPrimeColPtr
BJTinstance * BJTinstances
double * BJTemitPrimeEmitPrimePtr
double BJTbaseCurrentHalfResist
double * BJTcolColPrimePtr
struct sBJTmodel * BJTnextModel
double BJTtransitTimeHighCurrentF
double * BJTbasePrimeBasePtr
double * BJTemitPrimeBasePrimePtr
double * BJTsubstSubstPtr
double BJTcollectorConduct
double * BJTbaseColPrimePtr
double * BJTcolPrimeBasePrimePtr
double * BJTemitPrimeEmitPtr
double BJTexponentialSubstrate
double * BJTcolPrimeBasePtr
struct sBJTinstance * BJTnextInstance
double * BJTcolPrimeColPrimePtr
double * BJTemitPrimeColPrimePtr
double * BJTbasePrimeEmitPrimePtr
double BJTpotentialSubstrate
double * BJTcolPrimeSubstPtr
double BJTexcessPhaseFactor
double BJTtransitTimeVBCFactor
double BJTleakBEemissionCoeff
double * BJTbasePrimeColPrimePtr
double * BJTemitEmitPrimePtr
#define NI_INTEG(ckt, geq, ceq, cap, qcap)
double BJTtransitTimeBiasCoeffF
double * BJTcolPrimeEmitPrimePtr
double * BJTbasePrimeBasePrimePtr
int BJTload(GENmodel *inModel, CKTcircuit *ckt)
double * BJTsubstColPrimePtr
double BJTleakBCemissionCoeff
double * BJTbaseBasePrimePtr
static int bjt_limiting()
double BJTbaseFractionBCcap