Fixed a bug causing mult_* factors to get scaled at each setup().
This commit is contained in:
parent
740670805e
commit
535e22a502
|
|
@ -462,8 +462,8 @@ double m, mult_i, mult_q;
|
|||
* Loading AC matrix
|
||||
*/
|
||||
m = here->BSIM4m;
|
||||
mult_i = here->BSIM4mult_i;
|
||||
mult_q = here->BSIM4mult_q;
|
||||
mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||
mult_q = here->BSIM4mult_q * here->BSIM4m;
|
||||
|
||||
if (!model->BSIM4rdsMod)
|
||||
{ gdpr = here->BSIM4drainConductance;
|
||||
|
|
|
|||
|
|
@ -203,11 +203,11 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
|||
return(OK);
|
||||
case BSIM4_SOURCECONDUCT:
|
||||
value->rValue = here->BSIM4sourceConductance;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_DRAINCONDUCT:
|
||||
value->rValue = here->BSIM4drainConductance;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_VBD:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BSIM4vbd);
|
||||
|
|
@ -223,67 +223,67 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
|||
return(OK);
|
||||
case BSIM4_CD:
|
||||
value->rValue = here->BSIM4cd;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CBS:
|
||||
value->rValue = here->BSIM4cbs;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CBD:
|
||||
value->rValue = here->BSIM4cbd;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CSUB:
|
||||
value->rValue = here->BSIM4csub;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_IGIDL:
|
||||
value->rValue = here->BSIM4Igidl;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_IGISL:
|
||||
value->rValue = here->BSIM4Igisl;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_IGS:
|
||||
value->rValue = here->BSIM4Igs;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_IGD:
|
||||
value->rValue = here->BSIM4Igd;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_IGB:
|
||||
value->rValue = here->BSIM4Igb;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_IGCS:
|
||||
value->rValue = here->BSIM4Igcs;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_IGCD:
|
||||
value->rValue = here->BSIM4Igcd;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_GM:
|
||||
value->rValue = here->BSIM4gm;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_GDS:
|
||||
value->rValue = here->BSIM4gds;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_GMBS:
|
||||
value->rValue = here->BSIM4gmbs;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_GBD:
|
||||
value->rValue = here->BSIM4gbd;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_GBS:
|
||||
value->rValue = here->BSIM4gbs;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
/* case BSIM4_QB:
|
||||
value->rValue = *(ckt->CKTstate0 + here->BSIM4qb);
|
||||
|
|
@ -308,19 +308,19 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
|||
return(OK); */
|
||||
case BSIM4_QB:
|
||||
value->rValue = here->BSIM4qbulk;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_QG:
|
||||
value->rValue = here->BSIM4qgate;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_QS:
|
||||
value->rValue = here->BSIM4qsrc;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_QD:
|
||||
value->rValue = here->BSIM4qdrn;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_QINV:
|
||||
value->rValue = here->BSIM4qinv;
|
||||
|
|
@ -330,82 +330,82 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
|||
return(OK);
|
||||
case BSIM4_GCRG:
|
||||
value->rValue = here->BSIM4gcrg;
|
||||
value->rValue *= here->BSIM4mult_i;
|
||||
value->rValue *= here->BSIM4mult_i * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_GTAU:
|
||||
value->rValue = here->BSIM4gtau;
|
||||
return(OK);
|
||||
case BSIM4_CGGB:
|
||||
value->rValue = here->BSIM4cggb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CGDB:
|
||||
value->rValue = here->BSIM4cgdb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CGSB:
|
||||
value->rValue = here->BSIM4cgsb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CDGB:
|
||||
value->rValue = here->BSIM4cdgb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CDDB:
|
||||
value->rValue = here->BSIM4cddb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CDSB:
|
||||
value->rValue = here->BSIM4cdsb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CBGB:
|
||||
value->rValue = here->BSIM4cbgb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CBDB:
|
||||
value->rValue = here->BSIM4cbdb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CBSB:
|
||||
value->rValue = here->BSIM4cbsb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CSGB:
|
||||
value->rValue = here->BSIM4csgb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CSDB:
|
||||
value->rValue = here->BSIM4csdb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CSSB:
|
||||
value->rValue = here->BSIM4cssb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CGBB:
|
||||
value->rValue = here->BSIM4cgbb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CDBB:
|
||||
value->rValue = here->BSIM4cdbb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CSBB:
|
||||
value->rValue = here->BSIM4csbb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CBBB:
|
||||
value->rValue = here->BSIM4cbbb;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CAPBD:
|
||||
value->rValue = here->BSIM4capbd;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CAPBS:
|
||||
value->rValue = here->BSIM4capbs;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_VON:
|
||||
value->rValue = here->BSIM4von;
|
||||
|
|
@ -427,15 +427,15 @@ BSIM4instance *here = (BSIM4instance*)inst;
|
|||
return(OK);
|
||||
case BSIM4_CGSO:
|
||||
value->rValue = here->BSIM4cgso;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CGDO:
|
||||
value->rValue = here->BSIM4cgdo;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_CGBO:
|
||||
value->rValue = here->pParam->BSIM4cgbo;
|
||||
value->rValue *= here->BSIM4mult_q;
|
||||
value->rValue *= here->BSIM4mult_q * here->BSIM4m;
|
||||
return(OK);
|
||||
case BSIM4_WEFF:
|
||||
value->rValue = here->pParam->BSIM4weff;
|
||||
|
|
|
|||
|
|
@ -4986,9 +4986,9 @@ line900:
|
|||
*/
|
||||
|
||||
m = here->BSIM4m;
|
||||
mult_i = here->BSIM4mult_i;
|
||||
mult_q = here->BSIM4mult_q;
|
||||
|
||||
mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||
mult_q = here->BSIM4mult_q * here->BSIM4m;
|
||||
|
||||
#ifdef USE_OMP
|
||||
here->BSIM4rhsdPrime = (mult_i * (ceqjd - ceqbd + ceqgdtot
|
||||
- ceqdrn + Idtoteq) - mult_q * ceqqd);
|
||||
|
|
|
|||
|
|
@ -155,8 +155,8 @@ double mult_i, mult_fn;
|
|||
}
|
||||
break;
|
||||
case N_CALC:
|
||||
mult_i = here->BSIM4mult_i;
|
||||
mult_fn = here->BSIM4mult_fn;
|
||||
mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||
mult_fn = here->BSIM4mult_fn * here->BSIM4m;
|
||||
switch (mode)
|
||||
{ case N_DENS:
|
||||
if (model->BSIM4tnoiMod == 0)
|
||||
|
|
|
|||
|
|
@ -494,8 +494,8 @@ double m, mult_i, mult_q;
|
|||
* Loading PZ matrix
|
||||
*/
|
||||
m = here->BSIM4m;
|
||||
mult_i = here->BSIM4mult_i;
|
||||
mult_q = here->BSIM4mult_q;
|
||||
mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||
mult_q = here->BSIM4mult_q * here->BSIM4m;
|
||||
|
||||
if (!model->BSIM4rdsMod)
|
||||
{ gdpr = here->BSIM4drainConductance;
|
||||
|
|
|
|||
|
|
@ -2375,9 +2375,10 @@ BSIM4instance **InstArray;
|
|||
if (!here->BSIM4ngconGiven)
|
||||
here->BSIM4ngcon = model->BSIM4ngcon;
|
||||
|
||||
here->BSIM4mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||
here->BSIM4mult_q = here->BSIM4mult_q * here->BSIM4m;
|
||||
here->BSIM4mult_fn = here->BSIM4mult_fn * here->BSIM4m;
|
||||
// Recursive scaling produces incorrect results after second call to setup()
|
||||
// here->BSIM4mult_i = here->BSIM4mult_i * here->BSIM4m;
|
||||
// here->BSIM4mult_q = here->BSIM4mult_q * here->BSIM4m;
|
||||
// here->BSIM4mult_fn = here->BSIM4mult_fn * here->BSIM4m;
|
||||
|
||||
/* Process instance model selectors, some
|
||||
* may override their global counterparts
|
||||
|
|
|
|||
Loading…
Reference in New Issue