|
|
|
@ -10,7 +10,6 @@ |
|
|
|
**********/ |
|
|
|
|
|
|
|
#include "ngspice.h" |
|
|
|
#include <stdio.h> |
|
|
|
#include "cktdefs.h" |
|
|
|
#include "complex.h" |
|
|
|
#include "sperror.h" |
|
|
|
@ -48,6 +47,7 @@ double ScalingFactor = 1.0e-9; |
|
|
|
struct bsim4v3SizeDependParam *pParam; |
|
|
|
double ggidld, ggidlg, ggidlb,ggisld, ggislg, ggislb, ggisls; |
|
|
|
|
|
|
|
double m; |
|
|
|
|
|
|
|
for (; model != NULL; model = model->BSIM4v3nextModel) |
|
|
|
{ for (here = model->BSIM4v3instances; here!= NULL; |
|
|
|
@ -483,6 +483,8 @@ double ggidld, ggidlg, ggidlb,ggisld, ggislg, ggislb, ggisls; |
|
|
|
* Loading PZ matrix |
|
|
|
*/ |
|
|
|
|
|
|
|
m = here->BSIM4v3m; |
|
|
|
|
|
|
|
if (!model->BSIM4v3rdsMod) |
|
|
|
{ gdpr = here->BSIM4v3drainConductance; |
|
|
|
gspr = here->BSIM4v3sourceConductance; |
|
|
|
@ -500,165 +502,165 @@ double ggidld, ggidlg, ggidlb,ggisld, ggislg, ggislb, ggisls; |
|
|
|
geltd = here->BSIM4v3grgeltd; |
|
|
|
|
|
|
|
if (here->BSIM4v3rgateMod == 1) |
|
|
|
{ *(here->BSIM4v3GEgePtr) += geltd; |
|
|
|
*(here->BSIM4v3GPgePtr) -= geltd; |
|
|
|
*(here->BSIM4v3GEgpPtr) -= geltd; |
|
|
|
|
|
|
|
*(here->BSIM4v3GPgpPtr ) += xcggb * s->real; |
|
|
|
*(here->BSIM4v3GPgpPtr +1) += xcggb * s->imag; |
|
|
|
*(here->BSIM4v3GPgpPtr) += geltd - xgtg + gIgtotg; |
|
|
|
*(here->BSIM4v3GPdpPtr ) += xcgdb * s->real; |
|
|
|
*(here->BSIM4v3GPdpPtr +1) += xcgdb * s->imag; |
|
|
|
*(here->BSIM4v3GPdpPtr) -= xgtd - gIgtotd; |
|
|
|
*(here->BSIM4v3GPspPtr ) += xcgsb * s->real; |
|
|
|
*(here->BSIM4v3GPspPtr +1) += xcgsb * s->imag; |
|
|
|
*(here->BSIM4v3GPspPtr) -= xgts - gIgtots; |
|
|
|
*(here->BSIM4v3GPbpPtr ) += xcgbb * s->real; |
|
|
|
*(here->BSIM4v3GPbpPtr +1) += xcgbb * s->imag; |
|
|
|
*(here->BSIM4v3GPbpPtr) -= xgtb - gIgtotb; |
|
|
|
{ *(here->BSIM4v3GEgePtr) += m * geltd; |
|
|
|
*(here->BSIM4v3GPgePtr) -= m * geltd; |
|
|
|
*(here->BSIM4v3GEgpPtr) -= m * geltd; |
|
|
|
|
|
|
|
*(here->BSIM4v3GPgpPtr ) += m * xcggb * s->real; |
|
|
|
*(here->BSIM4v3GPgpPtr +1) += m * xcggb * s->imag; |
|
|
|
*(here->BSIM4v3GPgpPtr) += m * (geltd - xgtg + gIgtotg); |
|
|
|
*(here->BSIM4v3GPdpPtr ) += m * xcgdb * s->real; |
|
|
|
*(here->BSIM4v3GPdpPtr +1) += m * xcgdb * s->imag; |
|
|
|
*(here->BSIM4v3GPdpPtr) -= m * (xgtd - gIgtotd); |
|
|
|
*(here->BSIM4v3GPspPtr ) += m * xcgsb * s->real; |
|
|
|
*(here->BSIM4v3GPspPtr +1) += m * xcgsb * s->imag; |
|
|
|
*(here->BSIM4v3GPspPtr) -= m * (xgts - gIgtots); |
|
|
|
*(here->BSIM4v3GPbpPtr ) += m * xcgbb * s->real; |
|
|
|
*(here->BSIM4v3GPbpPtr +1) += m * xcgbb * s->imag; |
|
|
|
*(here->BSIM4v3GPbpPtr) -= m * (xgtb - gIgtotb); |
|
|
|
} |
|
|
|
else if (here->BSIM4v3rgateMod == 2) |
|
|
|
{ *(here->BSIM4v3GEgePtr) += gcrg; |
|
|
|
*(here->BSIM4v3GEgpPtr) += gcrgg; |
|
|
|
*(here->BSIM4v3GEdpPtr) += gcrgd; |
|
|
|
*(here->BSIM4v3GEspPtr) += gcrgs; |
|
|
|
*(here->BSIM4v3GEbpPtr) += gcrgb; |
|
|
|
|
|
|
|
*(here->BSIM4v3GPgePtr) -= gcrg; |
|
|
|
*(here->BSIM4v3GPgpPtr ) += xcggb * s->real; |
|
|
|
*(here->BSIM4v3GPgpPtr +1) += xcggb * s->imag; |
|
|
|
*(here->BSIM4v3GPgpPtr) -= gcrgg + xgtg - gIgtotg; |
|
|
|
*(here->BSIM4v3GPdpPtr ) += xcgdb * s->real; |
|
|
|
*(here->BSIM4v3GPdpPtr +1) += xcgdb * s->imag; |
|
|
|
*(here->BSIM4v3GPdpPtr) -= gcrgd + xgtd - gIgtotd; |
|
|
|
*(here->BSIM4v3GPspPtr ) += xcgsb * s->real; |
|
|
|
*(here->BSIM4v3GPspPtr +1) += xcgsb * s->imag; |
|
|
|
*(here->BSIM4v3GPspPtr) -= gcrgs + xgts - gIgtots; |
|
|
|
*(here->BSIM4v3GPbpPtr ) += xcgbb * s->real; |
|
|
|
*(here->BSIM4v3GPbpPtr +1) += xcgbb * s->imag; |
|
|
|
*(here->BSIM4v3GPbpPtr) -= gcrgb + xgtb - gIgtotb; |
|
|
|
{ *(here->BSIM4v3GEgePtr) += m * gcrg; |
|
|
|
*(here->BSIM4v3GEgpPtr) += m * gcrgg; |
|
|
|
*(here->BSIM4v3GEdpPtr) += m * gcrgd; |
|
|
|
*(here->BSIM4v3GEspPtr) += m * gcrgs; |
|
|
|
*(here->BSIM4v3GEbpPtr) += m * gcrgb; |
|
|
|
|
|
|
|
*(here->BSIM4v3GPgePtr) -= m * gcrg; |
|
|
|
*(here->BSIM4v3GPgpPtr ) += m * xcggb * s->real; |
|
|
|
*(here->BSIM4v3GPgpPtr +1) += m * xcggb * s->imag; |
|
|
|
*(here->BSIM4v3GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); |
|
|
|
*(here->BSIM4v3GPdpPtr ) += m * xcgdb * s->real; |
|
|
|
*(here->BSIM4v3GPdpPtr +1) += m * xcgdb * s->imag; |
|
|
|
*(here->BSIM4v3GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); |
|
|
|
*(here->BSIM4v3GPspPtr ) += m * xcgsb * s->real; |
|
|
|
*(here->BSIM4v3GPspPtr +1) += m * xcgsb * s->imag; |
|
|
|
*(here->BSIM4v3GPspPtr) -= m * (gcrgs + xgts - gIgtots); |
|
|
|
*(here->BSIM4v3GPbpPtr ) += m * xcgbb * s->real; |
|
|
|
*(here->BSIM4v3GPbpPtr +1) += m * xcgbb * s->imag; |
|
|
|
*(here->BSIM4v3GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); |
|
|
|
} |
|
|
|
else if (here->BSIM4v3rgateMod == 3) |
|
|
|
{ *(here->BSIM4v3GEgePtr) += geltd; |
|
|
|
*(here->BSIM4v3GEgmPtr) -= geltd; |
|
|
|
*(here->BSIM4v3GMgePtr) -= geltd; |
|
|
|
*(here->BSIM4v3GMgmPtr) += geltd + gcrg; |
|
|
|
*(here->BSIM4v3GMgmPtr ) += xcgmgmb * s->real; |
|
|
|
*(here->BSIM4v3GMgmPtr +1) += xcgmgmb * s->imag; |
|
|
|
{ *(here->BSIM4v3GEgePtr) += m * geltd; |
|
|
|
*(here->BSIM4v3GEgmPtr) -= m * geltd; |
|
|
|
*(here->BSIM4v3GMgePtr) -= m * geltd; |
|
|
|
*(here->BSIM4v3GMgmPtr) += m * (geltd + gcrg); |
|
|
|
*(here->BSIM4v3GMgmPtr ) += m * xcgmgmb * s->real; |
|
|
|
*(here->BSIM4v3GMgmPtr +1) += m * xcgmgmb * s->imag; |
|
|
|
|
|
|
|
*(here->BSIM4v3GMdpPtr) += gcrgd; |
|
|
|
*(here->BSIM4v3GMdpPtr ) += xcgmdb * s->real; |
|
|
|
*(here->BSIM4v3GMdpPtr +1) += xcgmdb * s->imag; |
|
|
|
*(here->BSIM4v3GMgpPtr) += gcrgg; |
|
|
|
*(here->BSIM4v3GMspPtr) += gcrgs; |
|
|
|
*(here->BSIM4v3GMspPtr ) += xcgmsb * s->real; |
|
|
|
*(here->BSIM4v3GMspPtr +1) += xcgmsb * s->imag; |
|
|
|
*(here->BSIM4v3GMbpPtr) += gcrgb; |
|
|
|
*(here->BSIM4v3GMbpPtr ) += xcgmbb * s->real; |
|
|
|
*(here->BSIM4v3GMbpPtr +1) += xcgmbb * s->imag; |
|
|
|
*(here->BSIM4v3GMdpPtr) += m * gcrgd; |
|
|
|
*(here->BSIM4v3GMdpPtr ) += m * xcgmdb * s->real; |
|
|
|
*(here->BSIM4v3GMdpPtr +1) += m * xcgmdb * s->imag; |
|
|
|
*(here->BSIM4v3GMgpPtr) += m * gcrgg; |
|
|
|
*(here->BSIM4v3GMspPtr) += m * gcrgs; |
|
|
|
*(here->BSIM4v3GMspPtr ) += m * xcgmsb * s->real; |
|
|
|
*(here->BSIM4v3GMspPtr +1) += m * xcgmsb * s->imag; |
|
|
|
*(here->BSIM4v3GMbpPtr) += m * gcrgb; |
|
|
|
*(here->BSIM4v3GMbpPtr ) += m * xcgmbb * s->real; |
|
|
|
*(here->BSIM4v3GMbpPtr +1) += m * xcgmbb * s->imag; |
|
|
|
|
|
|
|
*(here->BSIM4v3DPgmPtr ) += xcdgmb * s->real; |
|
|
|
*(here->BSIM4v3DPgmPtr +1) += xcdgmb * s->imag; |
|
|
|
*(here->BSIM4v3GPgmPtr) -= gcrg; |
|
|
|
*(here->BSIM4v3SPgmPtr ) += xcsgmb * s->real; |
|
|
|
*(here->BSIM4v3SPgmPtr +1) += xcsgmb * s->imag; |
|
|
|
*(here->BSIM4v3BPgmPtr ) += xcbgmb * s->real; |
|
|
|
*(here->BSIM4v3BPgmPtr +1) += xcbgmb * s->imag; |
|
|
|
*(here->BSIM4v3DPgmPtr ) += m * xcdgmb * s->real; |
|
|
|
*(here->BSIM4v3DPgmPtr +1) += m * xcdgmb * s->imag; |
|
|
|
*(here->BSIM4v3GPgmPtr) -= m * gcrg; |
|
|
|
*(here->BSIM4v3SPgmPtr ) += m * xcsgmb * s->real; |
|
|
|
*(here->BSIM4v3SPgmPtr +1) += m * xcsgmb * s->imag; |
|
|
|
*(here->BSIM4v3BPgmPtr ) += m * xcbgmb * s->real; |
|
|
|
*(here->BSIM4v3BPgmPtr +1) += m * xcbgmb * s->imag; |
|
|
|
|
|
|
|
*(here->BSIM4v3GPgpPtr) -= gcrgg + xgtg - gIgtotg; |
|
|
|
*(here->BSIM4v3GPgpPtr ) += xcggb * s->real; |
|
|
|
*(here->BSIM4v3GPgpPtr +1) += xcggb * s->imag; |
|
|
|
*(here->BSIM4v3GPdpPtr) -= gcrgd + xgtd - gIgtotd; |
|
|
|
*(here->BSIM4v3GPdpPtr ) += xcgdb * s->real; |
|
|
|
*(here->BSIM4v3GPdpPtr +1) += xcgdb * s->imag; |
|
|
|
*(here->BSIM4v3GPspPtr) -= gcrgs + xgts - gIgtots; |
|
|
|
*(here->BSIM4v3GPspPtr ) += xcgsb * s->real; |
|
|
|
*(here->BSIM4v3GPspPtr +1) += xcgsb * s->imag; |
|
|
|
*(here->BSIM4v3GPbpPtr) -= gcrgb + xgtb - gIgtotb; |
|
|
|
*(here->BSIM4v3GPbpPtr ) += xcgbb * s->real; |
|
|
|
*(here->BSIM4v3GPbpPtr +1) += xcgbb * s->imag; |
|
|
|
*(here->BSIM4v3GPgpPtr) -= m * (gcrgg + xgtg - gIgtotg); |
|
|
|
*(here->BSIM4v3GPgpPtr ) += m * xcggb * s->real; |
|
|
|
*(here->BSIM4v3GPgpPtr +1) += m * xcggb * s->imag; |
|
|
|
*(here->BSIM4v3GPdpPtr) -= m * (gcrgd + xgtd - gIgtotd); |
|
|
|
*(here->BSIM4v3GPdpPtr ) += m * xcgdb * s->real; |
|
|
|
*(here->BSIM4v3GPdpPtr +1) += m * xcgdb * s->imag; |
|
|
|
*(here->BSIM4v3GPspPtr) -= m * (gcrgs + xgts - gIgtots); |
|
|
|
*(here->BSIM4v3GPspPtr ) += m * xcgsb * s->real; |
|
|
|
*(here->BSIM4v3GPspPtr +1) += m * xcgsb * s->imag; |
|
|
|
*(here->BSIM4v3GPbpPtr) -= m * (gcrgb + xgtb - gIgtotb); |
|
|
|
*(here->BSIM4v3GPbpPtr ) += m * xcgbb * s->real; |
|
|
|
*(here->BSIM4v3GPbpPtr +1) += m * xcgbb * s->imag; |
|
|
|
} |
|
|
|
else |
|
|
|
{ *(here->BSIM4v3GPdpPtr ) += xcgdb * s->real; |
|
|
|
*(here->BSIM4v3GPdpPtr +1) += xcgdb * s->imag; |
|
|
|
*(here->BSIM4v3GPdpPtr) -= xgtd - gIgtotd; |
|
|
|
*(here->BSIM4v3GPgpPtr ) += xcggb * s->real; |
|
|
|
*(here->BSIM4v3GPgpPtr +1) += xcggb * s->imag; |
|
|
|
*(here->BSIM4v3GPgpPtr) -= xgtg - gIgtotg; |
|
|
|
*(here->BSIM4v3GPspPtr ) += xcgsb * s->real; |
|
|
|
*(here->BSIM4v3GPspPtr +1) += xcgsb * s->imag; |
|
|
|
*(here->BSIM4v3GPspPtr) -= xgts - gIgtots; |
|
|
|
*(here->BSIM4v3GPbpPtr ) += xcgbb * s->real; |
|
|
|
*(here->BSIM4v3GPbpPtr +1) += xcgbb * s->imag; |
|
|
|
*(here->BSIM4v3GPbpPtr) -= xgtb - gIgtotb; |
|
|
|
{ *(here->BSIM4v3GPdpPtr ) += m * xcgdb * s->real; |
|
|
|
*(here->BSIM4v3GPdpPtr +1) += m * xcgdb * s->imag; |
|
|
|
*(here->BSIM4v3GPdpPtr) -= m * (xgtd - gIgtotd); |
|
|
|
*(here->BSIM4v3GPgpPtr ) += m * xcggb * s->real; |
|
|
|
*(here->BSIM4v3GPgpPtr +1) += m * xcggb * s->imag; |
|
|
|
*(here->BSIM4v3GPgpPtr) -= m * (xgtg - gIgtotg); |
|
|
|
*(here->BSIM4v3GPspPtr ) += m * xcgsb * s->real; |
|
|
|
*(here->BSIM4v3GPspPtr +1) += m * xcgsb * s->imag; |
|
|
|
*(here->BSIM4v3GPspPtr) -= m * (xgts - gIgtots); |
|
|
|
*(here->BSIM4v3GPbpPtr ) += m * xcgbb * s->real; |
|
|
|
*(here->BSIM4v3GPbpPtr +1) += m * xcgbb * s->imag; |
|
|
|
*(here->BSIM4v3GPbpPtr) -= m * (xgtb - gIgtotb); |
|
|
|
} |
|
|
|
|
|
|
|
if (model->BSIM4v3rdsMod) |
|
|
|
{ (*(here->BSIM4v3DgpPtr) += gdtotg); |
|
|
|
(*(here->BSIM4v3DspPtr) += gdtots); |
|
|
|
(*(here->BSIM4v3DbpPtr) += gdtotb); |
|
|
|
(*(here->BSIM4v3SdpPtr) += gstotd); |
|
|
|
(*(here->BSIM4v3SgpPtr) += gstotg); |
|
|
|
(*(here->BSIM4v3SbpPtr) += gstotb); |
|
|
|
{ (*(here->BSIM4v3DgpPtr) += m * gdtotg); |
|
|
|
(*(here->BSIM4v3DspPtr) += m * gdtots); |
|
|
|
(*(here->BSIM4v3DbpPtr) += m * gdtotb); |
|
|
|
(*(here->BSIM4v3SdpPtr) += m * gstotd); |
|
|
|
(*(here->BSIM4v3SgpPtr) += m * gstotg); |
|
|
|
(*(here->BSIM4v3SbpPtr) += m * gstotb); |
|
|
|
} |
|
|
|
|
|
|
|
*(here->BSIM4v3DPdpPtr ) += xcddb * s->real; |
|
|
|
*(here->BSIM4v3DPdpPtr +1) += xcddb * s->imag; |
|
|
|
*(here->BSIM4v3DPdpPtr) += gdpr + gds + here->BSIM4v3gbd |
|
|
|
*(here->BSIM4v3DPdpPtr ) += m * xcddb * s->real; |
|
|
|
*(here->BSIM4v3DPdpPtr +1) += m * xcddb * s->imag; |
|
|
|
*(here->BSIM4v3DPdpPtr) += m * (gdpr + gds + here->BSIM4v3gbd |
|
|
|
- gdtotd + RevSum + gbdpdp - gIdtotd |
|
|
|
+ dxpart * xgtd + T1 * ddxpart_dVd; |
|
|
|
*(here->BSIM4v3DPdPtr) -= gdpr + gdtot; |
|
|
|
*(here->BSIM4v3DPgpPtr ) += xcdgb * s->real; |
|
|
|
*(here->BSIM4v3DPgpPtr +1) += xcdgb * s->imag; |
|
|
|
*(here->BSIM4v3DPgpPtr) += Gm - gdtotg + gbdpg - gIdtotg |
|
|
|
+ T1 * ddxpart_dVg + dxpart * xgtg; |
|
|
|
*(here->BSIM4v3DPspPtr ) += xcdsb * s->real; |
|
|
|
*(here->BSIM4v3DPspPtr +1) += xcdsb * s->imag; |
|
|
|
*(here->BSIM4v3DPspPtr) -= gds + FwdSum + gdtots - gbdpsp + gIdtots |
|
|
|
- T1 * ddxpart_dVs - dxpart * xgts; |
|
|
|
*(here->BSIM4v3DPbpPtr ) += xcdbb * s->real; |
|
|
|
*(here->BSIM4v3DPbpPtr +1) += xcdbb * s->imag; |
|
|
|
*(here->BSIM4v3DPbpPtr) -= gjbd + gdtotb - Gmbs - gbdpb + gIdtotb |
|
|
|
- T1 * ddxpart_dVb - dxpart * xgtb; |
|
|
|
|
|
|
|
*(here->BSIM4v3DdpPtr) -= gdpr - gdtotd; |
|
|
|
*(here->BSIM4v3DdPtr) += gdpr + gdtot; |
|
|
|
|
|
|
|
*(here->BSIM4v3SPdpPtr ) += xcsdb * s->real; |
|
|
|
*(here->BSIM4v3SPdpPtr +1) += xcsdb * s->imag; |
|
|
|
*(here->BSIM4v3SPdpPtr) -= gds + gstotd + RevSum - gbspdp + gIstotd |
|
|
|
- T1 * dsxpart_dVd - sxpart * xgtd; |
|
|
|
*(here->BSIM4v3SPgpPtr ) += xcsgb * s->real; |
|
|
|
*(here->BSIM4v3SPgpPtr +1) += xcsgb * s->imag; |
|
|
|
*(here->BSIM4v3SPgpPtr) -= Gm + gstotg - gbspg + gIstotg |
|
|
|
- T1 * dsxpart_dVg - sxpart * xgtg; |
|
|
|
*(here->BSIM4v3SPspPtr ) += xcssb * s->real; |
|
|
|
*(here->BSIM4v3SPspPtr +1) += xcssb * s->imag; |
|
|
|
*(here->BSIM4v3SPspPtr) += gspr + gds + here->BSIM4v3gbs - gIstots |
|
|
|
+ dxpart * xgtd + T1 * ddxpart_dVd); |
|
|
|
*(here->BSIM4v3DPdPtr) -= m * (gdpr + gdtot); |
|
|
|
*(here->BSIM4v3DPgpPtr ) += m * xcdgb * s->real; |
|
|
|
*(here->BSIM4v3DPgpPtr +1) += m * xcdgb * s->imag; |
|
|
|
*(here->BSIM4v3DPgpPtr) += m * (Gm - gdtotg + gbdpg - gIdtotg |
|
|
|
+ T1 * ddxpart_dVg + dxpart * xgtg); |
|
|
|
*(here->BSIM4v3DPspPtr ) += m * xcdsb * s->real; |
|
|
|
*(here->BSIM4v3DPspPtr +1) += m * xcdsb * s->imag; |
|
|
|
*(here->BSIM4v3DPspPtr) -= m * (gds + FwdSum + gdtots - gbdpsp + gIdtots |
|
|
|
- T1 * ddxpart_dVs - dxpart * xgts); |
|
|
|
*(here->BSIM4v3DPbpPtr ) += m * xcdbb * s->real; |
|
|
|
*(here->BSIM4v3DPbpPtr +1) += m * xcdbb * s->imag; |
|
|
|
*(here->BSIM4v3DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gbdpb + gIdtotb |
|
|
|
- T1 * ddxpart_dVb - dxpart * xgtb); |
|
|
|
|
|
|
|
*(here->BSIM4v3DdpPtr) -= m * (gdpr - gdtotd); |
|
|
|
*(here->BSIM4v3DdPtr) += m * (gdpr + gdtot); |
|
|
|
|
|
|
|
*(here->BSIM4v3SPdpPtr ) += m * xcsdb * s->real; |
|
|
|
*(here->BSIM4v3SPdpPtr +1) += m * xcsdb * s->imag; |
|
|
|
*(here->BSIM4v3SPdpPtr) -= m * (gds + gstotd + RevSum - gbspdp + gIstotd |
|
|
|
- T1 * dsxpart_dVd - sxpart * xgtd); |
|
|
|
*(here->BSIM4v3SPgpPtr ) += m * xcsgb * s->real; |
|
|
|
*(here->BSIM4v3SPgpPtr +1) += m * xcsgb * s->imag; |
|
|
|
*(here->BSIM4v3SPgpPtr) -= m * (Gm + gstotg - gbspg + gIstotg |
|
|
|
- T1 * dsxpart_dVg - sxpart * xgtg); |
|
|
|
*(here->BSIM4v3SPspPtr ) += m * xcssb * s->real; |
|
|
|
*(here->BSIM4v3SPspPtr +1) += m * xcssb * s->imag; |
|
|
|
*(here->BSIM4v3SPspPtr) += m * (gspr + gds + here->BSIM4v3gbs - gIstots |
|
|
|
- gstots + FwdSum + gbspsp |
|
|
|
+ sxpart * xgts + T1 * dsxpart_dVs; |
|
|
|
*(here->BSIM4v3SPsPtr) -= gspr + gstot; |
|
|
|
*(here->BSIM4v3SPbpPtr ) += xcsbb * s->real; |
|
|
|
*(here->BSIM4v3SPbpPtr +1) += xcsbb * s->imag; |
|
|
|
*(here->BSIM4v3SPbpPtr) -= gjbs + gstotb + Gmbs - gbspb + gIstotb |
|
|
|
- T1 * dsxpart_dVb - sxpart * xgtb; |
|
|
|
|
|
|
|
*(here->BSIM4v3SspPtr) -= gspr - gstots; |
|
|
|
*(here->BSIM4v3SsPtr) += gspr + gstot; |
|
|
|
|
|
|
|
*(here->BSIM4v3BPdpPtr ) += xcbdb * s->real; |
|
|
|
*(here->BSIM4v3BPdpPtr +1) += xcbdb * s->imag; |
|
|
|
*(here->BSIM4v3BPdpPtr) -= gjbd - gbbdp + gIbtotd; |
|
|
|
*(here->BSIM4v3BPgpPtr ) += xcbgb * s->real; |
|
|
|
*(here->BSIM4v3BPgpPtr +1) += xcbgb * s->imag; |
|
|
|
*(here->BSIM4v3BPgpPtr) -= here->BSIM4v3gbgs + gIbtotg; |
|
|
|
*(here->BSIM4v3BPspPtr ) += xcbsb * s->real; |
|
|
|
*(here->BSIM4v3BPspPtr +1) += xcbsb * s->imag; |
|
|
|
*(here->BSIM4v3BPspPtr) -= gjbs - gbbsp + gIbtots; |
|
|
|
*(here->BSIM4v3BPbpPtr ) += xcbbb * s->real; |
|
|
|
*(here->BSIM4v3BPbpPtr +1) += xcbbb * s->imag; |
|
|
|
*(here->BSIM4v3BPbpPtr) += gjbd + gjbs - here->BSIM4v3gbbs |
|
|
|
- gIbtotb; |
|
|
|
+ sxpart * xgts + T1 * dsxpart_dVs); |
|
|
|
*(here->BSIM4v3SPsPtr) -= m * (gspr + gstot); |
|
|
|
*(here->BSIM4v3SPbpPtr ) += m * xcsbb * s->real; |
|
|
|
*(here->BSIM4v3SPbpPtr +1) += m * xcsbb * s->imag; |
|
|
|
*(here->BSIM4v3SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gbspb + gIstotb |
|
|
|
- T1 * dsxpart_dVb - sxpart * xgtb); |
|
|
|
|
|
|
|
*(here->BSIM4v3SspPtr) -= m * (gspr - gstots); |
|
|
|
*(here->BSIM4v3SsPtr) += m * (gspr + gstot); |
|
|
|
|
|
|
|
*(here->BSIM4v3BPdpPtr ) += m * xcbdb * s->real; |
|
|
|
*(here->BSIM4v3BPdpPtr +1) += m * xcbdb * s->imag; |
|
|
|
*(here->BSIM4v3BPdpPtr) -= m * (gjbd - gbbdp + gIbtotd); |
|
|
|
*(here->BSIM4v3BPgpPtr ) += m * xcbgb * s->real; |
|
|
|
*(here->BSIM4v3BPgpPtr +1) += m * xcbgb * s->imag; |
|
|
|
*(here->BSIM4v3BPgpPtr) -= m * (here->BSIM4v3gbgs + gIbtotg); |
|
|
|
*(here->BSIM4v3BPspPtr ) += m * xcbsb * s->real; |
|
|
|
*(here->BSIM4v3BPspPtr +1) += m * xcbsb * s->imag; |
|
|
|
*(here->BSIM4v3BPspPtr) -= m * (gjbs - gbbsp + gIbtots); |
|
|
|
*(here->BSIM4v3BPbpPtr ) += m * xcbbb * s->real; |
|
|
|
*(here->BSIM4v3BPbpPtr +1) += m * xcbbb * s->imag; |
|
|
|
*(here->BSIM4v3BPbpPtr) += m * (gjbd + gjbs - here->BSIM4v3gbbs |
|
|
|
- gIbtotb); |
|
|
|
ggidld = here->BSIM4v3ggidld; |
|
|
|
ggidlg = here->BSIM4v3ggidlg; |
|
|
|
ggidlb = here->BSIM4v3ggidlb; |
|
|
|
@ -667,87 +669,87 @@ double ggidld, ggidlg, ggidlb,ggisld, ggislg, ggislb, ggisls; |
|
|
|
ggislb = here->BSIM4v3ggislb; |
|
|
|
|
|
|
|
/* stamp gidl */ |
|
|
|
(*(here->BSIM4v3DPdpPtr) += ggidld); |
|
|
|
(*(here->BSIM4v3DPgpPtr) += ggidlg); |
|
|
|
(*(here->BSIM4v3DPspPtr) -= (ggidlg + ggidld) + ggidlb); |
|
|
|
(*(here->BSIM4v3DPbpPtr) += ggidlb); |
|
|
|
(*(here->BSIM4v3BPdpPtr) -= ggidld); |
|
|
|
(*(here->BSIM4v3BPgpPtr) -= ggidlg); |
|
|
|
(*(here->BSIM4v3BPspPtr) += (ggidlg + ggidld) + ggidlb); |
|
|
|
(*(here->BSIM4v3BPbpPtr) -= ggidlb); |
|
|
|
(*(here->BSIM4v3DPdpPtr) += m * ggidld); |
|
|
|
(*(here->BSIM4v3DPgpPtr) += m * ggidlg); |
|
|
|
(*(here->BSIM4v3DPspPtr) -= m * ((ggidlg + ggidld) + ggidlb)); |
|
|
|
(*(here->BSIM4v3DPbpPtr) += m * ggidlb); |
|
|
|
(*(here->BSIM4v3BPdpPtr) -= m * ggidld); |
|
|
|
(*(here->BSIM4v3BPgpPtr) -= m * ggidlg); |
|
|
|
(*(here->BSIM4v3BPspPtr) += m * ((ggidlg + ggidld) + ggidlb)); |
|
|
|
(*(here->BSIM4v3BPbpPtr) -= m * ggidlb); |
|
|
|
/* stamp gisl */ |
|
|
|
(*(here->BSIM4v3SPdpPtr) -= (ggisls + ggislg) + ggislb); |
|
|
|
(*(here->BSIM4v3SPgpPtr) += ggislg); |
|
|
|
(*(here->BSIM4v3SPspPtr) += ggisls); |
|
|
|
(*(here->BSIM4v3SPbpPtr) += ggislb); |
|
|
|
(*(here->BSIM4v3BPdpPtr) += (ggislg + ggisls) + ggislb); |
|
|
|
(*(here->BSIM4v3BPgpPtr) -= ggislg); |
|
|
|
(*(here->BSIM4v3BPspPtr) -= ggisls); |
|
|
|
(*(here->BSIM4v3BPbpPtr) -= ggislb); |
|
|
|
(*(here->BSIM4v3SPdpPtr) -= m * ((ggisls + ggislg) + ggislb)); |
|
|
|
(*(here->BSIM4v3SPgpPtr) += m * ggislg); |
|
|
|
(*(here->BSIM4v3SPspPtr) += m * ggisls); |
|
|
|
(*(here->BSIM4v3SPbpPtr) += m * ggislb); |
|
|
|
(*(here->BSIM4v3BPdpPtr) += m * ((ggislg + ggisls) + ggislb)); |
|
|
|
(*(here->BSIM4v3BPgpPtr) -= m * ggislg); |
|
|
|
(*(here->BSIM4v3BPspPtr) -= m * ggisls); |
|
|
|
(*(here->BSIM4v3BPbpPtr) -= m * ggislb); |
|
|
|
|
|
|
|
if (here->BSIM4v3rbodyMod) |
|
|
|
{ (*(here->BSIM4v3DPdbPtr ) += xcdbdb * s->real); |
|
|
|
(*(here->BSIM4v3DPdbPtr +1) += xcdbdb * s->imag); |
|
|
|
(*(here->BSIM4v3DPdbPtr) -= here->BSIM4v3gbd); |
|
|
|
(*(here->BSIM4v3SPsbPtr ) += xcsbsb * s->real); |
|
|
|
(*(here->BSIM4v3SPsbPtr +1) += xcsbsb * s->imag); |
|
|
|
(*(here->BSIM4v3SPsbPtr) -= here->BSIM4v3gbs); |
|
|
|
|
|
|
|
(*(here->BSIM4v3DBdpPtr ) += xcdbdb * s->real); |
|
|
|
(*(here->BSIM4v3DBdpPtr +1) += xcdbdb * s->imag); |
|
|
|
(*(here->BSIM4v3DBdpPtr) -= here->BSIM4v3gbd); |
|
|
|
(*(here->BSIM4v3DBdbPtr ) -= xcdbdb * s->real); |
|
|
|
(*(here->BSIM4v3DBdbPtr +1) -= xcdbdb * s->imag); |
|
|
|
(*(here->BSIM4v3DBdbPtr) += here->BSIM4v3gbd + here->BSIM4v3grbpd |
|
|
|
+ here->BSIM4v3grbdb); |
|
|
|
(*(here->BSIM4v3DBbpPtr) -= here->BSIM4v3grbpd); |
|
|
|
(*(here->BSIM4v3DBbPtr) -= here->BSIM4v3grbdb); |
|
|
|
|
|
|
|
(*(here->BSIM4v3BPdbPtr) -= here->BSIM4v3grbpd); |
|
|
|
(*(here->BSIM4v3BPbPtr) -= here->BSIM4v3grbpb); |
|
|
|
(*(here->BSIM4v3BPsbPtr) -= here->BSIM4v3grbps); |
|
|
|
(*(here->BSIM4v3BPbpPtr) += here->BSIM4v3grbpd + here->BSIM4v3grbps |
|
|
|
+ here->BSIM4v3grbpb); |
|
|
|
{ (*(here->BSIM4v3DPdbPtr ) += m * xcdbdb * s->real); |
|
|
|
(*(here->BSIM4v3DPdbPtr +1) += m * xcdbdb * s->imag); |
|
|
|
(*(here->BSIM4v3DPdbPtr) -= m * here->BSIM4v3gbd); |
|
|
|
(*(here->BSIM4v3SPsbPtr ) += m * xcsbsb * s->real); |
|
|
|
(*(here->BSIM4v3SPsbPtr +1) += m * xcsbsb * s->imag); |
|
|
|
(*(here->BSIM4v3SPsbPtr) -= m * here->BSIM4v3gbs); |
|
|
|
|
|
|
|
(*(here->BSIM4v3DBdpPtr ) += m * xcdbdb * s->real); |
|
|
|
(*(here->BSIM4v3DBdpPtr +1) += m * xcdbdb * s->imag); |
|
|
|
(*(here->BSIM4v3DBdpPtr) -= m * here->BSIM4v3gbd); |
|
|
|
(*(here->BSIM4v3DBdbPtr ) -= m * xcdbdb * s->real); |
|
|
|
(*(here->BSIM4v3DBdbPtr +1) -= m * xcdbdb * s->imag); |
|
|
|
(*(here->BSIM4v3DBdbPtr) += m * (here->BSIM4v3gbd + here->BSIM4v3grbpd |
|
|
|
+ here->BSIM4v3grbdb)); |
|
|
|
(*(here->BSIM4v3DBbpPtr) -= m * here->BSIM4v3grbpd); |
|
|
|
(*(here->BSIM4v3DBbPtr) -= m * here->BSIM4v3grbdb); |
|
|
|
|
|
|
|
(*(here->BSIM4v3BPdbPtr) -= m * here->BSIM4v3grbpd); |
|
|
|
(*(here->BSIM4v3BPbPtr) -= m * here->BSIM4v3grbpb); |
|
|
|
(*(here->BSIM4v3BPsbPtr) -= m * here->BSIM4v3grbps); |
|
|
|
(*(here->BSIM4v3BPbpPtr) += m * (here->BSIM4v3grbpd + here->BSIM4v3grbps |
|
|
|
+ here->BSIM4v3grbpb)); |
|
|
|
/* WDL: (-here->BSIM4v3gbbs) already added to BPbpPtr */ |
|
|
|
|
|
|
|
(*(here->BSIM4v3SBspPtr ) += xcsbsb * s->real); |
|
|
|
(*(here->BSIM4v3SBspPtr +1) += xcsbsb * s->imag); |
|
|
|
(*(here->BSIM4v3SBspPtr) -= here->BSIM4v3gbs); |
|
|
|
(*(here->BSIM4v3SBbpPtr) -= here->BSIM4v3grbps); |
|
|
|
(*(here->BSIM4v3SBbPtr) -= here->BSIM4v3grbsb); |
|
|
|
(*(here->BSIM4v3SBsbPtr ) -= xcsbsb * s->real); |
|
|
|
(*(here->BSIM4v3SBsbPtr +1) -= xcsbsb * s->imag); |
|
|
|
(*(here->BSIM4v3SBsbPtr) += here->BSIM4v3gbs |
|
|
|
+ here->BSIM4v3grbps + here->BSIM4v3grbsb); |
|
|
|
|
|
|
|
(*(here->BSIM4v3BdbPtr) -= here->BSIM4v3grbdb); |
|
|
|
(*(here->BSIM4v3BbpPtr) -= here->BSIM4v3grbpb); |
|
|
|
(*(here->BSIM4v3BsbPtr) -= here->BSIM4v3grbsb); |
|
|
|
(*(here->BSIM4v3BbPtr) += here->BSIM4v3grbsb + here->BSIM4v3grbdb |
|
|
|
+ here->BSIM4v3grbpb); |
|
|
|
(*(here->BSIM4v3SBspPtr ) += m * xcsbsb * s->real); |
|
|
|
(*(here->BSIM4v3SBspPtr +1) += m * xcsbsb * s->imag); |
|
|
|
(*(here->BSIM4v3SBspPtr) -= m * here->BSIM4v3gbs); |
|
|
|
(*(here->BSIM4v3SBbpPtr) -= m * here->BSIM4v3grbps); |
|
|
|
(*(here->BSIM4v3SBbPtr) -= m * here->BSIM4v3grbsb); |
|
|
|
(*(here->BSIM4v3SBsbPtr ) -= m * xcsbsb * s->real); |
|
|
|
(*(here->BSIM4v3SBsbPtr +1) -= m * xcsbsb * s->imag); |
|
|
|
(*(here->BSIM4v3SBsbPtr) += m * (here->BSIM4v3gbs |
|
|
|
+ here->BSIM4v3grbps + here->BSIM4v3grbsb)); |
|
|
|
|
|
|
|
(*(here->BSIM4v3BdbPtr) -= m * here->BSIM4v3grbdb); |
|
|
|
(*(here->BSIM4v3BbpPtr) -= m * here->BSIM4v3grbpb); |
|
|
|
(*(here->BSIM4v3BsbPtr) -= m * here->BSIM4v3grbsb); |
|
|
|
(*(here->BSIM4v3BbPtr) += m * (here->BSIM4v3grbsb + here->BSIM4v3grbdb |
|
|
|
+ here->BSIM4v3grbpb)); |
|
|
|
} |
|
|
|
|
|
|
|
if (here->BSIM4v3acnqsMod) |
|
|
|
{ *(here->BSIM4v3QqPtr ) += s->real * ScalingFactor; |
|
|
|
*(here->BSIM4v3QqPtr +1) += s->imag * ScalingFactor; |
|
|
|
*(here->BSIM4v3QgpPtr ) -= xcqgb * s->real; |
|
|
|
*(here->BSIM4v3QgpPtr +1) -= xcqgb * s->imag; |
|
|
|
*(here->BSIM4v3QdpPtr ) -= xcqdb * s->real; |
|
|
|
*(here->BSIM4v3QdpPtr +1) -= xcqdb * s->imag; |
|
|
|
*(here->BSIM4v3QbpPtr ) -= xcqbb * s->real; |
|
|
|
*(here->BSIM4v3QbpPtr +1) -= xcqbb * s->imag; |
|
|
|
*(here->BSIM4v3QspPtr ) -= xcqsb * s->real; |
|
|
|
*(here->BSIM4v3QspPtr +1) -= xcqsb * s->imag; |
|
|
|
|
|
|
|
*(here->BSIM4v3GPqPtr) -= here->BSIM4v3gtau; |
|
|
|
*(here->BSIM4v3DPqPtr) += dxpart * here->BSIM4v3gtau; |
|
|
|
*(here->BSIM4v3SPqPtr) += sxpart * here->BSIM4v3gtau; |
|
|
|
|
|
|
|
*(here->BSIM4v3QqPtr) += here->BSIM4v3gtau; |
|
|
|
*(here->BSIM4v3QgpPtr) += xgtg; |
|
|
|
*(here->BSIM4v3QdpPtr) += xgtd; |
|
|
|
*(here->BSIM4v3QbpPtr) += xgtb; |
|
|
|
*(here->BSIM4v3QspPtr) += xgts; |
|
|
|
{ *(here->BSIM4v3QqPtr ) += m * s->real * ScalingFactor; |
|
|
|
*(here->BSIM4v3QqPtr +1) += m * s->imag * ScalingFactor; |
|
|
|
*(here->BSIM4v3QgpPtr ) -= m * xcqgb * s->real; |
|
|
|
*(here->BSIM4v3QgpPtr +1) -= m * xcqgb * s->imag; |
|
|
|
*(here->BSIM4v3QdpPtr ) -= m * xcqdb * s->real; |
|
|
|
*(here->BSIM4v3QdpPtr +1) -= m * xcqdb * s->imag; |
|
|
|
*(here->BSIM4v3QbpPtr ) -= m * xcqbb * s->real; |
|
|
|
*(here->BSIM4v3QbpPtr +1) -= m * xcqbb * s->imag; |
|
|
|
*(here->BSIM4v3QspPtr ) -= m * xcqsb * s->real; |
|
|
|
*(here->BSIM4v3QspPtr +1) -= m * xcqsb * s->imag; |
|
|
|
|
|
|
|
*(here->BSIM4v3GPqPtr) -= m * here->BSIM4v3gtau; |
|
|
|
*(here->BSIM4v3DPqPtr) += m * dxpart * here->BSIM4v3gtau; |
|
|
|
*(here->BSIM4v3SPqPtr) += m * sxpart * here->BSIM4v3gtau; |
|
|
|
|
|
|
|
*(here->BSIM4v3QqPtr) += m * here->BSIM4v3gtau; |
|
|
|
*(here->BSIM4v3QgpPtr) += m * xgtg; |
|
|
|
*(here->BSIM4v3QdpPtr) += m * xgtd; |
|
|
|
*(here->BSIM4v3QbpPtr) += m * xgtb; |
|
|
|
*(here->BSIM4v3QspPtr) += m * xgts; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|