Added BSIM2 to the "new_kirchhoff" KCL verification

This commit is contained in:
Francesco Lannutti
2013-05-27 08:23:23 +02:00
parent a1eeb1f278
commit 6762ff8a7c
+34 -8
View File
@@ -40,13 +40,13 @@ B2load(GENmodel *inModel, CKTcircuit *ckt)
double cd; double cd;
double cdrain; double cdrain;
double cdhat; double cdhat;
double cdreq; double cdreq, cdreq_fvk ;
double ceq; double ceq;
double ceqbd; double ceqbd, ceqbd_fvk ;
double ceqbs; double ceqbs, ceqbs_fvk ;
double ceqqb; double ceqqb, ceqqb_fvk ;
double ceqqd; double ceqqd, ceqqd_fvk ;
double ceqqg; double ceqqg, ceqqg_fvk ;
double czbd; double czbd;
double czbdsw; double czbdsw;
double czbs; double czbs;
@@ -628,7 +628,7 @@ line755:
line850: line850:
/* initialize to zero charge conductance and current */ /* 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; gcdgb = gcddb = gcdsb = 0.0;
gcsgb = gcsdb = gcssb = 0.0; gcsgb = gcsdb = gcssb = 0.0;
gcggb = gcgdb = gcgsb = 0.0; gcggb = gcgdb = gcgsb = 0.0;
@@ -641,8 +641,11 @@ line860:
cqbulk = *(ckt->CKTstate0 + here->B2iqb); cqbulk = *(ckt->CKTstate0 + here->B2iqb);
cqdrn = *(ckt->CKTstate0 + here->B2iqd); cqdrn = *(ckt->CKTstate0 + here->B2iqd);
ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs; ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs;
ceqqg_fvk = cqgate ;
ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs; ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs;
ceqqb_fvk = cqbulk ;
ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs; ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs;
ceqqd_fvk = cqdrn ;
if(ckt->CKTmode & MODEINITTRAN ) { if(ckt->CKTmode & MODEINITTRAN ) {
*(ckt->CKTstate1 + here->B2iqb) = *(ckt->CKTstate1 + here->B2iqb) =
@@ -661,19 +664,25 @@ line900:
m = here->B2m; m = here->B2m;
ceqbs = model->B2type * (cbs-(gbs-ckt->CKTgmin)*vbs); 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 = model->B2type * (cbd-(gbd-ckt->CKTgmin)*vbd);
ceqbd_fvk = model->B2type * (cbd + ckt->CKTgmin * vbd) ;
ceqqg = model->B2type * ceqqg; ceqqg = model->B2type * ceqqg;
ceqqg_fvk = model->B2type * ceqqg_fvk ;
ceqqb = model->B2type * ceqqb; ceqqb = model->B2type * ceqqb;
ceqqb_fvk = model->B2type * ceqqb_fvk ;
ceqqd = model->B2type * ceqqd; ceqqd = model->B2type * ceqqd;
ceqqd_fvk = model->B2type * ceqqd_fvk ;
if (here->B2mode >= 0) { if (here->B2mode >= 0) {
xnrm=1; xnrm=1;
xrev=0; xrev=0;
cdreq=model->B2type*(cdrain-gds*vds-gm*vgs-gmbs*vbs); cdreq=model->B2type*(cdrain-gds*vds-gm*vgs-gmbs*vbs);
cdreq_fvk = model->B2type * cdrain ;
} else { } else {
xnrm=0; xnrm=0;
xrev=1; xrev=1;
cdreq = -(model->B2type)*(cdrain+gds*vds-gm*vgd-gmbs*vbd); cdreq = -(model->B2type)*(cdrain+gds*vds-gm*vgd-gmbs*vbd);
cdreq_fvk = - (model->B2type * cdrain) ;
} }
*(ckt->CKTrhs + here->B2gNode) -= m * (ceqqg); *(ckt->CKTrhs + here->B2gNode) -= m * (ceqqg);
@@ -713,6 +722,23 @@ line900:
*(here->B2SPdpPtr) += m * (-gds-xrev*(gm+gmbs)+gcsdb); *(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: ; line1000: ;
} /* End of Mosfet Instance */ } /* End of Mosfet Instance */