Added BSIM2 to the "new_kirchhoff" KCL verification

This commit is contained in:
Francesco Lannutti 2013-01-19 00:22:57 +01:00
parent 1f53d76a37
commit 083904d847
1 changed files with 34 additions and 8 deletions

View File

@ -40,13 +40,13 @@ B2load(GENmodel *inModel, CKTcircuit *ckt)
double cd;
double cdrain;
double cdhat;
double cdreq;
double cdreq, cdreq_fvk ;
double ceq;
double ceqbd;
double ceqbs;
double ceqqb;
double ceqqd;
double ceqqg;
double ceqbd, ceqbd_fvk ;
double ceqbs, ceqbs_fvk ;
double ceqqb, ceqqb_fvk ;
double ceqqd, ceqqd_fvk ;
double ceqqg, ceqqg_fvk ;
double czbd;
double czbdsw;
double czbs;
@ -628,7 +628,7 @@ line755:
line850:
/* initialize to zero charge conductance and current */
ceqqg = ceqqb = ceqqd = 0.0;
ceqqg = ceqqg_fvk = ceqqb = ceqqb_fvk = ceqqd = ceqqd_fvk = 0.0;
gcdgb = gcddb = gcdsb = 0.0;
gcsgb = gcsdb = gcssb = 0.0;
gcggb = gcgdb = gcgsb = 0.0;
@ -641,8 +641,11 @@ line860:
cqbulk = *(ckt->CKTstate0 + here->B2iqb);
cqdrn = *(ckt->CKTstate0 + here->B2iqd);
ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs;
ceqqg_fvk = cqgate ;
ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs;
ceqqb_fvk = cqbulk ;
ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs;
ceqqd_fvk = cqdrn ;
if(ckt->CKTmode & MODEINITTRAN ) {
*(ckt->CKTstate1 + here->B2iqb) =
@ -661,19 +664,25 @@ line900:
m = here->B2m;
ceqbs = model->B2type * (cbs-(gbs-ckt->CKTgmin)*vbs);
ceqbs_fvk = model->B2type * (cbs + ckt->CKTgmin * vbs) ;
ceqbd = model->B2type * (cbd-(gbd-ckt->CKTgmin)*vbd);
ceqbd_fvk = model->B2type * (cbd + ckt->CKTgmin * vbd) ;
ceqqg = model->B2type * ceqqg;
ceqqg_fvk = model->B2type * ceqqg_fvk ;
ceqqb = model->B2type * ceqqb;
ceqqb_fvk = model->B2type * ceqqb_fvk ;
ceqqd = model->B2type * ceqqd;
ceqqd_fvk = model->B2type * ceqqd_fvk ;
if (here->B2mode >= 0) {
xnrm=1;
xrev=0;
cdreq=model->B2type*(cdrain-gds*vds-gm*vgs-gmbs*vbs);
cdreq_fvk = model->B2type * cdrain ;
} else {
xnrm=0;
xrev=1;
cdreq = -(model->B2type)*(cdrain+gds*vds-gm*vgd-gmbs*vbd);
cdreq_fvk = - (model->B2type * cdrain) ;
}
*(ckt->CKTrhs + here->B2gNode) -= m * (ceqqg);
@ -713,6 +722,23 @@ line900:
*(here->B2SPdpPtr) += m * (-gds-xrev*(gm+gmbs)+gcsdb);
/* KCL verification - Dynamic Part */
*(ckt->CKTfvk + here->B2gNode) += m * ceqqg_fvk ;
*(ckt->CKTfvk + here->B2bNode) += m * (ceqbs_fvk + ceqbd_fvk + ceqqb_fvk) ;
*(ckt->CKTfvk + here->B2dNodePrime) -= m * (ceqbd_fvk - cdreq_fvk - ceqqd_fvk) ;
*(ckt->CKTfvk + here->B2sNodePrime) -= m * (cdreq_fvk + ceqbs_fvk + ceqqg_fvk + ceqqb_fvk + ceqqd_fvk) ;
/* KCL verification - Linear and Static Part */
*(ckt->CKTfvk + here->B2dNode) += m * (here->B2drainConductance) * *(ckt->CKTrhsOld + here->B2dNode) ;
*(ckt->CKTfvk + here->B2sNode) += m * (here->B2sourceConductance) * *(ckt->CKTrhsOld + here->B2sNode) ;
*(ckt->CKTfvk + here->B2dNodePrime) += m * (here->B2drainConductance) * *(ckt->CKTrhsOld + here->B2dNodePrime) ;
*(ckt->CKTfvk + here->B2sNodePrime) += m * (here->B2sourceConductance) * *(ckt->CKTrhsOld + here->B2sNodePrime) ;
*(ckt->CKTfvk + here->B2dNode) += m * (-here->B2drainConductance) * *(ckt->CKTrhsOld + here->B2dNodePrime) ;
*(ckt->CKTfvk + here->B2sNode) += m * (-here->B2sourceConductance) * *(ckt->CKTrhsOld + here->B2sNodePrime) ;
*(ckt->CKTfvk + here->B2dNodePrime) += m * (-here->B2drainConductance) * *(ckt->CKTrhsOld + here->B2dNode) ;
*(ckt->CKTfvk + here->B2sNodePrime) += m * (-here->B2sourceConductance) * *(ckt->CKTrhsOld + here->B2sNode) ;
line1000: ;
} /* End of Mosfet Instance */