|
|
|
@ -1,20 +1,13 @@ |
|
|
|
/* ****************************************************************************** |
|
|
|
* BSIM4 4.8.2 released by Chetan Kumar Dabhi 01/01/2020 * |
|
|
|
* BSIM4 4.8.3 released on 05/19/2025 * |
|
|
|
* BSIM4 Model Equations * |
|
|
|
****************************************************************************** |
|
|
|
|
|
|
|
****************************************************************************** |
|
|
|
* Copyright (c) 2020 University of California * |
|
|
|
* Copyright (c) 2025 University of California * |
|
|
|
* * |
|
|
|
* Project Director: Prof. Chenming Hu. * |
|
|
|
* Current developers: Chetan Kumar Dabhi (Ph.D. student, IIT Kanpur) * |
|
|
|
* Prof. Yogesh Chauhan (IIT Kanpur) * |
|
|
|
* Dr. Pragya Kushwaha (Postdoc, UC Berkeley) * |
|
|
|
* Dr. Avirup Dasgupta (Postdoc, UC Berkeley) * |
|
|
|
* Ming-Yen Kao (Ph.D. student, UC Berkeley) * |
|
|
|
* Authors: Gary W. Ng, Weidong Liu, Xuemei Xi, Mohan Dunga, Wenwei Yang * |
|
|
|
* Ali Niknejad, Chetan Kumar Dabhi, Yogesh Singh Chauhan, * |
|
|
|
* Sayeef Salahuddin, Chenming Hu * |
|
|
|
* Project Directors: Prof. Sayeef Salahuddin and Prof. Chenming Hu * |
|
|
|
* Developers list: https://www.bsim.berkeley.edu/models/bsim4/auth_bsim4/ * |
|
|
|
******************************************************************************/ |
|
|
|
|
|
|
|
/* |
|
|
|
@ -24,9 +17,10 @@ http://opensource.org/licenses/ECL-2.0 |
|
|
|
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
|
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations |
|
|
|
under the License. |
|
|
|
*/ |
|
|
|
|
|
|
|
/**** OpenMP support ngspice 06/28/2010 ****/ |
|
|
|
BSIM4 model is supported by the members of Silicon Integration Initiative's Compact Model Coalition. A link to the most recent version of this |
|
|
|
standard can be found at: http://www.si2.org/cmc |
|
|
|
*/ |
|
|
|
|
|
|
|
#include "ngspice/ngspice.h" |
|
|
|
#include "ngspice/cktdefs.h" |
|
|
|
@ -97,13 +91,13 @@ CKTcircuit *ckt) |
|
|
|
return error; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int BSIM4LoadOMP(BSIM4instance *here, CKTcircuit *ckt) { |
|
|
|
BSIM4model *model = BSIM4modPtr(here); |
|
|
|
#else |
|
|
|
BSIM4model *model = (BSIM4model*)inModel; |
|
|
|
BSIM4instance *here; |
|
|
|
#endif |
|
|
|
|
|
|
|
double ceqgstot, dgstot_dvd, dgstot_dvg, dgstot_dvs, dgstot_dvb; |
|
|
|
double ceqgdtot, dgdtot_dvd, dgdtot_dvg, dgdtot_dvs, dgdtot_dvb; |
|
|
|
double gstot, gstotd, gstotg, gstots, gstotb, gspr, Rs, Rd; |
|
|
|
@ -113,9 +107,6 @@ double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; |
|
|
|
double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; |
|
|
|
double vses, vdes, vdedo, delvses, delvded, delvdes; |
|
|
|
double Isestot, cseshat, Idedtot, cdedhat; |
|
|
|
#ifndef NEWCONV |
|
|
|
double tol0, tol1, tol2, tol3, tol4, tol5, tol6; |
|
|
|
#endif |
|
|
|
|
|
|
|
double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; |
|
|
|
double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; |
|
|
|
@ -123,10 +114,7 @@ double delvges, delvgms, vgmb; |
|
|
|
double gcgmgmb=0.0, gcgmdb=0.0, gcgmsb=0.0, gcdgmb, gcsgmb; |
|
|
|
double gcgmbb=0.0, gcbgmb, qgmb, qgmid=0.0, ceqqgmid; |
|
|
|
|
|
|
|
double vbd, vbs, vds, vgb, vgd, vgs, vgdo; |
|
|
|
#ifndef PREDICTOR |
|
|
|
double xfact; |
|
|
|
#endif |
|
|
|
double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact; |
|
|
|
double vdbs, vdbd, vsbs, vsbdo, vsbd; |
|
|
|
double delvdbs, delvdbd, delvsbs; |
|
|
|
double delvbd_jct, delvbs_jct, vbs_jct, vbd_jct; |
|
|
|
@ -191,7 +179,7 @@ double T8, dT8_dVg, dT8_dVd, dT8_dVb; |
|
|
|
double T9, dT9_dVg, dT9_dVd, dT9_dVb; |
|
|
|
double T10, dT10_dVg, dT10_dVb, dT10_dVd; |
|
|
|
double T11, T12, T13, T14; |
|
|
|
double tmp, Abulk, dAbulk_dVb, Abulk0, dAbulk0_dVb; |
|
|
|
double tmp, Abulk, dAbulk_dVb, Abulk0, Abulk0_Q, dAbulk0_dVb, dAbulk0_Q_dVb; |
|
|
|
double Cclm, dCclm_dVg, dCclm_dVd, dCclm_dVb; |
|
|
|
double FP, dFP_dVg, PvagTerm, dPvagTerm_dVg, dPvagTerm_dVd, dPvagTerm_dVb; |
|
|
|
double VADITS, dVADITS_dVg, dVADITS_dVd; |
|
|
|
@ -233,7 +221,7 @@ double gbdpdp, gbdpg, gbdpb, gbdpsp; |
|
|
|
double qgdo, qgso, cgdo, cgso; |
|
|
|
double Cgg, Cgd, Cgb, Cdg, Cdd, Cds; |
|
|
|
double Csg, Csd, Css, Csb, Cbg, Cbd, Cbb; |
|
|
|
double Cgg1, Cgd1, Cgb1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; |
|
|
|
double Cgg1, Cgb1, Cgd1, Cbg1, Cbb1, Cbd1, Qac0, Qsub0; |
|
|
|
double dQac0_dVg, dQac0_dVb, dQsub0_dVg, dQsub0_dVd, dQsub0_dVb; |
|
|
|
double ggidld, ggidlg, ggidlb, ggislg, ggislb, ggisls; |
|
|
|
double Igisl, Ggislg, Ggislb, Ggisls; |
|
|
|
@ -244,10 +232,10 @@ double vs, Fsevl, dvs_dVg, dvs_dVd, dvs_dVb, dFsevl_dVg, dFsevl_dVd, dFsevl_dVb; |
|
|
|
double vgdx, vgsx, epssub, toxe, epsrox; |
|
|
|
struct bsim4SizeDependParam *pParam; |
|
|
|
int ByPass, ChargeComputationNeeded, error, Check, Check1, Check2; |
|
|
|
|
|
|
|
double m; |
|
|
|
double m, mult_i, mult_q; |
|
|
|
|
|
|
|
ScalingFactor = 1.0e-9; |
|
|
|
/* no integration, if dc sweep, but keep evaluating capacitances */ |
|
|
|
ChargeComputationNeeded = |
|
|
|
((ckt->CKTmode & (MODEDCTRANCURVE | MODEAC | MODETRAN | MODEINITSMSIG)) || |
|
|
|
((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) |
|
|
|
@ -1425,12 +1413,34 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
T0 = (17.0 + 20.0 * T2) * T1; |
|
|
|
dT0_dVb = -pParam->BSIM4keta * T1 * T1; |
|
|
|
} |
|
|
|
|
|
|
|
dAbulk_dVg *= T0; |
|
|
|
dAbulk_dVb = dAbulk_dVb * T0 + Abulk * dT0_dVb; |
|
|
|
dAbulk0_Q_dVb = dAbulk0_dVb; // copy before scaling |
|
|
|
dAbulk0_dVb = dAbulk0_dVb * T0 + Abulk0 * dT0_dVb; |
|
|
|
Abulk *= T0; |
|
|
|
Abulk0_Q = Abulk0; // copy before scaling |
|
|
|
Abulk0 *= T0; |
|
|
|
|
|
|
|
/* Calculate Abulk0_Q */ |
|
|
|
if (pParam->BSIM4ketac != pParam->BSIM4keta) { |
|
|
|
T2 = pParam->BSIM4ketac * Vbseff; |
|
|
|
if (T2 >= -0.9) |
|
|
|
{ T0 = 1.0 / (1.0 + T2); |
|
|
|
dT0_dVb = -pParam->BSIM4ketac * T0 * T0; |
|
|
|
} |
|
|
|
else |
|
|
|
{ T1 = 1.0 / (0.8 + T2); |
|
|
|
T0 = (17.0 + 20.0 * T2) * T1; |
|
|
|
dT0_dVb = -pParam->BSIM4ketac * T1 * T1; |
|
|
|
} |
|
|
|
dAbulk0_Q_dVb = dAbulk0_Q_dVb * T0 + Abulk0_Q * dT0_dVb; |
|
|
|
Abulk0_Q *= T0; |
|
|
|
} else { |
|
|
|
dAbulk0_Q_dVb = dAbulk0_dVb; |
|
|
|
Abulk0_Q = Abulk0; |
|
|
|
} |
|
|
|
|
|
|
|
/* Mobility calculation */ |
|
|
|
if (model->BSIM4mtrlMod && model->BSIM4mtrlCompatMod == 0) |
|
|
|
T14 = 2.0 * model->BSIM4type *(model->BSIM4phig - model->BSIM4easub - 0.5*model->BSIM4Eg0 + 0.45); |
|
|
|
@ -2352,9 +2362,9 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
T1 = (-vds - vgd_eff - pParam->BSIM4egisl + pParam->BSIM4vfbsd ) / T0; |
|
|
|
|
|
|
|
if ((pParam->BSIM4agisl <= 0.0) || (pParam->BSIM4bgisl <= 0.0) |
|
|
|
|| (T1 <= 0.0) || (pParam->BSIM4cgisl <= 0.0) || (vbs > 0.0)) |
|
|
|
|| (T1 <= 0.0) || (pParam->BSIM4cgisl <= 0.0) || (vbs > 0.0)) { |
|
|
|
Igisl = Ggisls = Ggislg = Ggislb = 0.0; |
|
|
|
else { |
|
|
|
} else { |
|
|
|
dT1_dVd = 1.0 / T0; |
|
|
|
dT1_dVg = -dvgd_eff_dvg * dT1_dVd; |
|
|
|
T2 = pParam->BSIM4bgisl / T1; |
|
|
|
@ -2596,10 +2606,10 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
dVaux_dVg *= dVgs_eff_dVg; |
|
|
|
} |
|
|
|
|
|
|
|
T2 = Vgs_eff * Vaux; |
|
|
|
dT2_dVg = dVgs_eff_dVg * Vaux + Vgs_eff * dVaux_dVg; |
|
|
|
dT2_dVd = Vgs_eff * dVaux_dVd; |
|
|
|
dT2_dVb = Vgs_eff * dVaux_dVb; |
|
|
|
T2 = Vgs * Vaux; |
|
|
|
dT2_dVg = Vaux + Vgs * dVaux_dVg; |
|
|
|
dT2_dVd = Vgs * dVaux_dVd; |
|
|
|
dT2_dVb = Vgs * dVaux_dVb; |
|
|
|
|
|
|
|
T11 = pParam->BSIM4Aechvb; |
|
|
|
T12 = pParam->BSIM4Bechvb; |
|
|
|
@ -2804,9 +2814,9 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
dVaux_dVg = -dVaux_dVb * dVgs_eff_dVg; |
|
|
|
} |
|
|
|
|
|
|
|
T2 = (Vgs_eff - Vbseff) * Vaux; |
|
|
|
dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; |
|
|
|
dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; |
|
|
|
T2 = (Vgs - Vbs) * Vaux; |
|
|
|
dT2_dVg = Vaux + (Vgs - Vbs) * dVaux_dVg; |
|
|
|
dT2_dVb = -Vaux + (Vgs - Vbs) * dVaux_dVb; |
|
|
|
|
|
|
|
T11 = 4.97232e-7 * pParam->BSIM4weff |
|
|
|
* pParam->BSIM4leff * pParam->BSIM4ToxRatio; |
|
|
|
@ -2859,10 +2869,10 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
dVaux_dVg *= dVoxdepinv_dVg; |
|
|
|
} |
|
|
|
|
|
|
|
T2 = (Vgs_eff - Vbseff) * Vaux; |
|
|
|
dT2_dVg = dVgs_eff_dVg * Vaux + (Vgs_eff - Vbseff) * dVaux_dVg; |
|
|
|
dT2_dVd = (Vgs_eff - Vbseff) * dVaux_dVd; |
|
|
|
dT2_dVb = -Vaux + (Vgs_eff - Vbseff) * dVaux_dVb; |
|
|
|
T2 = (Vgs - Vbs) * Vaux; |
|
|
|
dT2_dVg = Vaux + (Vgs - Vbs) * dVaux_dVg; |
|
|
|
dT2_dVd = (Vgs - Vbs) * dVaux_dVd; |
|
|
|
dT2_dVb = -Vaux + (Vgs - Vbs) * dVaux_dVb; |
|
|
|
|
|
|
|
T11 *= 0.75610; |
|
|
|
T12 *= 1.31724; |
|
|
|
@ -2963,7 +2973,7 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
/* Calculations for noise analysis */ |
|
|
|
|
|
|
|
if (model->BSIM4tnoiMod == 0) |
|
|
|
{ Abulk = Abulk0 * pParam->BSIM4abulkCVfactor; |
|
|
|
{ Abulk = Abulk0_Q * pParam->BSIM4abulkCVfactor; |
|
|
|
Vdsat = Vgsteff / Abulk; |
|
|
|
T0 = Vdsat - Vds - DELTA_4; |
|
|
|
T1 = sqrt(T0 * T0 + 4.0 * DELTA_4 * Vdsat); |
|
|
|
@ -3070,8 +3080,8 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
{ One_Third_CoxWL = CoxWL / 3.0; |
|
|
|
Two_Third_CoxWL = 2.0 * One_Third_CoxWL; |
|
|
|
|
|
|
|
AbulkCV = Abulk0 * pParam->BSIM4abulkCVfactor; |
|
|
|
dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_dVb*dVbseff_dVb; |
|
|
|
AbulkCV = Abulk0_Q * pParam->BSIM4abulkCVfactor; |
|
|
|
dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_Q_dVb*dVbseff_dVb; |
|
|
|
|
|
|
|
dVdsat_dVg = 1.0 / AbulkCV; /*4.6.2*/ |
|
|
|
Vdsat = Vgst * dVdsat_dVg; |
|
|
|
@ -3479,8 +3489,8 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
dQsub0_dVb = -T2 * (dVfbeff_dVb + dVbseffCV_dVb |
|
|
|
+ dVgsteff_dVb); |
|
|
|
|
|
|
|
AbulkCV = Abulk0 * pParam->BSIM4abulkCVfactor; |
|
|
|
dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_dVb; |
|
|
|
AbulkCV = Abulk0_Q * pParam->BSIM4abulkCVfactor; |
|
|
|
dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_Q_dVb; |
|
|
|
VdsatCV = Vgsteff / AbulkCV; |
|
|
|
|
|
|
|
T0 = VdsatCV - Vds - DELTA_4; |
|
|
|
@ -3738,8 +3748,8 @@ for (; model != NULL; model = BSIM4nextModel(model)) |
|
|
|
dCoxeff_dVg *= dTcen_dVg; |
|
|
|
CoxWLcen = CoxWL * Coxeff / model->BSIM4coxe; |
|
|
|
|
|
|
|
AbulkCV = Abulk0 * pParam->BSIM4abulkCVfactor; |
|
|
|
dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_dVb; |
|
|
|
AbulkCV = Abulk0_Q * pParam->BSIM4abulkCVfactor; |
|
|
|
dAbulkCV_dVb = pParam->BSIM4abulkCVfactor * dAbulk0_Q_dVb; |
|
|
|
VdsatCV = VgDP / AbulkCV; |
|
|
|
|
|
|
|
T0 = VdsatCV - Vds - DELTA_4; |
|
|
|
@ -4164,9 +4174,8 @@ finished: |
|
|
|
here->BSIM4cgso = cgso; |
|
|
|
here->BSIM4qgso = qgso; |
|
|
|
|
|
|
|
#ifndef NOBYPASS |
|
|
|
|
|
|
|
line755: |
|
|
|
#endif |
|
|
|
ag0 = ckt->CKTag[0]; |
|
|
|
if (here->BSIM4mode > 0) |
|
|
|
{ if (here->BSIM4trnqsMod == 0) |
|
|
|
@ -4588,10 +4597,6 @@ line755: |
|
|
|
if (!ChargeComputationNeeded) |
|
|
|
goto line850; |
|
|
|
|
|
|
|
/* no integration, if dc sweep, but keep evaluating capacitances */ |
|
|
|
if (ckt->CKTmode & MODEDCTRANCURVE) |
|
|
|
goto line850; |
|
|
|
|
|
|
|
if (ckt->CKTmode & MODEINITTRAN) |
|
|
|
{ *(ckt->CKTstate1 + here->BSIM4qb) = |
|
|
|
*(ckt->CKTstate0 + here->BSIM4qb); |
|
|
|
@ -4801,9 +4806,9 @@ line900: |
|
|
|
gIgtotb = gIstotb + gIdtotb + gIbtotb; |
|
|
|
Igtoteq = Istoteq + Idtoteq + Ibtoteq; |
|
|
|
} |
|
|
|
else |
|
|
|
else { |
|
|
|
gIgtotg = gIgtotd = gIgtots = gIgtotb = Igtoteq = 0.0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (here->BSIM4rgateMod == 2) |
|
|
|
T0 = vges - vgs; |
|
|
|
@ -4970,66 +4975,67 @@ line900: |
|
|
|
*/ |
|
|
|
|
|
|
|
m = here->BSIM4m; |
|
|
|
mult_i = here->BSIM4mult_i; |
|
|
|
mult_q = here->BSIM4mult_q; |
|
|
|
|
|
|
|
#ifdef USE_OMP |
|
|
|
here->BSIM4rhsdPrime = m * (ceqjd - ceqbd + ceqgdtot |
|
|
|
- ceqdrn - ceqqd + Idtoteq); |
|
|
|
here->BSIM4rhsgPrime = m * (ceqqg - ceqgcrg + Igtoteq); |
|
|
|
here->BSIM4rhsdPrime = (mult_i * (ceqjd - ceqbd + ceqgdtot |
|
|
|
- ceqdrn + Idtoteq) - mult_q * ceqqd); |
|
|
|
here->BSIM4rhsgPrime = mult_q * ceqqg - mult_i * (ceqgcrg - Igtoteq); |
|
|
|
|
|
|
|
if (here->BSIM4rgateMod == 2) |
|
|
|
here->BSIM4rhsgExt = m * ceqgcrg; |
|
|
|
here->BSIM4rhsgExt = mult_i * ceqgcrg; |
|
|
|
else if (here->BSIM4rgateMod == 3) |
|
|
|
here->BSIM4grhsMid = m * (ceqqgmid + ceqgcrg); |
|
|
|
here->BSIM4grhsMid = mult_q * ceqqgmid + mult_i * ceqgcrg; |
|
|
|
|
|
|
|
if (!here->BSIM4rbodyMod) |
|
|
|
{ here->BSIM4rhsbPrime = m * (ceqbd + ceqbs - ceqjd |
|
|
|
- ceqjs - ceqqb + Ibtoteq); |
|
|
|
here->BSIM4rhssPrime = m * (ceqdrn - ceqbs + ceqjs |
|
|
|
+ ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq); |
|
|
|
{ here->BSIM4rhsbPrime = (mult_i * (ceqbd + ceqbs - ceqjd |
|
|
|
- ceqjs + Ibtoteq) - mult_q * ceqqb); |
|
|
|
here->BSIM4rhssPrime = (mult_i * (ceqdrn - ceqbs + ceqjs |
|
|
|
- ceqgstot + Istoteq) + mult_q * (ceqqg + ceqqb + ceqqd + ceqqgmid)); |
|
|
|
} |
|
|
|
else |
|
|
|
{ here->BSIM4rhsdb = m * (ceqjd + ceqqjd); |
|
|
|
here->BSIM4rhsbPrime = m * (ceqbd + ceqbs - ceqqb + Ibtoteq); |
|
|
|
here->BSIM4rhssb = m * (ceqjs + ceqqjs); |
|
|
|
here->BSIM4rhssPrime = m * (ceqdrn - ceqbs + ceqjs + ceqqd |
|
|
|
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq); |
|
|
|
{ here->BSIM4rhsdb = mult_i * (ceqjd + ceqqjd); |
|
|
|
here->BSIM4rhsbPrime = (mult_i * (ceqbd + ceqbs + Ibtoteq) - mult_q * ceqqb); |
|
|
|
here->BSIM4rhssb = mult_i * (ceqjs + ceqqjs); |
|
|
|
here->BSIM4rhssPrime = (mult_i * (ceqdrn - ceqbs + ceqjs - ceqgstot + Istoteq) + mult_q * (ceqqd |
|
|
|
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid)); |
|
|
|
} |
|
|
|
|
|
|
|
if (model->BSIM4rdsMod) |
|
|
|
{ here->BSIM4rhsd = m * ceqgdtot; |
|
|
|
here->BSIM4rhss = m * ceqgstot; |
|
|
|
{ here->BSIM4rhsd = mult_i * ceqgdtot; |
|
|
|
here->BSIM4rhss = mult_i * ceqgstot; |
|
|
|
} |
|
|
|
|
|
|
|
if (here->BSIM4trnqsMod) |
|
|
|
here->BSIM4rhsq = m * (cqcheq - cqdef); |
|
|
|
#else |
|
|
|
(*(ckt->CKTrhs + here->BSIM4dNodePrime) += m * (ceqjd - ceqbd + ceqgdtot |
|
|
|
- ceqdrn - ceqqd + Idtoteq)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4gNodePrime) -= m * (ceqqg - ceqgcrg + Igtoteq)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4dNodePrime) += (mult_i * (ceqjd - ceqbd + ceqgdtot |
|
|
|
- ceqdrn + Idtoteq) - mult_q * ceqqd)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4gNodePrime) -= mult_q * ceqqg - mult_i * (ceqgcrg - Igtoteq)); |
|
|
|
|
|
|
|
if (here->BSIM4rgateMod == 2) |
|
|
|
(*(ckt->CKTrhs + here->BSIM4gNodeExt) -= m * ceqgcrg); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4gNodeExt) -= mult_i * ceqgcrg); |
|
|
|
else if (here->BSIM4rgateMod == 3) |
|
|
|
(*(ckt->CKTrhs + here->BSIM4gNodeMid) -= m * (ceqqgmid + ceqgcrg)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4gNodeMid) -= mult_q * ceqqgmid + mult_i * ceqgcrg); |
|
|
|
|
|
|
|
if (!here->BSIM4rbodyMod) |
|
|
|
{ (*(ckt->CKTrhs + here->BSIM4bNodePrime) += m * (ceqbd + ceqbs - ceqjd |
|
|
|
- ceqjs - ceqqb + Ibtoteq)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += m * (ceqdrn - ceqbs + ceqjs |
|
|
|
+ ceqqg + ceqqb + ceqqd + ceqqgmid - ceqgstot + Istoteq)); |
|
|
|
{ (*(ckt->CKTrhs + here->BSIM4bNodePrime) += (mult_i * (ceqbd + ceqbs - ceqjd |
|
|
|
- ceqjs + Ibtoteq) - mult_q * ceqqb)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += (mult_i * (ceqdrn - ceqbs + ceqjs |
|
|
|
- ceqgstot + Istoteq) + mult_q * (ceqqg + ceqqb + ceqqd + ceqqgmid))); |
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
{ (*(ckt->CKTrhs + here->BSIM4dbNode) -= m * (ceqjd + ceqqjd)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4bNodePrime) += m * (ceqbd + ceqbs - ceqqb + Ibtoteq)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4sbNode) -= m * (ceqjs + ceqqjs)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += m * (ceqdrn - ceqbs + ceqjs + ceqqd |
|
|
|
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid - ceqgstot + Istoteq)); |
|
|
|
{ (*(ckt->CKTrhs + here->BSIM4dbNode) -= mult_i * (ceqjd + ceqqjd)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4bNodePrime) += (mult_i * (ceqbd + ceqbs + Ibtoteq) - mult_q * ceqqb)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4sbNode) -= mult_i * (ceqjs + ceqqjs)); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4sNodePrime) += (mult_i * (ceqdrn - ceqbs + ceqjs - ceqgstot + Istoteq) + mult_q * (ceqqd |
|
|
|
+ ceqqg + ceqqb + ceqqjd + ceqqjs + ceqqgmid))); |
|
|
|
} |
|
|
|
|
|
|
|
if (model->BSIM4rdsMod) |
|
|
|
{ (*(ckt->CKTrhs + here->BSIM4dNode) -= m * ceqgdtot); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4sNode) += m * ceqgstot); |
|
|
|
{ (*(ckt->CKTrhs + here->BSIM4dNode) -= mult_i * ceqgdtot); |
|
|
|
(*(ckt->CKTrhs + here->BSIM4sNode) += mult_i * ceqgstot); |
|
|
|
} |
|
|
|
|
|
|
|
if (here->BSIM4trnqsMod) |
|
|
|
@ -5057,96 +5063,96 @@ line900: |
|
|
|
geltd = here->BSIM4grgeltd; |
|
|
|
|
|
|
|
T1 = qdef * here->BSIM4gtau; |
|
|
|
|
|
|
|
#ifdef USE_OMP |
|
|
|
if (here->BSIM4rgateMod == 1) |
|
|
|
{ here->BSIM4_1 = m * geltd; |
|
|
|
here->BSIM4_2 = m * geltd; |
|
|
|
here->BSIM4_3 = m * geltd; |
|
|
|
here->BSIM4_4 = m * (gcggb + geltd - ggtg + gIgtotg); |
|
|
|
here->BSIM4_5 = m * (gcgdb - ggtd + gIgtotd); |
|
|
|
here->BSIM4_6 = m * (gcgsb - ggts + gIgtots); |
|
|
|
here->BSIM4_7 = m * (gcgbb - ggtb + gIgtotb); |
|
|
|
{ here->BSIM4_1 = mult_i * geltd; |
|
|
|
here->BSIM4_2 = mult_i * geltd; |
|
|
|
here->BSIM4_3 = mult_i * geltd; |
|
|
|
here->BSIM4_4 = mult_q * (gcggb - ggtg) + mult_i * (geltd + gIgtotg); |
|
|
|
here->BSIM4_5 = mult_q * (gcgdb - ggtd) + mult_i * gIgtotd; |
|
|
|
here->BSIM4_6 = mult_q * (gcgsb - ggts) + mult_i * gIgtots; |
|
|
|
here->BSIM4_7 = mult_q * (gcgbb - ggtb) + mult_i * gIgtotb; |
|
|
|
} /* WDLiu: gcrg already subtracted from all gcrgg below */ |
|
|
|
else if (here->BSIM4rgateMod == 2) |
|
|
|
{ here->BSIM4_8 = m * gcrg; |
|
|
|
here->BSIM4_9 = m * gcrgg; |
|
|
|
here->BSIM4_10 = m * gcrgd; |
|
|
|
here->BSIM4_11 = m * gcrgs; |
|
|
|
here->BSIM4_12 = m * gcrgb; |
|
|
|
|
|
|
|
here->BSIM4_13 = m * gcrg; |
|
|
|
here->BSIM4_14 = m * (gcggb - gcrgg - ggtg + gIgtotg); |
|
|
|
here->BSIM4_15 = m * (gcgdb - gcrgd - ggtd + gIgtotd); |
|
|
|
here->BSIM4_16 = m * (gcgsb - gcrgs - ggts + gIgtots); |
|
|
|
here->BSIM4_17 = m * (gcgbb - gcrgb - ggtb + gIgtotb); |
|
|
|
{ here->BSIM4_8 = mult_i * gcrg; |
|
|
|
here->BSIM4_9 = mult_i * gcrgg; |
|
|
|
here->BSIM4_10 = mult_i * gcrgd; |
|
|
|
here->BSIM4_11 = mult_i * gcrgs; |
|
|
|
here->BSIM4_12 = mult_i * gcrgb; |
|
|
|
|
|
|
|
here->BSIM4_13 = mult_i * gcrg; |
|
|
|
here->BSIM4_14 = mult_q * (gcggb - ggtg) + mult_i * (gIgtotg - gcrgg); |
|
|
|
here->BSIM4_15 = mult_q * (gcgdb - ggtd) + mult_i * (gIgtotd - gcrgd); |
|
|
|
here->BSIM4_16 = mult_q * (gcgsb - ggts) + mult_i * (gIgtots - gcrgs); |
|
|
|
here->BSIM4_17 = mult_q * (gcgbb - ggtb) + mult_i * (gIgtotb - gcrgb); |
|
|
|
} |
|
|
|
else if (here->BSIM4rgateMod == 3) |
|
|
|
{ here->BSIM4_18 = m * geltd; |
|
|
|
here->BSIM4_19 = m * geltd; |
|
|
|
here->BSIM4_20 = m * geltd; |
|
|
|
here->BSIM4_21 = m * (geltd + gcrg + gcgmgmb); |
|
|
|
{ here->BSIM4_18 = mult_i * geltd; |
|
|
|
here->BSIM4_19 = mult_i * geltd; |
|
|
|
here->BSIM4_20 = mult_i * geltd; |
|
|
|
here->BSIM4_21 = mult_i * (geltd + gcrg) + mult_q * gcgmgmb; |
|
|
|
|
|
|
|
here->BSIM4_22 = m * (gcrgd + gcgmdb); |
|
|
|
here->BSIM4_23 = m * gcrgg; |
|
|
|
here->BSIM4_24 = m * (gcrgs + gcgmsb); |
|
|
|
here->BSIM4_25 = m * (gcrgb + gcgmbb); |
|
|
|
here->BSIM4_22 = mult_i * gcrgd + mult_q * gcgmdb; |
|
|
|
here->BSIM4_23 = mult_i * gcrgg; |
|
|
|
here->BSIM4_24 = mult_i * gcrgs + mult_q * gcgmsb; |
|
|
|
here->BSIM4_25 = mult_i * gcrgb + mult_q * gcgmbb; |
|
|
|
|
|
|
|
here->BSIM4_26 = m * gcdgmb; |
|
|
|
here->BSIM4_27 = m * gcrg; |
|
|
|
here->BSIM4_28 = m * gcsgmb; |
|
|
|
here->BSIM4_29 = m * gcbgmb; |
|
|
|
here->BSIM4_26 = mult_q * gcdgmb; |
|
|
|
here->BSIM4_27 = mult_i * gcrg; |
|
|
|
here->BSIM4_28 = mult_q * gcsgmb; |
|
|
|
here->BSIM4_29 = mult_q * gcbgmb; |
|
|
|
|
|
|
|
here->BSIM4_30 = m * (gcggb - gcrgg - ggtg + gIgtotg); |
|
|
|
here->BSIM4_31 = m * (gcgdb - gcrgd - ggtd + gIgtotd); |
|
|
|
here->BSIM4_32 = m * (gcgsb - gcrgs - ggts + gIgtots); |
|
|
|
here->BSIM4_33 = m * (gcgbb - gcrgb - ggtb + gIgtotb); |
|
|
|
here->BSIM4_30 = mult_q * (gcggb - ggtg) + mult_i * (gIgtotg - gcrgg); |
|
|
|
here->BSIM4_31 = mult_q * (gcgdb - ggtd) + mult_i * (gIgtotd - gcrgd); |
|
|
|
here->BSIM4_32 = mult_q * (gcgsb - ggts) + mult_i * (gIgtots - gcrgs); |
|
|
|
here->BSIM4_33 = mult_q * (gcgbb - ggtb) + mult_i * (gIgtotb - gcrgb); |
|
|
|
} |
|
|
|
else |
|
|
|
{ here->BSIM4_34 = m * (gcggb - ggtg + gIgtotg); |
|
|
|
here->BSIM4_35 = m * (gcgdb - ggtd + gIgtotd); |
|
|
|
here->BSIM4_36 = m * (gcgsb - ggts + gIgtots); |
|
|
|
here->BSIM4_37 = m * (gcgbb - ggtb + gIgtotb); |
|
|
|
{ here->BSIM4_34 = mult_q * (gcggb - ggtg) + mult_i * gIgtotg; |
|
|
|
here->BSIM4_35 = mult_q * (gcgdb - ggtd) + mult_i * gIgtotd; |
|
|
|
here->BSIM4_36 = mult_q * (gcgsb - ggts) + mult_i * gIgtots; |
|
|
|
here->BSIM4_37 = mult_q * (gcgbb - ggtb) + mult_i * gIgtotb; |
|
|
|
} |
|
|
|
|
|
|
|
if (model->BSIM4rdsMod) |
|
|
|
{ here->BSIM4_38 = m * gdtotg; |
|
|
|
here->BSIM4_39 = m * gdtots; |
|
|
|
here->BSIM4_40 = m * gdtotb; |
|
|
|
here->BSIM4_41 = m * gstotd; |
|
|
|
here->BSIM4_42 = m * gstotg; |
|
|
|
here->BSIM4_43 = m * gstotb; |
|
|
|
} |
|
|
|
|
|
|
|
here->BSIM4_44 = m * (gdpr + here->BSIM4gds + here->BSIM4gbd + T1 * ddxpart_dVd |
|
|
|
- gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd); |
|
|
|
here->BSIM4_45 = m * (gdpr + gdtot); |
|
|
|
here->BSIM4_46 = m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg |
|
|
|
+ dxpart * ggtg + T1 * ddxpart_dVg); |
|
|
|
here->BSIM4_47 = m * (here->BSIM4gds + gdtots - dxpart * ggts + gIdtots |
|
|
|
- T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp); |
|
|
|
here->BSIM4_48 = m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb |
|
|
|
- T1 * ddxpart_dVb - dxpart * ggtb); |
|
|
|
|
|
|
|
here->BSIM4_49 = m * (gdpr - gdtotd); |
|
|
|
here->BSIM4_50 = m * (gdpr + gdtot); |
|
|
|
|
|
|
|
here->BSIM4_51 = m * (here->BSIM4gds + gstotd + RevSum - gcsdb - gbspdp |
|
|
|
- T1 * dsxpart_dVd - sxpart * ggtd + gIstotd); |
|
|
|
here->BSIM4_52 = m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg |
|
|
|
+ T1 * dsxpart_dVg - gIstotg); |
|
|
|
here->BSIM4_53 = m * (gspr + here->BSIM4gds + here->BSIM4gbs + T1 * dsxpart_dVs |
|
|
|
- gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots); |
|
|
|
here->BSIM4_54 = m * (gspr + gstot); |
|
|
|
here->BSIM4_55 = m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb |
|
|
|
- T1 * dsxpart_dVb + gIstotb); |
|
|
|
|
|
|
|
here->BSIM4_56 = m * (gspr - gstots); |
|
|
|
here->BSIM4_57 = m * (gspr + gstot); |
|
|
|
|
|
|
|
here->BSIM4_58 = m * (gcbdb - gjbd + gbbdp - gIbtotd); |
|
|
|
here->BSIM4_59 = m * (gcbgb - here->BSIM4gbgs - gIbtotg); |
|
|
|
here->BSIM4_60 = m * (gcbsb - gjbs + gbbsp - gIbtots); |
|
|
|
here->BSIM4_61 = m * (gjbd + gjbs + gcbbb - here->BSIM4gbbs - gIbtotb); |
|
|
|
{ here->BSIM4_38 = mult_i * gdtotg; |
|
|
|
here->BSIM4_39 = mult_i * gdtots; |
|
|
|
here->BSIM4_40 = mult_i * gdtotb; |
|
|
|
here->BSIM4_41 = mult_i * gstotd; |
|
|
|
here->BSIM4_42 = mult_i * gstotg; |
|
|
|
here->BSIM4_43 = mult_i * gstotb; |
|
|
|
} |
|
|
|
|
|
|
|
here->BSIM4_44 = mult_i * (gdpr + here->BSIM4gds + here->BSIM4gbd |
|
|
|
- gdtotd + RevSum + gbdpdp - gIdtotd) + mult_q * (T1 * ddxpart_dVd + gcddb + dxpart * ggtd); |
|
|
|
here->BSIM4_45 = mult_i * (gdpr + gdtot); |
|
|
|
here->BSIM4_46 = mult_i * (Gm - gdtotg + gbdpg - gIdtotg) |
|
|
|
+ mult_q * (dxpart * ggtg + T1 * ddxpart_dVg + gcdgb); |
|
|
|
here->BSIM4_47 = mult_i * (here->BSIM4gds + gdtots + gIdtots |
|
|
|
+ FwdSum - gbdpsp) - mult_q * (dxpart * ggts + T1 * ddxpart_dVs + gcdsb); |
|
|
|
here->BSIM4_48 = mult_i * (gjbd + gdtotb - Gmbs - gbdpb + gIdtotb) |
|
|
|
- mult_q * (dxpart * ggtb + gcdbb + T1 * ddxpart_dVb); |
|
|
|
|
|
|
|
here->BSIM4_49 = mult_i * (gdpr - gdtotd); |
|
|
|
here->BSIM4_50 = mult_i * (gdpr + gdtot); |
|
|
|
|
|
|
|
here->BSIM4_51 = mult_i * (here->BSIM4gds + gstotd + RevSum - gbspdp + gIstotd) |
|
|
|
- mult_q * (T1 * dsxpart_dVd + sxpart * ggtd + gcsdb); |
|
|
|
here->BSIM4_52 = mult_q * (gcsgb + sxpart * ggtg + T1 * dsxpart_dVg) + mult_i * (gbspg - Gm - gstotg - gIstotg); |
|
|
|
here->BSIM4_53 = mult_i * (gspr + here->BSIM4gds + here->BSIM4gbs - gIstots - gstots + FwdSum + gbspsp) |
|
|
|
+ mult_q * (sxpart * ggts + T1 * dsxpart_dVs + gcssb); |
|
|
|
here->BSIM4_54 = mult_i * (gspr + gstot); |
|
|
|
here->BSIM4_55 = mult_i * (gjbs + gstotb + Gmbs - gbspb + gIstotb) - mult_q * (gcsbb + sxpart * ggtb + T1 * dsxpart_dVb); |
|
|
|
|
|
|
|
here->BSIM4_56 = mult_i * (gspr - gstots); |
|
|
|
here->BSIM4_57 = mult_i * (gspr + gstot); |
|
|
|
|
|
|
|
here->BSIM4_58 = mult_q * gcbdb - mult_i * (gjbd - gbbdp + gIbtotd); |
|
|
|
here->BSIM4_59 = mult_q * gcbgb - mult_i * (here->BSIM4gbgs + gIbtotg); |
|
|
|
here->BSIM4_60 = mult_q * gcbsb - mult_i * (gjbs - gbbsp + gIbtots); |
|
|
|
here->BSIM4_61 = mult_i * (gjbd + gjbs - here->BSIM4gbbs |
|
|
|
- gIbtotb) + mult_q * gcbbb; |
|
|
|
|
|
|
|
ggidld = here->BSIM4ggidld; |
|
|
|
ggidlg = here->BSIM4ggidlg; |
|
|
|
@ -5156,51 +5162,50 @@ line900: |
|
|
|
ggislb = here->BSIM4ggislb; |
|
|
|
|
|
|
|
/* stamp gidl */ |
|
|
|
here->BSIM4_62 = m * ggidld; |
|
|
|
here->BSIM4_63 = m * ggidlg; |
|
|
|
here->BSIM4_64 = m * (ggidlg + ggidld + ggidlb); |
|
|
|
here->BSIM4_65 = m * ggidlb; |
|
|
|
here->BSIM4_66 = m * ggidld; |
|
|
|
here->BSIM4_67 = m * ggidlg; |
|
|
|
here->BSIM4_68 = m * (ggidlg + ggidld + ggidlb); |
|
|
|
here->BSIM4_69 = m * ggidlb; |
|
|
|
here->BSIM4_62 = mult_i * ggidld; |
|
|
|
here->BSIM4_63 = mult_i * ggidlg; |
|
|
|
here->BSIM4_64 = mult_i * (ggidlg + ggidld + ggidlb); |
|
|
|
here->BSIM4_65 = mult_i * ggidlb; |
|
|
|
here->BSIM4_66 = mult_i * ggidld; |
|
|
|
here->BSIM4_67 = mult_i * ggidlg; |
|
|
|
here->BSIM4_68 = mult_i * (ggidlg + ggidld + ggidlb); |
|
|
|
here->BSIM4_69 = mult_i * ggidlb; |
|
|
|
/* stamp gisl */ |
|
|
|
here->BSIM4_70 = m * (ggisls + ggislg + ggislb); |
|
|
|
here->BSIM4_71 = m * ggislg; |
|
|
|
here->BSIM4_72 = m * ggisls; |
|
|
|
here->BSIM4_73 = m * ggislb; |
|
|
|
here->BSIM4_74 = m * (ggislg + ggisls + ggislb); |
|
|
|
here->BSIM4_75 = m * ggislg; |
|
|
|
here->BSIM4_76 = m * ggisls; |
|
|
|
here->BSIM4_77 = m * ggislb; |
|
|
|
here->BSIM4_70 = mult_i * (ggisls + ggislg + ggislb); |
|
|
|
here->BSIM4_71 = mult_i * ggislg; |
|
|
|
here->BSIM4_72 = mult_i * ggisls; |
|
|
|
here->BSIM4_73 = mult_i * ggislb; |
|
|
|
here->BSIM4_74 = mult_i * (ggislg + ggisls + ggislb); |
|
|
|
here->BSIM4_75 = mult_i * ggislg; |
|
|
|
here->BSIM4_76 = mult_i * ggisls; |
|
|
|
here->BSIM4_77 = mult_i * ggislb; |
|
|
|
|
|
|
|
if (here->BSIM4rbodyMod) |
|
|
|
{ here->BSIM4_78 = m * (gcdbdb - here->BSIM4gbd); |
|
|
|
here->BSIM4_79 = m * (here->BSIM4gbs - gcsbsb); |
|
|
|
|
|
|
|
here->BSIM4_80 = m * (gcdbdb - here->BSIM4gbd); |
|
|
|
here->BSIM4_81 = m * (here->BSIM4gbd - gcdbdb |
|
|
|
+ here->BSIM4grbpd + here->BSIM4grbdb); |
|
|
|
here->BSIM4_82 = m * here->BSIM4grbpd; |
|
|
|
here->BSIM4_83 = m * here->BSIM4grbdb; |
|
|
|
|
|
|
|
here->BSIM4_84 = m * here->BSIM4grbpd; |
|
|
|
here->BSIM4_85 = m * here->BSIM4grbpb; |
|
|
|
here->BSIM4_86 = m * here->BSIM4grbps; |
|
|
|
here->BSIM4_87 = m * (here->BSIM4grbpd + here->BSIM4grbps |
|
|
|
{ here->BSIM4_78 = mult_q * gcdbdb - mult_i * here->BSIM4gbd; |
|
|
|
here->BSIM4_79 = mult_i * here->BSIM4gbs - mult_q * gcsbsb; |
|
|
|
|
|
|
|
here->BSIM4_80 = mult_q * gcdbdb - mult_i * here->BSIM4gbd; |
|
|
|
here->BSIM4_81 = mult_i * (here->BSIM4gbd + here->BSIM4grbpd + here->BSIM4grbdb) - mult_q * gcdbdb; |
|
|
|
here->BSIM4_82 = mult_i * here->BSIM4grbpd; |
|
|
|
here->BSIM4_83 = mult_i * here->BSIM4grbdb; |
|
|
|
|
|
|
|
here->BSIM4_84 = mult_i * here->BSIM4grbpd; |
|
|
|
here->BSIM4_85 = mult_i * here->BSIM4grbpb; |
|
|
|
here->BSIM4_86 = mult_i * here->BSIM4grbps; |
|
|
|
here->BSIM4_87 = mult_i * (here->BSIM4grbpd + here->BSIM4grbps |
|
|
|
+ here->BSIM4grbpb); |
|
|
|
/* WDLiu: (gcbbb - here->BSIM4gbbs) already added to BPbpPtr */ |
|
|
|
|
|
|
|
here->BSIM4_88 = m * (gcsbsb - here->BSIM4gbs); |
|
|
|
here->BSIM4_89 = m * here->BSIM4grbps; |
|
|
|
here->BSIM4_90 = m * here->BSIM4grbsb; |
|
|
|
here->BSIM4_91 = m * (here->BSIM4gbs - gcsbsb |
|
|
|
here->BSIM4_88 = mult_q * gcsbsb - mult_i * here->BSIM4gbs; |
|
|
|
here->BSIM4_89 = mult_i * here->BSIM4grbps; |
|
|
|
here->BSIM4_90 = mult_i * here->BSIM4grbsb; |
|
|
|
here->BSIM4_91 = mult_i * (here->BSIM4gbs - gcsbsb |
|
|
|
+ here->BSIM4grbps + here->BSIM4grbsb); |
|
|
|
|
|
|
|
here->BSIM4_92 = m * here->BSIM4grbdb; |
|
|
|
here->BSIM4_93 = m * here->BSIM4grbpb; |
|
|
|
here->BSIM4_94 = m * here->BSIM4grbsb; |
|
|
|
here->BSIM4_95 = m * (here->BSIM4grbsb + here->BSIM4grbdb |
|
|
|
here->BSIM4_92 = mult_i * here->BSIM4grbdb; |
|
|
|
here->BSIM4_93 = mult_i * here->BSIM4grbpb; |
|
|
|
here->BSIM4_94 = mult_i * here->BSIM4grbsb; |
|
|
|
here->BSIM4_95 = mult_i * (here->BSIM4grbsb + here->BSIM4grbdb |
|
|
|
+ here->BSIM4grbpb); |
|
|
|
} |
|
|
|
|
|
|
|
@ -5217,95 +5222,92 @@ line900: |
|
|
|
} |
|
|
|
#else |
|
|
|
if (here->BSIM4rgateMod == 1) |
|
|
|
{ (*(here->BSIM4GEgePtr) += m * geltd); |
|
|
|
(*(here->BSIM4GPgePtr) -= m * geltd); |
|
|
|
(*(here->BSIM4GEgpPtr) -= m * geltd); |
|
|
|
(*(here->BSIM4GPgpPtr) += m * (gcggb + geltd - ggtg + gIgtotg)); |
|
|
|
(*(here->BSIM4GPdpPtr) += m * (gcgdb - ggtd + gIgtotd)); |
|
|
|
(*(here->BSIM4GPspPtr) += m * (gcgsb - ggts + gIgtots)); |
|
|
|
(*(here->BSIM4GPbpPtr) += m * (gcgbb - ggtb + gIgtotb)); |
|
|
|
{ (*(here->BSIM4GEgePtr) += mult_i * geltd); |
|
|
|
(*(here->BSIM4GPgePtr) -= mult_i * geltd); |
|
|
|
(*(here->BSIM4GEgpPtr) -= mult_i * geltd); |
|
|
|
(*(here->BSIM4GPgpPtr) += mult_q * (gcggb - ggtg) + mult_i * (geltd + gIgtotg)); |
|
|
|
(*(here->BSIM4GPdpPtr) += mult_q * (gcgdb - ggtd) + mult_i * gIgtotd); |
|
|
|
(*(here->BSIM4GPspPtr) += mult_q * (gcgsb - ggts) + mult_i * gIgtots); |
|
|
|
(*(here->BSIM4GPbpPtr) += mult_q * (gcgbb - ggtb) + mult_i * gIgtotb); |
|
|
|
} /* WDLiu: gcrg already subtracted from all gcrgg below */ |
|
|
|
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)); |
|
|
|
{ (*(here->BSIM4GEgePtr) += mult_i * gcrg); |
|
|
|
(*(here->BSIM4GEgpPtr) += mult_i * gcrgg); |
|
|
|
(*(here->BSIM4GEdpPtr) += mult_i * gcrgd); |
|
|
|
(*(here->BSIM4GEspPtr) += mult_i * gcrgs); |
|
|
|
(*(here->BSIM4GEbpPtr) += mult_i * gcrgb); |
|
|
|
|
|
|
|
(*(here->BSIM4GPgePtr) -= mult_i * gcrg); |
|
|
|
(*(here->BSIM4GPgpPtr) += mult_q * (gcggb - ggtg) + mult_i * (gIgtotg - gcrgg)); |
|
|
|
(*(here->BSIM4GPdpPtr) += mult_q * (gcgdb - ggtd) + mult_i * (gIgtotd - gcrgd)); |
|
|
|
(*(here->BSIM4GPspPtr) += mult_q * (gcgsb - ggts) + mult_i * (gIgtots - gcrgs)); |
|
|
|
(*(here->BSIM4GPbpPtr) += mult_q * (gcgbb - ggtb) + mult_i * (gIgtotb - gcrgb)); |
|
|
|
} |
|
|
|
else if (here->BSIM4rgateMod == 3) |
|
|
|
{ (*(here->BSIM4GEgePtr) += m * geltd); |
|
|
|
(*(here->BSIM4GEgmPtr) -= m * geltd); |
|
|
|
(*(here->BSIM4GMgePtr) -= m * geltd); |
|
|
|
(*(here->BSIM4GMgmPtr) += m * (geltd + gcrg + gcgmgmb)); |
|
|
|
{ (*(here->BSIM4GEgePtr) += mult_i * geltd); |
|
|
|
(*(here->BSIM4GEgmPtr) -= mult_i * geltd); |
|
|
|
(*(here->BSIM4GMgePtr) -= mult_i * geltd); |
|
|
|
(*(here->BSIM4GMgmPtr) += mult_i * (geltd + gcrg) + mult_q * gcgmgmb); |
|
|
|
|
|
|
|
(*(here->BSIM4GMdpPtr) += m * (gcrgd + gcgmdb)); |
|
|
|
(*(here->BSIM4GMgpPtr) += m * gcrgg); |
|
|
|
(*(here->BSIM4GMspPtr) += m * (gcrgs + gcgmsb)); |
|
|
|
(*(here->BSIM4GMbpPtr) += m * (gcrgb + gcgmbb)); |
|
|
|
(*(here->BSIM4GMdpPtr) += mult_i * gcrgd + mult_q * gcgmdb); |
|
|
|
(*(here->BSIM4GMgpPtr) += mult_i * gcrgg); |
|
|
|
(*(here->BSIM4GMspPtr) += mult_i * gcrgs + mult_q * gcgmsb); |
|
|
|
(*(here->BSIM4GMbpPtr) += mult_i * gcrgb + mult_q * gcgmbb); |
|
|
|
|
|
|
|
(*(here->BSIM4DPgmPtr) += m * gcdgmb); |
|
|
|
(*(here->BSIM4GPgmPtr) -= m * gcrg); |
|
|
|
(*(here->BSIM4SPgmPtr) += m * gcsgmb); |
|
|
|
(*(here->BSIM4BPgmPtr) += m * gcbgmb); |
|
|
|
(*(here->BSIM4DPgmPtr) += mult_q * gcdgmb); |
|
|
|
(*(here->BSIM4GPgmPtr) -= mult_i * gcrg); |
|
|
|
(*(here->BSIM4SPgmPtr) += mult_q * gcsgmb); |
|
|
|
(*(here->BSIM4BPgmPtr) += mult_q * 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)); |
|
|
|
(*(here->BSIM4GPgpPtr) += mult_q * (gcggb - ggtg) + mult_i * (gIgtotg - gcrgg)); |
|
|
|
(*(here->BSIM4GPdpPtr) += mult_q * (gcgdb - ggtd) + mult_i * (gIgtotd - gcrgd)); |
|
|
|
(*(here->BSIM4GPspPtr) += mult_q * (gcgsb - ggts) + mult_i * (gIgtots - gcrgs)); |
|
|
|
(*(here->BSIM4GPbpPtr) += mult_q * (gcgbb - ggtb) + mult_i * (gIgtotb - gcrgb)); |
|
|
|
} |
|
|
|
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)); |
|
|
|
{ (*(here->BSIM4GPgpPtr) += mult_q * (gcggb - ggtg) + mult_i * gIgtotg); |
|
|
|
(*(here->BSIM4GPdpPtr) += mult_q * (gcgdb - ggtd) + mult_i * gIgtotd); |
|
|
|
(*(here->BSIM4GPspPtr) += mult_q * (gcgsb - ggts) + mult_i * gIgtots); |
|
|
|
(*(here->BSIM4GPbpPtr) += mult_q * (gcgbb - ggtb) + mult_i * 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); |
|
|
|
} |
|
|
|
|
|
|
|
(*(here->BSIM4DPdpPtr) += m * (gdpr + here->BSIM4gds + here->BSIM4gbd + T1 * ddxpart_dVd |
|
|
|
- gdtotd + RevSum + gcddb + gbdpdp + dxpart * ggtd - gIdtotd)); |
|
|
|
(*(here->BSIM4DPdPtr) -= m * (gdpr + gdtot)); |
|
|
|
(*(here->BSIM4DPgpPtr) += m * (Gm + gcdgb - gdtotg + gbdpg - gIdtotg |
|
|
|
+ dxpart * ggtg + T1 * ddxpart_dVg)); |
|
|
|
(*(here->BSIM4DPspPtr) -= m * (here->BSIM4gds + gdtots - dxpart * ggts + gIdtots |
|
|
|
- T1 * ddxpart_dVs + FwdSum - gcdsb - gbdpsp)); |
|
|
|
(*(here->BSIM4DPbpPtr) -= m * (gjbd + gdtotb - Gmbs - gcdbb - gbdpb + gIdtotb |
|
|
|
- T1 * ddxpart_dVb - dxpart * ggtb)); |
|
|
|
|
|
|
|
(*(here->BSIM4DdpPtr) -= m * (gdpr - gdtotd)); |
|
|
|
(*(here->BSIM4DdPtr) += m * (gdpr + gdtot)); |
|
|
|
|
|
|
|
(*(here->BSIM4SPdpPtr) -= m * (here->BSIM4gds + gstotd + RevSum - gcsdb - gbspdp |
|
|
|
- T1 * dsxpart_dVd - sxpart * ggtd + gIstotd)); |
|
|
|
(*(here->BSIM4SPgpPtr) += m * (gcsgb - Gm - gstotg + gbspg + sxpart * ggtg |
|
|
|
+ T1 * dsxpart_dVg - gIstotg)); |
|
|
|
(*(here->BSIM4SPspPtr) += m * (gspr + here->BSIM4gds + here->BSIM4gbs + T1 * dsxpart_dVs |
|
|
|
- gstots + FwdSum + gcssb + gbspsp + sxpart * ggts - gIstots)); |
|
|
|
(*(here->BSIM4SPsPtr) -= m * (gspr + gstot)); |
|
|
|
(*(here->BSIM4SPbpPtr) -= m * (gjbs + gstotb + Gmbs - gcsbb - gbspb - sxpart * ggtb |
|
|
|
- T1 * dsxpart_dVb + gIstotb)); |
|
|
|
|
|
|
|
(*(here->BSIM4SspPtr) -= m * (gspr - gstots)); |
|
|
|
(*(here->BSIM4SsPtr) += m * (gspr + gstot)); |
|
|
|
|
|
|
|
(*(here->BSIM4BPdpPtr) += m * (gcbdb - gjbd + gbbdp - gIbtotd)); |
|
|
|
(*(here->BSIM4BPgpPtr) += m * (gcbgb - here->BSIM4gbgs - gIbtotg)); |
|
|
|
(*(here->BSIM4BPspPtr) += m * (gcbsb - gjbs + gbbsp - gIbtots)); |
|
|
|
(*(here->BSIM4BPbpPtr) += m * (gjbd + gjbs + gcbbb - here->BSIM4gbbs |
|
|
|
- gIbtotb)); |
|
|
|
{ (*(here->BSIM4DgpPtr) += mult_i * gdtotg); |
|
|
|
(*(here->BSIM4DspPtr) += mult_i * gdtots); |
|
|
|
(*(here->BSIM4DbpPtr) += mult_i * gdtotb); |
|
|
|
(*(here->BSIM4SdpPtr) += mult_i * gstotd); |
|
|
|
(*(here->BSIM4SgpPtr) += mult_i * gstotg); |
|
|
|
(*(here->BSIM4SbpPtr) += mult_i * gstotb); |
|
|
|
} |
|
|
|
|
|
|
|
(*(here->BSIM4DPdpPtr) += mult_i * (gdpr + here->BSIM4gds + here->BSIM4gbd |
|
|
|
- gdtotd + RevSum + gbdpdp - gIdtotd) + mult_q * (T1 * ddxpart_dVd + gcddb + dxpart * ggtd)); |
|
|
|
(*(here->BSIM4DPdPtr) -= mult_i * (gdpr + gdtot)); |
|
|
|
(*(here->BSIM4DPgpPtr) += mult_i * (Gm - gdtotg + gbdpg - gIdtotg) |
|
|
|
+ mult_q * (dxpart * ggtg + T1 * ddxpart_dVg + gcdgb)); |
|
|
|
(*(here->BSIM4DPspPtr) -= mult_i * (here->BSIM4gds + gdtots + gIdtots |
|
|
|
+ FwdSum - gbdpsp) - mult_q * (dxpart * ggts + T1 * ddxpart_dVs + gcdsb)); |
|
|
|
(*(here->BSIM4DPbpPtr) -= mult_i * (gjbd + gdtotb - Gmbs - gbdpb + gIdtotb) |
|
|
|
- mult_q * (dxpart * ggtb + gcdbb + T1 * ddxpart_dVb)); |
|
|
|
|
|
|
|
(*(here->BSIM4DdpPtr) -= mult_i * (gdpr - gdtotd)); |
|
|
|
(*(here->BSIM4DdPtr) += mult_i * (gdpr + gdtot)); |
|
|
|
|
|
|
|
(*(here->BSIM4SPdpPtr) -= mult_i * (here->BSIM4gds + gstotd + RevSum - gbspdp + gIstotd) |
|
|
|
- mult_q * (T1 * dsxpart_dVd + sxpart * ggtd + gcsdb)); |
|
|
|
(*(here->BSIM4SPgpPtr) += mult_q * (gcsgb + sxpart * ggtg + T1 * dsxpart_dVg) + mult_i * (gbspg - Gm - gstotg - gIstotg)); |
|
|
|
(*(here->BSIM4SPspPtr) += mult_i * (gspr + here->BSIM4gds + here->BSIM4gbs - gIstots - gstots + FwdSum + gbspsp) + mult_q * (sxpart * ggts + T1 * dsxpart_dVs + gcssb)); |
|
|
|
(*(here->BSIM4SPsPtr) -= mult_i * (gspr + gstot)); |
|
|
|
(*(here->BSIM4SPbpPtr) -= mult_i * (gjbs + gstotb + Gmbs - gbspb + gIstotb) - mult_q * (gcsbb + sxpart * ggtb + T1 * dsxpart_dVb)); |
|
|
|
|
|
|
|
(*(here->BSIM4SspPtr) -= mult_i * (gspr - gstots)); |
|
|
|
(*(here->BSIM4SsPtr) += mult_i * (gspr + gstot)); |
|
|
|
|
|
|
|
(*(here->BSIM4BPdpPtr) += mult_q * gcbdb - mult_i * (gjbd - gbbdp + gIbtotd)); |
|
|
|
(*(here->BSIM4BPgpPtr) += mult_q * gcbgb - mult_i * (here->BSIM4gbgs + gIbtotg)); |
|
|
|
(*(here->BSIM4BPspPtr) += mult_q * gcbsb - mult_i * (gjbs - gbbsp + gIbtots)); |
|
|
|
(*(here->BSIM4BPbpPtr) += mult_i * (gjbd + gjbs - here->BSIM4gbbs |
|
|
|
- gIbtotb) + mult_q * gcbbb); |
|
|
|
|
|
|
|
ggidld = here->BSIM4ggidld; |
|
|
|
ggidlg = here->BSIM4ggidlg; |
|
|
|
@ -5315,52 +5317,50 @@ line900: |
|
|
|
ggislb = here->BSIM4ggislb; |
|
|
|
|
|
|
|
/* stamp gidl */ |
|
|
|
(*(here->BSIM4DPdpPtr) += m * ggidld); |
|
|
|
(*(here->BSIM4DPgpPtr) += m * ggidlg); |
|
|
|
(*(here->BSIM4DPspPtr) -= m * (ggidlg + ggidld + ggidlb)); |
|
|
|
(*(here->BSIM4DPbpPtr) += m * ggidlb); |
|
|
|
(*(here->BSIM4BPdpPtr) -= m * ggidld); |
|
|
|
(*(here->BSIM4BPgpPtr) -= m * ggidlg); |
|
|
|
(*(here->BSIM4BPspPtr) += m * (ggidlg + ggidld + ggidlb)); |
|
|
|
(*(here->BSIM4BPbpPtr) -= m * ggidlb); |
|
|
|
(*(here->BSIM4DPdpPtr) += mult_i * ggidld); |
|
|
|
(*(here->BSIM4DPgpPtr) += mult_i * ggidlg); |
|
|
|
(*(here->BSIM4DPspPtr) -= mult_i * (ggidlg + ggidld + ggidlb)); |
|
|
|
(*(here->BSIM4DPbpPtr) += mult_i * ggidlb); |
|
|
|
(*(here->BSIM4BPdpPtr) -= mult_i * ggidld); |
|
|
|
(*(here->BSIM4BPgpPtr) -= mult_i * ggidlg); |
|
|
|
(*(here->BSIM4BPspPtr) += mult_i * (ggidlg + ggidld + ggidlb)); |
|
|
|
(*(here->BSIM4BPbpPtr) -= mult_i * ggidlb); |
|
|
|
/* stamp gisl */ |
|
|
|
(*(here->BSIM4SPdpPtr) -= m * (ggisls + ggislg + ggislb)); |
|
|
|
(*(here->BSIM4SPgpPtr) += m * ggislg); |
|
|
|
(*(here->BSIM4SPspPtr) += m * ggisls); |
|
|
|
(*(here->BSIM4SPbpPtr) += m * ggislb); |
|
|
|
(*(here->BSIM4BPdpPtr) += m * (ggislg + ggisls + ggislb)); |
|
|
|
(*(here->BSIM4BPgpPtr) -= m * ggislg); |
|
|
|
(*(here->BSIM4BPspPtr) -= m * ggisls); |
|
|
|
(*(here->BSIM4BPbpPtr) -= m * ggislb); |
|
|
|
(*(here->BSIM4SPdpPtr) -= mult_i * (ggisls + ggislg + ggislb)); |
|
|
|
(*(here->BSIM4SPgpPtr) += mult_i * ggislg); |
|
|
|
(*(here->BSIM4SPspPtr) += mult_i * ggisls); |
|
|
|
(*(here->BSIM4SPbpPtr) += mult_i * ggislb); |
|
|
|
(*(here->BSIM4BPdpPtr) += mult_i * (ggislg + ggisls + ggislb)); |
|
|
|
(*(here->BSIM4BPgpPtr) -= mult_i * ggislg); |
|
|
|
(*(here->BSIM4BPspPtr) -= mult_i * ggisls); |
|
|
|
(*(here->BSIM4BPbpPtr) -= mult_i * ggislb); |
|
|
|
|
|
|
|
|
|
|
|
if (here->BSIM4rbodyMod) |
|
|
|
{ (*(here->BSIM4DPdbPtr) += m * (gcdbdb - here->BSIM4gbd)); |
|
|
|
(*(here->BSIM4SPsbPtr) -= m * (here->BSIM4gbs - gcsbsb)); |
|
|
|
|
|
|
|
(*(here->BSIM4DBdpPtr) += m * (gcdbdb - here->BSIM4gbd)); |
|
|
|
(*(here->BSIM4DBdbPtr) += m * (here->BSIM4gbd - gcdbdb |
|
|
|
+ here->BSIM4grbpd + here->BSIM4grbdb)); |
|
|
|
(*(here->BSIM4DBbpPtr) -= m * here->BSIM4grbpd); |
|
|
|
(*(here->BSIM4DBbPtr) -= m * here->BSIM4grbdb); |
|
|
|
|
|
|
|
(*(here->BSIM4BPdbPtr) -= m * here->BSIM4grbpd); |
|
|
|
(*(here->BSIM4BPbPtr) -= m * here->BSIM4grbpb); |
|
|
|
(*(here->BSIM4BPsbPtr) -= m * here->BSIM4grbps); |
|
|
|
(*(here->BSIM4BPbpPtr) += m * (here->BSIM4grbpd + here->BSIM4grbps |
|
|
|
{ (*(here->BSIM4DPdbPtr) += mult_q * gcdbdb - mult_i * here->BSIM4gbd); |
|
|
|
(*(here->BSIM4SPsbPtr) -= mult_i * here->BSIM4gbs - mult_q * gcsbsb); |
|
|
|
|
|
|
|
(*(here->BSIM4DBdpPtr) += mult_q * gcdbdb - mult_i * here->BSIM4gbd); |
|
|
|
(*(here->BSIM4DBdbPtr) += mult_i * (here->BSIM4gbd + here->BSIM4grbpd + here->BSIM4grbdb) - mult_q * gcdbdb); |
|
|
|
(*(here->BSIM4DBbpPtr) -= mult_i * here->BSIM4grbpd); |
|
|
|
(*(here->BSIM4DBbPtr) -= mult_i * here->BSIM4grbdb); |
|
|
|
|
|
|
|
(*(here->BSIM4BPdbPtr) -= mult_i * here->BSIM4grbpd); |
|
|
|
(*(here->BSIM4BPbPtr) -= mult_i * here->BSIM4grbpb); |
|
|
|
(*(here->BSIM4BPsbPtr) -= mult_i * here->BSIM4grbps); |
|
|
|
(*(here->BSIM4BPbpPtr) += mult_i * (here->BSIM4grbpd + here->BSIM4grbps |
|
|
|
+ here->BSIM4grbpb)); |
|
|
|
/* WDLiu: (gcbbb - here->BSIM4gbbs) already added to BPbpPtr */ |
|
|
|
|
|
|
|
(*(here->BSIM4SBspPtr) += m * (gcsbsb - here->BSIM4gbs)); |
|
|
|
(*(here->BSIM4SBbpPtr) -= m * here->BSIM4grbps); |
|
|
|
(*(here->BSIM4SBbPtr) -= m * here->BSIM4grbsb); |
|
|
|
(*(here->BSIM4SBsbPtr) += m * (here->BSIM4gbs - gcsbsb |
|
|
|
+ here->BSIM4grbps + here->BSIM4grbsb)); |
|
|
|
(*(here->BSIM4SBspPtr) += mult_q * gcsbsb - mult_i * here->BSIM4gbs); |
|
|
|
(*(here->BSIM4SBbpPtr) -= mult_i * here->BSIM4grbps); |
|
|
|
(*(here->BSIM4SBbPtr) -= mult_i * here->BSIM4grbsb); |
|
|
|
(*(here->BSIM4SBsbPtr) += mult_i * (here->BSIM4gbs + here->BSIM4grbps + here->BSIM4grbsb) - mult_q * gcsbsb); |
|
|
|
|
|
|
|
(*(here->BSIM4BdbPtr) -= m * here->BSIM4grbdb); |
|
|
|
(*(here->BSIM4BbpPtr) -= m * here->BSIM4grbpb); |
|
|
|
(*(here->BSIM4BsbPtr) -= m * here->BSIM4grbsb); |
|
|
|
(*(here->BSIM4BbPtr) += m * (here->BSIM4grbsb + here->BSIM4grbdb |
|
|
|
(*(here->BSIM4BdbPtr) -= mult_i * here->BSIM4grbdb); |
|
|
|
(*(here->BSIM4BbpPtr) -= mult_i * here->BSIM4grbpb); |
|
|
|
(*(here->BSIM4BsbPtr) -= mult_i * here->BSIM4grbsb); |
|
|
|
(*(here->BSIM4BbPtr) += mult_i * (here->BSIM4grbsb + here->BSIM4grbdb |
|
|
|
+ here->BSIM4grbpb)); |
|
|
|
} |
|
|
|
|
|
|
|
@ -5371,9 +5371,9 @@ line900: |
|
|
|
(*(here->BSIM4QspPtr) += m * (ggts - gcqsb)); |
|
|
|
(*(here->BSIM4QbpPtr) += m * (ggtb - gcqbb)); |
|
|
|
|
|
|
|
(*(here->BSIM4DPqPtr) += m * dxpart * here->BSIM4gtau); |
|
|
|
(*(here->BSIM4SPqPtr) += m * sxpart * here->BSIM4gtau); |
|
|
|
(*(here->BSIM4GPqPtr) -= m * here->BSIM4gtau); |
|
|
|
(*(here->BSIM4DPqPtr) += m * (dxpart * here->BSIM4gtau)); |
|
|
|
(*(here->BSIM4SPqPtr) += m * (sxpart * here->BSIM4gtau)); |
|
|
|
(*(here->BSIM4GPqPtr) -= m * (here->BSIM4gtau)); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
|