Added a preliminary version of the BSIM4v7 model for the KCL verification
This commit is contained in:
parent
30126ce7fd
commit
c74e0d703a
|
|
@ -114,7 +114,7 @@ double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg;
|
||||||
double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd;
|
double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd;
|
||||||
double delvges, delvgms, vgmb;
|
double delvges, delvgms, vgmb;
|
||||||
double gcgmgmb=0.0, gcgmdb=0.0, gcgmsb=0.0, gcdgmb, gcsgmb;
|
double gcgmgmb=0.0, gcgmdb=0.0, gcgmsb=0.0, gcdgmb, gcsgmb;
|
||||||
double gcgmbb=0.0, gcbgmb, qgmb, qgmid=0.0, ceqqgmid;
|
double gcgmbb=0.0, gcbgmb, qgmb, qgmid=0.0, ceqqgmid, ceqqgmid_fvk ;
|
||||||
|
|
||||||
double vbd, vbs, vds, vgb, vgd, vgs, vgdo;
|
double vbd, vbs, vds, vgb, vgd, vgs, vgdo;
|
||||||
#ifndef PREDICTOR
|
#ifndef PREDICTOR
|
||||||
|
|
@ -126,8 +126,9 @@ double delvbd_jct, delvbs_jct, vbs_jct, vbd_jct;
|
||||||
|
|
||||||
double SourceSatCurrent, DrainSatCurrent;
|
double SourceSatCurrent, DrainSatCurrent;
|
||||||
double ag0, qgb, von, cbhat, VgstNVt, ExpVgst;
|
double ag0, qgb, von, cbhat, VgstNVt, ExpVgst;
|
||||||
double ceqqb, ceqqd, ceqqg, ceqqjd=0.0, ceqqjs=0.0, ceq, geq;
|
double ceqqb, ceqqb_fvk, ceqqd, ceqqd_fvk, ceqqg, ceqqg_fvk, ceqqjd=0.0, ceqqjd_fvk = 0.0, ceqqjs=0.0, ceqqjs_fvk = 0.0, ceq, geq;
|
||||||
double cdrain, cdhat, ceqdrn, ceqbd, ceqbs, ceqjd, ceqjs, gjbd, gjbs;
|
double ceqqb_SnodePrime_fvk = 0.0, ceqqd_SnodePrime_fvk = 0.0, ceqqg_SnodePrime_fvk = 0.0, ceqqjd_SnodePrime_fvk = 0.0, ceqqjs_SnodePrime_fvk = 0.0 ;
|
||||||
|
double cdrain, cdhat, ceqdrn, ceqdrn_fvk, ceqbd, ceqbd_fvk, ceqbs, ceqbs_fvk, ceqjd, ceqjd_fvk, ceqjs, ceqjs_fvk, gjbd, gjbs;
|
||||||
double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg;
|
double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg;
|
||||||
double delvbd, delvbs, delvds, delvgd, delvgs;
|
double delvbd, delvbs, delvds, delvgd, delvgs;
|
||||||
double Vfbeff, dVfbeff_dVg, dVfbeff_dVb, V3, V4;
|
double Vfbeff, dVfbeff_dVg, dVfbeff_dVb, V3, V4;
|
||||||
|
|
@ -148,10 +149,10 @@ double Igs, dIgs_dVg, dIgs_dVs, Igd, dIgd_dVg, dIgd_dVd;
|
||||||
double Igbacc, dIgbacc_dVg, dIgbacc_dVb;
|
double Igbacc, dIgbacc_dVg, dIgbacc_dVb;
|
||||||
double Igbinv, dIgbinv_dVg, dIgbinv_dVd, dIgbinv_dVb;
|
double Igbinv, dIgbinv_dVg, dIgbinv_dVd, dIgbinv_dVb;
|
||||||
double Pigcd, dPigcd_dVg, dPigcd_dVd, dPigcd_dVb;
|
double Pigcd, dPigcd_dVg, dPigcd_dVd, dPigcd_dVb;
|
||||||
double Istoteq, gIstotg, gIstotd, gIstots, gIstotb;
|
double Istoteq, Istoteq_fvk, gIstotg, gIstotd, gIstots, gIstotb;
|
||||||
double Idtoteq, gIdtotg, gIdtotd, gIdtots, gIdtotb;
|
double Idtoteq, Idtoteq_fvk, gIdtotg, gIdtotd, gIdtots, gIdtotb;
|
||||||
double Ibtoteq, gIbtotg, gIbtotd, gIbtots, gIbtotb;
|
double Ibtoteq, Ibtoteq_fvk, gIbtotg, gIbtotd, gIbtots, gIbtotb;
|
||||||
double Igtoteq, gIgtotg, gIgtotd, gIgtots, gIgtotb;
|
double Igtoteq, Igtoteq_fvk, gIgtotg, gIgtotd, gIgtots, gIgtotb;
|
||||||
double Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat;
|
double Igstot, cgshat, Igdtot, cgdhat, Igbtot, cgbhat;
|
||||||
double Vgs_eff, Vfb=0.0, Vth_NarrowW;
|
double Vgs_eff, Vfb=0.0, Vth_NarrowW;
|
||||||
/* double Vgd_eff, dVgd_eff_dVg; v4.7.0 */
|
/* double Vgd_eff, dVgd_eff_dVg; v4.7.0 */
|
||||||
|
|
@ -216,7 +217,7 @@ double Rds, dRds_dVg, dRds_dVb, WVCox, WVCoxRds;
|
||||||
double Vgst2Vtm, VdsatCV;
|
double Vgst2Vtm, VdsatCV;
|
||||||
double Leff, Weff, dWeff_dVg, dWeff_dVb;
|
double Leff, Weff, dWeff_dVg, dWeff_dVb;
|
||||||
double AbulkCV, dAbulkCV_dVb;
|
double AbulkCV, dAbulkCV_dVb;
|
||||||
double qcheq, qdef, gqdef=0.0, cqdef=0.0, cqcheq=0.0;
|
double qcheq, qdef, gqdef=0.0, cqdef=0.0, cqdef_fvk = 0.0, cqcheq=0.0, cqcheq_fvk = 0.0 ;
|
||||||
double gcqdb=0.0, gcqsb=0.0, gcqgb=0.0, gcqbb=0.0;
|
double gcqdb=0.0, gcqsb=0.0, gcqgb=0.0, gcqbb=0.0;
|
||||||
double dxpart, sxpart, ggtg, ggtd, ggts, ggtb;
|
double dxpart, sxpart, ggtg, ggtd, ggts, ggtb;
|
||||||
double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs;
|
double ddxpart_dVd, ddxpart_dVg, ddxpart_dVb, ddxpart_dVs;
|
||||||
|
|
@ -4573,9 +4574,9 @@ line755:
|
||||||
|
|
||||||
line850:
|
line850:
|
||||||
/* Zero gcap and ceqcap if (!ChargeComputationNeeded) */
|
/* Zero gcap and ceqcap if (!ChargeComputationNeeded) */
|
||||||
ceqqg = ceqqb = ceqqd = 0.0;
|
ceqqg = ceqqg_fvk = ceqqb = ceqqb_fvk = ceqqd = ceqqd_fvk = 0.0;
|
||||||
ceqqjd = ceqqjs = 0.0;
|
ceqqjd = ceqqjd_fvk = ceqqjs = ceqqjs_fvk = 0.0;
|
||||||
cqcheq = cqdef = 0.0;
|
cqcheq = cqcheq_fvk = cqdef = cqdef_fvk = 0.0;
|
||||||
|
|
||||||
gcdgb = gcddb = gcdsb = gcdbb = 0.0;
|
gcdgb = gcddb = gcdsb = gcdbb = 0.0;
|
||||||
gcsgb = gcsdb = gcssb = gcsbb = 0.0;
|
gcsgb = gcsdb = gcssb = gcsbb = 0.0;
|
||||||
|
|
@ -4583,7 +4584,7 @@ line850:
|
||||||
gcbdb = gcbgb = gcbsb = gcbbb = 0.0;
|
gcbdb = gcbgb = gcbsb = gcbbb = 0.0;
|
||||||
|
|
||||||
gcgmgmb = gcgmdb = gcgmsb = gcgmbb = 0.0;
|
gcgmgmb = gcgmdb = gcgmsb = gcgmbb = 0.0;
|
||||||
gcdgmb = gcsgmb = gcbgmb = ceqqgmid = 0.0;
|
gcdgmb = gcsgmb = gcbgmb = ceqqgmid = ceqqgmid_fvk = 0.0;
|
||||||
gcdbdb = gcsbsb = 0.0;
|
gcdbdb = gcsbsb = 0.0;
|
||||||
|
|
||||||
gqdef = gcqgb = gcqdb = gcqsb = gcqbb = 0.0;
|
gqdef = gcqgb = gcqdb = gcqsb = gcqbb = 0.0;
|
||||||
|
|
@ -4612,21 +4613,33 @@ line860:
|
||||||
cqdrn = *(ckt->CKTstate0 + here->BSIM4cqd);
|
cqdrn = *(ckt->CKTstate0 + here->BSIM4cqd);
|
||||||
|
|
||||||
ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs;
|
ceqqg = cqgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs;
|
||||||
|
ceqqg_fvk = cqgate ;
|
||||||
|
ceqqg_SnodePrime_fvk = ceqqg ;
|
||||||
ceqqd = cqdrn - gcdgb * vgb - gcdgmb * vgmb + (gcddb + gcdbdb)
|
ceqqd = cqdrn - gcdgb * vgb - gcdgmb * vgmb + (gcddb + gcdbdb)
|
||||||
* vbd - gcdbdb * vbd_jct + gcdsb * vbs;
|
* vbd - gcdbdb * vbd_jct + gcdsb * vbs;
|
||||||
|
ceqqd_fvk = cqdrn ;
|
||||||
|
ceqqd_SnodePrime_fvk = ceqqd ;
|
||||||
ceqqb = cqbody - gcbgb * vgb - gcbgmb * vgmb
|
ceqqb = cqbody - gcbgb * vgb - gcbgmb * vgmb
|
||||||
+ gcbdb * vbd + gcbsb * vbs;
|
+ gcbdb * vbd + gcbsb * vbs;
|
||||||
|
ceqqb_fvk = cqbody - gcbgmb * vgmb ;
|
||||||
|
ceqqb_SnodePrime_fvk = ceqqb ;
|
||||||
|
|
||||||
if (here->BSIM4rgateMod == 3)
|
if (here->BSIM4rgateMod == 3)
|
||||||
|
{
|
||||||
ceqqgmid = *(ckt->CKTstate0 + here->BSIM4cqgmid)
|
ceqqgmid = *(ckt->CKTstate0 + here->BSIM4cqgmid)
|
||||||
+ gcgmdb * vbd + gcgmsb * vbs - gcgmgmb * vgmb;
|
+ gcgmdb * vbd + gcgmsb * vbs - gcgmgmb * vgmb;
|
||||||
else
|
ceqqgmid_fvk = *(ckt->CKTstate0 + here->BSIM4cqgmid) ;
|
||||||
ceqqgmid = 0.0;
|
} else {
|
||||||
|
ceqqgmid = ceqqgmid_fvk = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
if (here->BSIM4rbodyMod)
|
if (here->BSIM4rbodyMod)
|
||||||
{ ceqqjs = *(ckt->CKTstate0 + here->BSIM4cqbs) + gcsbsb * vbs_jct;
|
{ ceqqjs = *(ckt->CKTstate0 + here->BSIM4cqbs) + gcsbsb * vbs_jct;
|
||||||
ceqqjd = *(ckt->CKTstate0 + here->BSIM4cqbd) + gcdbdb * vbd_jct;
|
ceqqjs_fvk = *(ckt->CKTstate0 + here->BSIM4cqbs) ;
|
||||||
|
ceqqjs_SnodePrime_fvk = ceqqjs ;
|
||||||
|
ceqqjd = *(ckt->CKTstate0 + here->BSIM4cqbd) + gcdbdb * vbd_jct;
|
||||||
|
ceqqjd_fvk = *(ckt->CKTstate0 + here->BSIM4cqbd) ;
|
||||||
|
ceqqjd_SnodePrime_fvk = ceqqjd ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (here->BSIM4trnqsMod)
|
if (here->BSIM4trnqsMod)
|
||||||
|
|
@ -4636,8 +4649,10 @@ line860:
|
||||||
ceqqd -= dxpart * T0 + T1 * (ddxpart_dVg * vgb - ddxpart_dVd
|
ceqqd -= dxpart * T0 + T1 * (ddxpart_dVg * vgb - ddxpart_dVd
|
||||||
* vbd - ddxpart_dVs * vbs);
|
* vbd - ddxpart_dVs * vbs);
|
||||||
cqdef = *(ckt->CKTstate0 + here->BSIM4cqcdump) - gqdef * qdef;
|
cqdef = *(ckt->CKTstate0 + here->BSIM4cqcdump) - gqdef * qdef;
|
||||||
|
cqdef_fvk = *(ckt->CKTstate0 + here->BSIM4cqcdump) ;
|
||||||
cqcheq = *(ckt->CKTstate0 + here->BSIM4cqcheq)
|
cqcheq = *(ckt->CKTstate0 + here->BSIM4cqcheq)
|
||||||
- (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + T0;
|
- (gcqgb * vgb - gcqdb * vbd - gcqsb * vbs) + T0;
|
||||||
|
cqcheq_fvk = *(ckt->CKTstate0 + here->BSIM4cqcheq) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ckt->CKTmode & MODEINITTRAN)
|
if (ckt->CKTmode & MODEINITTRAN)
|
||||||
|
|
@ -4674,13 +4689,15 @@ line900:
|
||||||
|
|
||||||
ceqdrn = model->BSIM4type * (cdrain - here->BSIM4gds * vds
|
ceqdrn = model->BSIM4type * (cdrain - here->BSIM4gds * vds
|
||||||
- Gm * vgs - Gmbs * vbs);
|
- Gm * vgs - Gmbs * vbs);
|
||||||
|
ceqdrn_fvk = model->BSIM4type * cdrain ;
|
||||||
ceqbd = model->BSIM4type * (here->BSIM4csub + here->BSIM4Igidl
|
ceqbd = model->BSIM4type * (here->BSIM4csub + here->BSIM4Igidl
|
||||||
- (here->BSIM4gbds + here->BSIM4ggidld) * vds
|
- (here->BSIM4gbds + here->BSIM4ggidld) * vds
|
||||||
- (here->BSIM4gbgs + here->BSIM4ggidlg) * vgs
|
- (here->BSIM4gbgs + here->BSIM4ggidlg) * vgs
|
||||||
- (here->BSIM4gbbs + here->BSIM4ggidlb) * vbs);
|
- (here->BSIM4gbbs + here->BSIM4ggidlb) * vbs);
|
||||||
|
ceqbd_fvk = model->BSIM4type * (here->BSIM4csub + here->BSIM4Igidl) ;
|
||||||
ceqbs = model->BSIM4type * (here->BSIM4Igisl + here->BSIM4ggisls * vds
|
ceqbs = model->BSIM4type * (here->BSIM4Igisl + here->BSIM4ggisls * vds
|
||||||
- here->BSIM4ggislg * vgd - here->BSIM4ggislb * vbd);
|
- here->BSIM4ggislg * vgd - here->BSIM4ggislb * vbd);
|
||||||
|
ceqbs_fvk = model->BSIM4type * here->BSIM4Igisl ;
|
||||||
gbbdp = -(here->BSIM4gbds);
|
gbbdp = -(here->BSIM4gbds);
|
||||||
gbbsp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs;
|
gbbsp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs;
|
||||||
|
|
||||||
|
|
@ -4699,10 +4716,10 @@ line900:
|
||||||
gIstotd = here->BSIM4gIgcsd;
|
gIstotd = here->BSIM4gIgcsd;
|
||||||
gIstots = here->BSIM4gIgss + here->BSIM4gIgcss;
|
gIstots = here->BSIM4gIgss + here->BSIM4gIgcss;
|
||||||
gIstotb = here->BSIM4gIgcsb;
|
gIstotb = here->BSIM4gIgcsb;
|
||||||
Istoteq = model->BSIM4type * (here->BSIM4Igs + here->BSIM4Igcs
|
Istoteq = model->BSIM4type * (here->BSIM4Igs + here->BSIM4Igcs
|
||||||
- gIstotg * vgs - here->BSIM4gIgcsd * vds
|
- gIstotg * vgs - here->BSIM4gIgcsd * vds
|
||||||
- here->BSIM4gIgcsb * vbs);
|
- here->BSIM4gIgcsb * vbs);
|
||||||
|
Istoteq_fvk = model->BSIM4type * (here->BSIM4Igs + here->BSIM4Igcs) ;
|
||||||
gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcdg;
|
gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcdg;
|
||||||
gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcdd;
|
gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcdd;
|
||||||
gIdtots = here->BSIM4gIgcds;
|
gIdtots = here->BSIM4gIgcds;
|
||||||
|
|
@ -4710,10 +4727,11 @@ line900:
|
||||||
Idtoteq = model->BSIM4type * (here->BSIM4Igd + here->BSIM4Igcd
|
Idtoteq = model->BSIM4type * (here->BSIM4Igd + here->BSIM4Igcd
|
||||||
- here->BSIM4gIgdg * vgd - here->BSIM4gIgcdg * vgs
|
- here->BSIM4gIgdg * vgd - here->BSIM4gIgcdg * vgs
|
||||||
- here->BSIM4gIgcdd * vds - here->BSIM4gIgcdb * vbs);
|
- here->BSIM4gIgcdd * vds - here->BSIM4gIgcdb * vbs);
|
||||||
|
Idtoteq_fvk = model->BSIM4type * (here->BSIM4Igd + here->BSIM4Igcd) ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0;
|
{ gIstotg = gIstotd = gIstots = gIstotb = Istoteq = Istoteq_fvk = 0.0;
|
||||||
gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0;
|
gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = Idtoteq_fvk = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model->BSIM4igbMod)
|
if (model->BSIM4igbMod)
|
||||||
|
|
@ -4724,19 +4742,21 @@ line900:
|
||||||
Ibtoteq = model->BSIM4type * (here->BSIM4Igb
|
Ibtoteq = model->BSIM4type * (here->BSIM4Igb
|
||||||
- here->BSIM4gIgbg * vgs - here->BSIM4gIgbd * vds
|
- here->BSIM4gIgbg * vgs - here->BSIM4gIgbd * vds
|
||||||
- here->BSIM4gIgbb * vbs);
|
- here->BSIM4gIgbb * vbs);
|
||||||
|
Ibtoteq_fvk = model->BSIM4type * here->BSIM4Igb ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0;
|
gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = Ibtoteq_fvk = 0.0;
|
||||||
|
|
||||||
if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0))
|
if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0))
|
||||||
{ gIgtotg = gIstotg + gIdtotg + gIbtotg;
|
{ gIgtotg = gIstotg + gIdtotg + gIbtotg;
|
||||||
gIgtotd = gIstotd + gIdtotd + gIbtotd ;
|
gIgtotd = gIstotd + gIdtotd + gIbtotd ;
|
||||||
gIgtots = gIstots + gIdtots + gIbtots;
|
gIgtots = gIstots + gIdtots + gIbtots;
|
||||||
gIgtotb = gIstotb + gIdtotb + gIbtotb;
|
gIgtotb = gIstotb + gIdtotb + gIbtotb;
|
||||||
Igtoteq = Istoteq + Idtoteq + Ibtoteq;
|
Igtoteq = Istoteq + Idtoteq + Ibtoteq;
|
||||||
|
Igtoteq_fvk = Istoteq_fvk + Idtoteq_fvk + Ibtoteq_fvk ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0;
|
gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = Igtoteq_fvk = 0.0;
|
||||||
|
|
||||||
|
|
||||||
if (here->BSIM4rgateMod == 2)
|
if (here->BSIM4rgateMod == 2)
|
||||||
|
|
@ -4764,14 +4784,15 @@ line900:
|
||||||
|
|
||||||
ceqdrn = -model->BSIM4type * (cdrain + here->BSIM4gds * vds
|
ceqdrn = -model->BSIM4type * (cdrain + here->BSIM4gds * vds
|
||||||
+ Gm * vgd + Gmbs * vbd);
|
+ Gm * vgd + Gmbs * vbd);
|
||||||
|
ceqdrn_fvk = -model->BSIM4type * cdrain ;
|
||||||
ceqbs = model->BSIM4type * (here->BSIM4csub + here->BSIM4Igisl
|
ceqbs = model->BSIM4type * (here->BSIM4csub + here->BSIM4Igisl
|
||||||
+ (here->BSIM4gbds + here->BSIM4ggisls) * vds
|
+ (here->BSIM4gbds + here->BSIM4ggisls) * vds
|
||||||
- (here->BSIM4gbgs + here->BSIM4ggislg) * vgd
|
- (here->BSIM4gbgs + here->BSIM4ggislg) * vgd
|
||||||
- (here->BSIM4gbbs + here->BSIM4ggislb) * vbd);
|
- (here->BSIM4gbbs + here->BSIM4ggislb) * vbd);
|
||||||
|
ceqbs_fvk = model->BSIM4type * (here->BSIM4csub + here->BSIM4Igisl) ;
|
||||||
ceqbd = model->BSIM4type * (here->BSIM4Igidl - here->BSIM4ggidld * vds
|
ceqbd = model->BSIM4type * (here->BSIM4Igidl - here->BSIM4ggidld * vds
|
||||||
- here->BSIM4ggidlg * vgs - here->BSIM4ggidlb * vbs);
|
- here->BSIM4ggidlg * vgs - here->BSIM4ggidlb * vbs);
|
||||||
|
ceqbd_fvk = model->BSIM4type * here->BSIM4Igidl ;
|
||||||
gbbsp = -(here->BSIM4gbds);
|
gbbsp = -(here->BSIM4gbds);
|
||||||
gbbdp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs;
|
gbbdp = here->BSIM4gbds + here->BSIM4gbgs + here->BSIM4gbbs;
|
||||||
|
|
||||||
|
|
@ -4791,20 +4812,21 @@ line900:
|
||||||
gIstots = here->BSIM4gIgss + here->BSIM4gIgcdd;
|
gIstots = here->BSIM4gIgss + here->BSIM4gIgcdd;
|
||||||
gIstotb = here->BSIM4gIgcdb;
|
gIstotb = here->BSIM4gIgcdb;
|
||||||
Istoteq = model->BSIM4type * (here->BSIM4Igs + here->BSIM4Igcd
|
Istoteq = model->BSIM4type * (here->BSIM4Igs + here->BSIM4Igcd
|
||||||
- here->BSIM4gIgsg * vgs - here->BSIM4gIgcdg * vgd
|
- here->BSIM4gIgsg * vgs - here->BSIM4gIgcdg * vgd
|
||||||
+ here->BSIM4gIgcdd * vds - here->BSIM4gIgcdb * vbd);
|
+ here->BSIM4gIgcdd * vds - here->BSIM4gIgcdb * vbd);
|
||||||
|
Istoteq_fvk = model->BSIM4type * (here->BSIM4Igs + here->BSIM4Igcd) ;
|
||||||
gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcsg;
|
gIdtotg = here->BSIM4gIgdg + here->BSIM4gIgcsg;
|
||||||
gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcss;
|
gIdtotd = here->BSIM4gIgdd + here->BSIM4gIgcss;
|
||||||
gIdtots = here->BSIM4gIgcsd;
|
gIdtots = here->BSIM4gIgcsd;
|
||||||
gIdtotb = here->BSIM4gIgcsb;
|
gIdtotb = here->BSIM4gIgcsb;
|
||||||
Idtoteq = model->BSIM4type * (here->BSIM4Igd + here->BSIM4Igcs
|
Idtoteq = model->BSIM4type * (here->BSIM4Igd + here->BSIM4Igcs
|
||||||
- (here->BSIM4gIgdg + here->BSIM4gIgcsg) * vgd
|
- (here->BSIM4gIgdg + here->BSIM4gIgcsg) * vgd
|
||||||
+ here->BSIM4gIgcsd * vds - here->BSIM4gIgcsb * vbd);
|
+ here->BSIM4gIgcsd * vds - here->BSIM4gIgcsb * vbd);
|
||||||
|
Idtoteq_fvk = model->BSIM4type * (here->BSIM4Igd + here->BSIM4Igcs) ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ gIstotg = gIstotd = gIstots = gIstotb = Istoteq = 0.0;
|
{ gIstotg = gIstotd = gIstots = gIstotb = Istoteq = Istoteq_fvk = 0.0;
|
||||||
gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = 0.0;
|
gIdtotg = gIdtotd = gIdtots = gIdtotb = Idtoteq = Idtoteq_fvk = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model->BSIM4igbMod)
|
if (model->BSIM4igbMod)
|
||||||
|
|
@ -4813,11 +4835,12 @@ line900:
|
||||||
gIbtots = here->BSIM4gIgbd;
|
gIbtots = here->BSIM4gIgbd;
|
||||||
gIbtotb = here->BSIM4gIgbb;
|
gIbtotb = here->BSIM4gIgbb;
|
||||||
Ibtoteq = model->BSIM4type * (here->BSIM4Igb
|
Ibtoteq = model->BSIM4type * (here->BSIM4Igb
|
||||||
- here->BSIM4gIgbg * vgd + here->BSIM4gIgbd * vds
|
- here->BSIM4gIgbg * vgd + here->BSIM4gIgbd * vds
|
||||||
- here->BSIM4gIgbb * vbd);
|
- here->BSIM4gIgbb * vbd);
|
||||||
|
Ibtoteq_fvk = model->BSIM4type * here->BSIM4Igb ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = 0.0;
|
gIbtotg = gIbtotd = gIbtots = gIbtotb = Ibtoteq = Ibtoteq_fvk = 0.0;
|
||||||
|
|
||||||
if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0))
|
if ((model->BSIM4igcMod != 0) || (model->BSIM4igbMod != 0))
|
||||||
{ gIgtotg = gIstotg + gIdtotg + gIbtotg;
|
{ gIgtotg = gIstotg + gIdtotg + gIbtotg;
|
||||||
|
|
@ -4825,9 +4848,10 @@ line900:
|
||||||
gIgtots = gIstots + gIdtots + gIbtots;
|
gIgtots = gIstots + gIdtots + gIbtots;
|
||||||
gIgtotb = gIstotb + gIdtotb + gIbtotb;
|
gIgtotb = gIstotb + gIdtotb + gIbtotb;
|
||||||
Igtoteq = Istoteq + Idtoteq + Ibtoteq;
|
Igtoteq = Istoteq + Idtoteq + Ibtoteq;
|
||||||
|
Igtoteq_fvk = Istoteq_fvk + Idtoteq_fvk + Ibtoteq_fvk ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0;
|
gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = Igtoteq_fvk = 0.0;
|
||||||
|
|
||||||
|
|
||||||
if (here->BSIM4rgateMod == 2)
|
if (here->BSIM4rgateMod == 2)
|
||||||
|
|
@ -4874,28 +4898,42 @@ line900:
|
||||||
|
|
||||||
if (model->BSIM4type > 0)
|
if (model->BSIM4type > 0)
|
||||||
{ ceqjs = (here->BSIM4cbs - here->BSIM4gbs * vbs_jct);
|
{ ceqjs = (here->BSIM4cbs - here->BSIM4gbs * vbs_jct);
|
||||||
|
ceqjs_fvk = here->BSIM4cbs ;
|
||||||
ceqjd = (here->BSIM4cbd - here->BSIM4gbd * vbd_jct);
|
ceqjd = (here->BSIM4cbd - here->BSIM4gbd * vbd_jct);
|
||||||
|
ceqjd_fvk = here->BSIM4cbd ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ ceqjs = -(here->BSIM4cbs - here->BSIM4gbs * vbs_jct);
|
{ ceqjs = -(here->BSIM4cbs - here->BSIM4gbs * vbs_jct);
|
||||||
|
ceqjs_fvk = -here->BSIM4cbs ;
|
||||||
ceqjd = -(here->BSIM4cbd - here->BSIM4gbd * vbd_jct);
|
ceqjd = -(here->BSIM4cbd - here->BSIM4gbd * vbd_jct);
|
||||||
|
ceqjd_fvk = -here->BSIM4cbd ;
|
||||||
ceqqg = -ceqqg;
|
ceqqg = -ceqqg;
|
||||||
|
ceqqg_fvk = -ceqqg_fvk ;
|
||||||
ceqqd = -ceqqd;
|
ceqqd = -ceqqd;
|
||||||
|
ceqqd_fvk = -ceqqd_fvk ;
|
||||||
ceqqb = -ceqqb;
|
ceqqb = -ceqqb;
|
||||||
|
ceqqb_fvk = -ceqqb_fvk ;
|
||||||
ceqgcrg = -ceqgcrg;
|
ceqgcrg = -ceqgcrg;
|
||||||
|
|
||||||
if (here->BSIM4trnqsMod)
|
if (here->BSIM4trnqsMod)
|
||||||
{ cqdef = -cqdef;
|
{ cqdef = -cqdef;
|
||||||
|
cqdef_fvk = -cqdef_fvk ;
|
||||||
cqcheq = -cqcheq;
|
cqcheq = -cqcheq;
|
||||||
|
cqcheq_fvk = -cqcheq_fvk ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (here->BSIM4rbodyMod)
|
if (here->BSIM4rbodyMod)
|
||||||
{ ceqqjs = -ceqqjs;
|
{ ceqqjs = -ceqqjs;
|
||||||
|
ceqqjs_fvk = -ceqqjs_fvk ;
|
||||||
ceqqjd = -ceqqjd;
|
ceqqjd = -ceqqjd;
|
||||||
|
ceqqjd_fvk = -ceqqjd_fvk ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (here->BSIM4rgateMod == 3)
|
if (here->BSIM4rgateMod == 3)
|
||||||
|
{
|
||||||
ceqqgmid = -ceqqgmid;
|
ceqqgmid = -ceqqgmid;
|
||||||
|
ceqqgmid_fvk = -ceqqgmid_fvk ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -4937,37 +4975,35 @@ line900:
|
||||||
if (here->BSIM4trnqsMod)
|
if (here->BSIM4trnqsMod)
|
||||||
here->BSIM4rhsq = m * (cqcheq - cqdef);
|
here->BSIM4rhsq = m * (cqcheq - cqdef);
|
||||||
#else
|
#else
|
||||||
(*(ckt->CKTrhs + here->BSIM4dNodePrime) += m * (ceqjd - ceqbd + ceqgdtot
|
(*(ckt->CKTrhs + here->BSIM4dNodePrime) += m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq)); /* NO ceqgdtot in FVK */
|
||||||
- ceqdrn - ceqqd + Idtoteq));
|
|
||||||
(*(ckt->CKTrhs + here->BSIM4gNodePrime) -= m * (ceqqg - ceqgcrg + Igtoteq));
|
(*(ckt->CKTrhs + here->BSIM4gNodePrime) -= m * (ceqqg - ceqgcrg + Igtoteq)); /* NO ceqgcrg in FVK */
|
||||||
|
|
||||||
if (here->BSIM4rgateMod == 2)
|
if (here->BSIM4rgateMod == 2)
|
||||||
(*(ckt->CKTrhs + here->BSIM4gNodeExt) -= m * ceqgcrg);
|
(*(ckt->CKTrhs + here->BSIM4gNodeExt) -= m * ceqgcrg); /* NO ceqgcrg in FVK */
|
||||||
else if (here->BSIM4rgateMod == 3)
|
else if (here->BSIM4rgateMod == 3)
|
||||||
(*(ckt->CKTrhs + here->BSIM4gNodeMid) -= m * (ceqqgmid + ceqgcrg));
|
(*(ckt->CKTrhs + here->BSIM4gNodeMid) -= m * (ceqqgmid + ceqgcrg)); /* NO ceqgcrg in FVK */
|
||||||
|
|
||||||
if (!here->BSIM4rbodyMod)
|
if (!here->BSIM4rbodyMod)
|
||||||
{ (*(ckt->CKTrhs + here->BSIM4bNodePrime) += m * (ceqbd + ceqbs - ceqjd
|
{ (*(ckt->CKTrhs + here->BSIM4bNodePrime) += m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq));
|
||||||
- ceqjs - ceqqb + Ibtoteq));
|
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += m * (ceqdrn - ceqbs + ceqjs
|
||||||
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += m * (ceqdrn - ceqbs + ceqjs
|
+ ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq)); /* NO ceqgstot in FVK */
|
||||||
+ ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{ (*(ckt->CKTrhs + here->BSIM4dbNode) -= m * (ceqjd + ceqqjd));
|
{ (*(ckt->CKTrhs + here->BSIM4dbNode) -= m * (ceqjd + ceqqjd));
|
||||||
(*(ckt->CKTrhs + here->BSIM4bNodePrime) += m * (ceqbd + ceqbs - ceqqb + Ibtoteq));
|
(*(ckt->CKTrhs + here->BSIM4bNodePrime) += m * (ceqbd + ceqbs - ceqqb + Ibtoteq));
|
||||||
(*(ckt->CKTrhs + here->BSIM4sbNode) -= m * (ceqjs + ceqqjs));
|
(*(ckt->CKTrhs + here->BSIM4sbNode) -= m * (ceqjs + ceqqjs));
|
||||||
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqd
|
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqd
|
||||||
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq));
|
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq)); /* NO ceqgstot in FVK */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model->BSIM4rdsMod)
|
if (model->BSIM4rdsMod)
|
||||||
{ (*(ckt->CKTrhs + here->BSIM4dNode) -= m * ceqgdtot);
|
{ (*(ckt->CKTrhs + here->BSIM4dNode) -= m * ceqgdtot); /* NO ceqgdtot in FVK */
|
||||||
(*(ckt->CKTrhs + here->BSIM4sNode) += m * ceqgstot);
|
(*(ckt->CKTrhs + here->BSIM4sNode) += m * ceqgstot); /* NO ceqgstot in FVK */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (here->BSIM4trnqsMod)
|
if (here->BSIM4trnqsMod)
|
||||||
*(ckt->CKTrhs + here->BSIM4qNode) += m * (cqcheq - cqdef);
|
(*(ckt->CKTrhs + here->BSIM4qNode) += m * (cqcheq - cqdef));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -5167,7 +5203,7 @@ line900:
|
||||||
(*(here->BSIM4GEbpPtr) += m * gcrgb);
|
(*(here->BSIM4GEbpPtr) += m * gcrgb);
|
||||||
|
|
||||||
(*(here->BSIM4GPgePtr) -= m * gcrg);
|
(*(here->BSIM4GPgePtr) -= m * gcrg);
|
||||||
(*(here->BSIM4GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg));
|
(*(here->BSIM4GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg));
|
||||||
(*(here->BSIM4GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd));
|
(*(here->BSIM4GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd));
|
||||||
(*(here->BSIM4GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots));
|
(*(here->BSIM4GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots));
|
||||||
(*(here->BSIM4GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb));
|
(*(here->BSIM4GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb));
|
||||||
|
|
@ -5309,8 +5345,268 @@ line900:
|
||||||
(*(here->BSIM4SPqPtr) += m * sxpart * here->BSIM4gtau);
|
(*(here->BSIM4SPqPtr) += m * sxpart * here->BSIM4gtau);
|
||||||
(*(here->BSIM4GPqPtr) -= m * here->BSIM4gtau);
|
(*(here->BSIM4GPqPtr) -= m * here->BSIM4gtau);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////
|
||||||
|
|
||||||
|
/* KCL verification - Linear and Dynamic Part */
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * (ceqjd_fvk - ceqbd_fvk - ceqdrn_fvk - ceqqd_fvk + Idtoteq_fvk) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNodePrime) += m * (T1 * ddxpart_dVd + dxpart * ggtd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * gdtot * *(ckt->CKTrhsOld+here->BSIM4dNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNodePrime) += m * (dxpart * ggtg + T1 * ddxpart_dVg) * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * (- dxpart * ggts - T1 * ddxpart_dVs) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * (- T1 * ddxpart_dVb - dxpart * ggtb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (ceqqg_fvk + Igtoteq_fvk) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * (- gcsdb - T1 * dsxpart_dVd - sxpart * ggtd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) += m * (gcsgb + sxpart * ggtg + T1 * dsxpart_dVg) * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) += m * (T1 * dsxpart_dVs + gstot + gcssb + sxpart * ggts) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * gstot * *(ckt->CKTrhsOld+here->BSIM4sNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * (gjbs - gcsbb - sxpart * ggtb - T1 * dsxpart_dVb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (- gjbd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (- gjbs) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (gjbd + gjbs - gcbgmb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
|
||||||
|
if (here->BSIM4rgateMod == 1)
|
||||||
|
{
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (- ggtg + gIgtotg) * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (- ggtd + gIgtotd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (- ggts + gIgtots) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (- ggtb + gIgtotb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!here->BSIM4rbodyMod)
|
||||||
|
{
|
||||||
|
} else {
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dbNode) += m * (ceqjd_fvk + ceqqjd_fvk) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * (ceqbd_fvk + ceqbs_fvk - ceqqb_fvk + Ibtoteq_fvk) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sbNode) += m * (ceqjs_fvk + ceqqjs_fvk) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * (ceqdrn_fvk - ceqbs_fvk + ceqjs_fvk + ceqqd_SnodePrime_fvk + ceqqg_SnodePrime_fvk + ceqqb_SnodePrime_fvk + ceqqjd_SnodePrime_fvk + ceqqjs_SnodePrime_fvk + ceqqgmid_fvk + Istoteq_fvk) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* KCL verification - Linear and Static Part */
|
||||||
|
if (here->BSIM4rgateMod == 1)
|
||||||
|
{
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodeExt) += m * geltd * *(ckt->CKTrhsOld+here->BSIM4gNodeExt) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodePrime) -= m * geltd * *(ckt->CKTrhsOld+here->BSIM4gNodeExt) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodeExt) -= m * geltd * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4gNodePrime) += m * geltd * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNodePrime) += m * gdpr * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * gdpr * *(ckt->CKTrhsOld+here->BSIM4dNode) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNode) -= m * gdpr * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dNode) += m * gdpr * *(ckt->CKTrhsOld+here->BSIM4dNode) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) += m * gspr * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * gspr * *(ckt->CKTrhsOld+here->BSIM4sNode) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNode) -= m * gspr * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNode) += m * gspr * *(ckt->CKTrhsOld+here->BSIM4sNode) ;
|
||||||
|
|
||||||
|
if (here->BSIM4rbodyMod)
|
||||||
|
{
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * (- gcsbsb) * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dbNode) += m * here->BSIM4grbdb * *(ckt->CKTrhsOld+here->BSIM4dbNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dbNode) -= m * here->BSIM4grbdb * *(ckt->CKTrhsOld+here->BSIM4bNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dbNode) += m * here->BSIM4grbpd * *(ckt->CKTrhsOld+here->BSIM4dbNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4dbNode) -= m * here->BSIM4grbpd * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * here->BSIM4grbpd * *(ckt->CKTrhsOld+here->BSIM4dbNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * here->BSIM4grbpb * *(ckt->CKTrhsOld+here->BSIM4bNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * here->BSIM4grbps * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (here->BSIM4grbpd + here->BSIM4grbps + here->BSIM4grbpb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sbNode) -= m * here->BSIM4grbps * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sbNode) -= m * here->BSIM4grbsb * *(ckt->CKTrhsOld+here->BSIM4bNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sbNode) += m * here->BSIM4grbsb * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4sbNode) += m * here->BSIM4grbps * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;
|
||||||
|
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNode) -= m * here->BSIM4grbdb * *(ckt->CKTrhsOld+here->BSIM4dbNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNode) -= m * here->BSIM4grbpb * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNode) -= m * here->BSIM4grbsb * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;
|
||||||
|
*(ckt->CKTfvk+here->BSIM4bNode) += m * (here->BSIM4grbsb + here->BSIM4grbdb + here->BSIM4grbpb) * *(ckt->CKTrhsOld+here->BSIM4bNode) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
//A*V-B
|
||||||
|
// if (here->BSIM4rgateMod == 1)
|
||||||
|
// {
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4gNodeExt) += m * geltd * *(ckt->CKTrhsOld+here->BSIM4gNodeExt) ;
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4gNodePrime) -= m * geltd * *(ckt->CKTrhsOld+here->BSIM4gNodeExt) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4gNodeExt) -= m * geltd * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (gcggb - ggtg + gIgtotg) * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (gcgdb - ggtd + gIgtotd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (gcgsb - ggts + gIgtots) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (gcgbb - ggtb + gIgtotb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
// }
|
||||||
|
/* else if (here->BSIM4rgateMod == 2)
|
||||||
|
{ (*(here->BSIM4GEgePtr) += m * gcrg);
|
||||||
|
(*(here->BSIM4GEgpPtr) += m * gcrgg);
|
||||||
|
(*(here->BSIM4GEdpPtr) += m * gcrgd);
|
||||||
|
(*(here->BSIM4GEspPtr) += m * gcrgs);
|
||||||
|
(*(here->BSIM4GEbpPtr) += m * gcrgb);
|
||||||
|
|
||||||
|
(*(here->BSIM4GPgePtr) -= m * gcrg);
|
||||||
|
(*(here->BSIM4GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg));
|
||||||
|
(*(here->BSIM4GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd));
|
||||||
|
(*(here->BSIM4GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots));
|
||||||
|
(*(here->BSIM4GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb));
|
||||||
|
}
|
||||||
|
else if (here->BSIM4rgateMod == 3)
|
||||||
|
{ (*(here->BSIM4GEgePtr) += m * geltd);
|
||||||
|
(*(here->BSIM4GEgmPtr) -= m * geltd);
|
||||||
|
(*(here->BSIM4GMgePtr) -= m * geltd);
|
||||||
|
(*(here->BSIM4GMgmPtr) += m * (geltd + gcrg + gcgmgmb));
|
||||||
|
|
||||||
|
(*(here->BSIM4GMdpPtr) += m * (gcrgd + gcgmdb));
|
||||||
|
(*(here->BSIM4GMgpPtr) += m * gcrgg);
|
||||||
|
(*(here->BSIM4GMspPtr) += m * (gcrgs + gcgmsb));
|
||||||
|
(*(here->BSIM4GMbpPtr) += m * (gcrgb + gcgmbb));
|
||||||
|
|
||||||
|
(*(here->BSIM4DPgmPtr) += m * gcdgmb);
|
||||||
|
(*(here->BSIM4GPgmPtr) -= m * gcrg);
|
||||||
|
(*(here->BSIM4SPgmPtr) += m * gcsgmb);
|
||||||
|
(*(here->BSIM4BPgmPtr) += m * gcbgmb);
|
||||||
|
|
||||||
|
(*(here->BSIM4GPgpPtr) += m * (gcggb - gcrgg - ggtg + gIgtotg));
|
||||||
|
(*(here->BSIM4GPdpPtr) += m * (gcgdb - gcrgd - ggtd + gIgtotd));
|
||||||
|
(*(here->BSIM4GPspPtr) += m * (gcgsb - gcrgs - ggts + gIgtots));
|
||||||
|
(*(here->BSIM4GPbpPtr) += m * (gcgbb - gcrgb - ggtb + gIgtotb));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ (*(here->BSIM4GPgpPtr) += m * (gcggb - ggtg + gIgtotg));
|
||||||
|
(*(here->BSIM4GPdpPtr) += m * (gcgdb - ggtd + gIgtotd));
|
||||||
|
(*(here->BSIM4GPspPtr) += m * (gcgsb - ggts + gIgtots));
|
||||||
|
(*(here->BSIM4GPbpPtr) += m * (gcgbb - ggtb + gIgtotb));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (model->BSIM4rdsMod)
|
||||||
|
{ (*(here->BSIM4DgpPtr) += m * gdtotg);
|
||||||
|
(*(here->BSIM4DspPtr) += m * gdtots);
|
||||||
|
(*(here->BSIM4DbpPtr) += m * gdtotb);
|
||||||
|
(*(here->BSIM4SdpPtr) += m * gstotd);
|
||||||
|
(*(here->BSIM4SgpPtr) += m * gstotg);
|
||||||
|
(*(here->BSIM4SbpPtr) += m * gstotb);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) += m * (here->BSIM4gds + here->BSIM4gbd + T1 * ddxpart_dVd - gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * gdtot * *(ckt->CKTrhsOld+here->BSIM4dNode) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) += m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg + dxpart * ggtg + T1 * ddxpart_dVg) * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * (here->BSIM4gds + gdtots - dxpart * ggts + gIdtots - T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb - T1 * ddxpart_dVb - dxpart * ggtb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNode) -= m * (gdpr - gdtotd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNode) += m * (gdpr + gdtot) * *(ckt->CKTrhsOld+here->BSIM4dNode) ;
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * (here->BSIM4gds + gstotd + RevSum - gcsdb - gbspdp - T1 * dsxpart_dVd - sxpart * ggtd + gIstotd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) += m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg + T1 * dsxpart_dVg - gIstotg) * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) += m * (here->BSIM4gds + here->BSIM4gbs + T1 * dsxpart_dVs - gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * gstot * *(ckt->CKTrhsOld+here->BSIM4sNode) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb - T1 * dsxpart_dVb + gIstotb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNode) -= m * (gspr - gstots) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNode) += m * (gspr + gstot) * *(ckt->CKTrhsOld+here->BSIM4sNode) ;
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (gcbdb - gjbd + gbbdp - gIbtotd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (gcbgb - here->BSIM4gbgs - gIbtotg) * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (gcbsb - gjbs + gbbsp - gIbtots) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (gjbd + gjbs + gcbbb - here->BSIM4gbbs - gIbtotb) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
|
||||||
|
|
||||||
|
/* stamp gidl */
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) += m * ggidld * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) += m * ggidlg * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) -= m * (ggidlg + ggidld + ggidlb) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) += m * ggidlb * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * ggidld * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * ggidlg * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (ggidlg + ggidld + ggidlb) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * ggidlb * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
|
||||||
|
/* stamp gisl */
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * (ggisls + ggislg + ggislb) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) += m * ggislg * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) += m * ggisls * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) += m * ggislb * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (ggislg + ggisls + ggislb) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * ggislg * *(ckt->CKTrhsOld+here->BSIM4gNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * ggisls * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * ggislb * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
|
||||||
|
|
||||||
|
// if (here->BSIM4rbodyMod)
|
||||||
|
// {
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dNodePrime) += m * (gcdbdb - here->BSIM4gbd) * *(ckt->CKTrhsOld+here->BSIM4dbNode) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sNodePrime) -= m * (here->BSIM4gbs - gcsbsb) * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dbNode) += m * (gcdbdb - here->BSIM4gbd) * *(ckt->CKTrhsOld+here->BSIM4dNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dbNode) += m * (here->BSIM4gbd - gcdbdb + here->BSIM4grbpd) * *(ckt->CKTrhsOld+here->BSIM4dbNode) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dbNode) -= m * here->BSIM4grbpd * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4dbNode) -= m * here->BSIM4grbdb * *(ckt->CKTrhsOld+here->BSIM4bNode) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * here->BSIM4grbpd * *(ckt->CKTrhsOld+here->BSIM4dbNode) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * here->BSIM4grbpb * *(ckt->CKTrhsOld+here->BSIM4bNode) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) -= m * here->BSIM4grbps * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNodePrime) += m * (here->BSIM4grbpd + here->BSIM4grbps) * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sbNode) += m * (gcsbsb - here->BSIM4gbs) * *(ckt->CKTrhsOld+here->BSIM4sNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sbNode) -= m * here->BSIM4grbps * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sbNode) -= m * here->BSIM4grbsb * *(ckt->CKTrhsOld+here->BSIM4bNode) ;//
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4sbNode) += m * (here->BSIM4gbs - gcsbsb) * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNode) -= m * here->BSIM4grbdb * *(ckt->CKTrhsOld+here->BSIM4dbNode) ;
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNode) -= m * here->BSIM4grbpb * *(ckt->CKTrhsOld+here->BSIM4bNodePrime) ;
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNode) -= m * here->BSIM4grbsb * *(ckt->CKTrhsOld+here->BSIM4sbNode) ;
|
||||||
|
// *(ckt->CKTfvk+here->BSIM4bNode) += m * (here->BSIM4grbsb + here->BSIM4grbdb + here->BSIM4grbpb) * *(ckt->CKTrhsOld+here->BSIM4bNode) ;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk + here->BSIM4dNodePrime) -= m * (ceqjd - ceqbd + ceqgdtot - ceqdrn - ceqqd + Idtoteq) ;//
|
||||||
|
|
||||||
|
// *(ckt->CKTfvk + here->BSIM4gNodePrime) += m * (ceqqg - ceqgcrg + Igtoteq) ;//
|
||||||
|
|
||||||
|
if (here->BSIM4rgateMod == 2)
|
||||||
|
*(ckt->CKTfvk + here->BSIM4gNodeExt) += m * ceqgcrg ;
|
||||||
|
else if (here->BSIM4rgateMod == 3)
|
||||||
|
*(ckt->CKTfvk + here->BSIM4gNodeMid) += m * (ceqqgmid + ceqgcrg) ;
|
||||||
|
|
||||||
|
if (!here->BSIM4rbodyMod)
|
||||||
|
{
|
||||||
|
*(ckt->CKTfvk + here->BSIM4bNodePrime) -= m * (ceqbd + ceqbs - ceqjd - ceqjs - ceqqb + Ibtoteq) ;
|
||||||
|
*(ckt->CKTfvk + here->BSIM4sNodePrime) -= m * (ceqdrn - ceqbs + ceqjs + ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// *(ckt->CKTfvk + here->BSIM4dbNode) += m * (ceqjd + ceqqjd) ;//
|
||||||
|
// *(ckt->CKTfvk + here->BSIM4bNodePrime) -= m * (ceqbd + ceqbs - ceqqb + Ibtoteq) ;//
|
||||||
|
// *(ckt->CKTfvk + here->BSIM4sbNode) += m * (ceqjs + ceqqjs) ;//
|
||||||
|
// *(ckt->CKTfvk + here->BSIM4sNodePrime) -= m * (ceqdrn - ceqbs + ceqjs + ceqqd + ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq) ;//
|
||||||
|
}
|
||||||
|
|
||||||
|
if (model->BSIM4rdsMod)
|
||||||
|
{
|
||||||
|
*(ckt->CKTfvk + here->BSIM4dNode) += m * ceqgdtot ;
|
||||||
|
*(ckt->CKTfvk + here->BSIM4sNode) -= m * ceqgstot ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (here->BSIM4trnqsMod)
|
||||||
|
*(ckt->CKTfvk + here->BSIM4qNode) -= m * (cqcheq - cqdef) ;
|
||||||
|
|
||||||
|
#endif
|
||||||
line1000: ;
|
line1000: ;
|
||||||
|
|
||||||
#ifndef USE_OMP
|
#ifndef USE_OMP
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue