|
|
|
@ -465,7 +465,7 @@ int HSMHVevaluate |
|
|
|
double Ps0 =0.0, Ps0_dVbs =0.0, Ps0_dVds =0.0, Ps0_dVgs =0.0, Ps0_dT =0.0 ; |
|
|
|
double Ps0_ini =0.0 ; |
|
|
|
double Ps0_iniA =0.0, Ps0_iniA_dVxb =0.0, Ps0_iniA_dVgb =0.0, Ps0_iniA_dT =0.0 ; |
|
|
|
double Ps0_iniB =0.0, Ps0_iniB_dVxb =0.0, Ps0_iniB_dVgb =0.0, Ps0_iniB_dT =0.0 ; |
|
|
|
double Ps0_iniB =0.0;/*, Ps0_iniB_dVxb =0.0, Ps0_iniB_dVgb =0.0, Ps0_iniB_dT =0.0 ;*/ |
|
|
|
/* Psl : surface potential at the drain side */ |
|
|
|
double Psl =0.0, Psl_dVbs =0.0, Psl_dVds =0.0, Psl_dVgs =0.0, Psl_dT =0.0 ; |
|
|
|
double Psl_lim =0.0, dPlim =0.0 ; |
|
|
|
@ -542,7 +542,7 @@ int HSMHVevaluate |
|
|
|
double costi0 =0.0 ; |
|
|
|
double costi1 =0.0, costi1_dT =0.0 ; |
|
|
|
double costi3 =0.0, costi3_dVb =0.0, costi3_dVd =0.0, costi3_dVg =0.0, costi3_dT =0.0 ; |
|
|
|
double costi3_dVb_c3 =0.0, costi3_dVd_c3 =0.0, costi3_dVg_c3 =0.0 ; |
|
|
|
double costi3_dVb_c3 =0.0, costi3_dVd_c3 =0.0, costi3_dVg_c3 =0.0;/*, costi3_dT_c3 =0.0 ;*/ |
|
|
|
double costi4 =0.0, costi4_dT =0.0 ; |
|
|
|
double costi5 =0.0, costi5_dT =0.0 ; |
|
|
|
double costi6 =0.0, costi6_dT =0.0 ; |
|
|
|
@ -583,8 +583,8 @@ int HSMHVevaluate |
|
|
|
double bs12=0.0, bs12_dVb=0.0, bs12_dVd =0.0, bs12_dVg =0.0, bs12_dT =0.0 ; |
|
|
|
double Qbmm=0.0, Qbmm_dVb=0.0, Qbmm_dVd =0.0, Qbmm_dVg =0.0, Qbmm_dT =0.0 ; |
|
|
|
double dqb=0.0, dqb_dVb=0.0, dqb_dVg=0.0, dqb_dVd =0.0, dqb_dT =0.0 ; |
|
|
|
double Vdx=0.0, Vdx_dVbs=0.0 ; |
|
|
|
double Vdx2=0.0, Vdx2_dVbs=0.0 ; |
|
|
|
double Vdx=0.0, Vdx_dVbs=0.0;/*, Vdx_dT=0.0 ;*/ |
|
|
|
double Vdx2=0.0, Vdx2_dVbs=0.0;/*, Vdx2_dT=0.0 ;*/ |
|
|
|
double Pbsum=0.0, Pbsum_dVb=0.0, Pbsum_dVd=0.0, Pbsum_dVg =0.0, Pbsum_dT =0.0 ; |
|
|
|
double sqrt_Pbsum =0.0 ; |
|
|
|
/* Poly-Depletion Effect */ |
|
|
|
@ -710,6 +710,7 @@ int HSMHVevaluate |
|
|
|
/* PART-4 (junction diode) */ |
|
|
|
double Ibs =0.0, Gbs =0.0, Gbse =0.0, Ibs_dT =0.0 ; |
|
|
|
double Ibd =0.0, Gbd =0.0, Gbde =0.0, Ibd_dT =0.0 ; |
|
|
|
/* double Nvtm =0.0 ;*/ |
|
|
|
/* junction capacitance */ |
|
|
|
double Qbs =0.0, Capbs =0.0, Capbse =0.0, Qbs_dT =0.0 ; |
|
|
|
double Qbd =0.0, Capbd =0.0, Capbde =0.0, Qbd_dT =0.0 ; |
|
|
|
@ -778,9 +779,9 @@ int HSMHVevaluate |
|
|
|
double Qovs =0.0, Qovs_dVbs =0.0, Qovs_dVds =0.0, Qovs_dVgs =0.0, Qovs_dT =0.0 ; |
|
|
|
double QbuLD =0.0, QbuLD_dVbs =0.0, QbuLD_dVds =0.0, QbuLD_dVgs =0.0, QbuLD_dT =0.0 ; |
|
|
|
double QbdLD =0.0, QbdLD_dVbs =0.0, QbdLD_dVds =0.0, QbdLD_dVgs =0.0, QbdLD_dT =0.0 ; |
|
|
|
double QbsLD =0.0, QbsLD_dVbs =0.0, QbsLD_dVds =0.0, QbsLD_dVgs =0.0, QbsLD_dT =0.0 ; |
|
|
|
double QbsLD =0.0;/*, QbsLD_dVbs =0.0, QbsLD_dVds =0.0, QbsLD_dVgs =0.0, QbsLD_dT =0.0 ;*/ |
|
|
|
double QbdLDext =0.0, QbdLDext_dVbse =0.0, QbdLDext_dVdse =0.0, QbdLDext_dVgse =0.0, QbdLDext_dT =0.0 ; |
|
|
|
double QbsLDext =0.0, QbsLDext_dVbse =0.0, QbsLDext_dVdse =0.0, QbsLDext_dVgse =0.0, QbsLDext_dT =0.0 ; |
|
|
|
double QbsLDext =0.0;/*, QbsLDext_dVbse =0.0, QbsLDext_dVdse =0.0, QbsLDext_dVgse =0.0, QbsLDext_dT =0.0 ;*/ |
|
|
|
|
|
|
|
/* Vgsz for SCE and PGD */ |
|
|
|
double dmpacc =0.0, dmpacc_dVbs =0.0, dmpacc_dVds =0.0, dmpacc_dVgs =0.0 ; |
|
|
|
@ -813,7 +814,7 @@ int HSMHVevaluate |
|
|
|
double Ra_alpha, Ra_beta ; |
|
|
|
|
|
|
|
/* modified external biases for symmetry */ |
|
|
|
double Vzadd_ext_dVd = 0.0 ; |
|
|
|
double /*Vzadd_ext = 0.0,*/ Vzadd_ext_dVd = 0.0 ; |
|
|
|
double Vdserevz = 0.0, Vdserevz_dVd = 0.0 ; |
|
|
|
double Vgserevz = 0.0, Vgserevz_dVd = 0.0 ; |
|
|
|
double Vbserevz = 0.0, Vbserevz_dVd = 0.0 ; |
|
|
|
@ -832,7 +833,7 @@ int HSMHVevaluate |
|
|
|
|
|
|
|
/* temperature-dependent variables for SHE model */ |
|
|
|
double TTEMP =0.0, TTEMP0 =0.0 ; |
|
|
|
double Tdiff0 = 0.0, Tdiff0_2 = 0.0, Tdiff = 0.0, Tdiff_2 = 0.0 ; |
|
|
|
double/* Tdiff0 = 0.0, Tdiff0_2 = 0.0,*/ Tdiff = 0.0, Tdiff_2 = 0.0 ; |
|
|
|
double Eg =0.0, Eg_dT =0.0 ; |
|
|
|
double Nin =0.0, Nin_dT =0.0 ; |
|
|
|
double js =0.0, js_dT =0.0 ; |
|
|
|
@ -849,14 +850,14 @@ int HSMHVevaluate |
|
|
|
|
|
|
|
double QsuLD =0.0, QsuLD_dVbs =0.0, QsuLD_dVds =0.0, QsuLD_dVgs =0.0, QsuLD_dT =0.0 ; |
|
|
|
double QiuLD =0.0, QiuLD_dVbs =0.0, QiuLD_dVds =0.0, QiuLD_dVgs =0.0, QiuLD_dT =0.0 ; |
|
|
|
double QidLD =0.0, QidLD_dVbs =0.0, QidLD_dVds =0.0, QidLD_dVgs =0.0, QidLD_dT =0.0 ; |
|
|
|
double QisLD =0.0, QisLD_dVbs =0.0, QisLD_dVds =0.0, QisLD_dVgs =0.0, QisLD_dT =0.0 ; |
|
|
|
double QidLDext =0.0, QidLDext_dVbse =0.0, QidLDext_dVdse =0.0, QidLDext_dVgse =0.0, QidLDext_dT =0.0 ; |
|
|
|
double QisLDext =0.0, QisLDext_dVbse =0.0, QisLDext_dVdse =0.0, QisLDext_dVgse =0.0, QisLDext_dT =0.0 ; |
|
|
|
double /*QidLD =0.0,*/ QidLD_dVbs =0.0, QidLD_dVds =0.0, QidLD_dVgs =0.0, QidLD_dT =0.0 ; |
|
|
|
double /*QisLD =0.0,*/ QisLD_dVbs =0.0, QisLD_dVds =0.0, QisLD_dVgs =0.0, QisLD_dT =0.0 ; |
|
|
|
double /*QidLDext =0.0,*/ QidLDext_dVbse =0.0, QidLDext_dVdse =0.0, QidLDext_dVgse =0.0, QidLDext_dT =0.0 ; |
|
|
|
double /*QisLDext =0.0,*/ QisLDext_dVbse =0.0, QisLDext_dVdse =0.0, QisLDext_dVgse =0.0, QisLDext_dT =0.0 ; |
|
|
|
|
|
|
|
/* Self heating */ |
|
|
|
double mphn0_dT =0.0 ; |
|
|
|
double ps0ldinib_dT =0.0, cnst0over_dT =0.0 ; |
|
|
|
double ps0ldinib_dT =0.0, cnst0over_dT =0.0 ; |
|
|
|
double ps0ldinibs_dT =0.0, cnst0overs_dT =0.0 ; |
|
|
|
double Temp_dif =0.0 ; |
|
|
|
/* for SCE */ |
|
|
|
@ -868,7 +869,7 @@ int HSMHVevaluate |
|
|
|
/* Qover */ |
|
|
|
int flg_ovzone = 0 ; |
|
|
|
double VgpLD =0.0, VgpLD_dVgb =0.0 ; |
|
|
|
double Vgb_fb_LD =0.0 ; |
|
|
|
double /*VthLD =0.0,*/ Vgb_fb_LD =0.0 ; |
|
|
|
double Ac31_dVgb =0.0, Ac31_dVxb =0.0 ; |
|
|
|
double Ac1_dVgb =0.0, Ac1_dVxb =0.0 ; |
|
|
|
double Ac2_dVgb =0.0, Ac2_dVxb =0.0 ; |
|
|
|
@ -879,11 +880,11 @@ int HSMHVevaluate |
|
|
|
double Psa_dVgb =0.0, Psa_dVxb =0.0 ; |
|
|
|
double QsuLD_dVgb =0.0, QsuLD_dVxb =0.0 ; |
|
|
|
double QbuLD_dVgb =0.0, QbuLD_dVxb =0.0 ; |
|
|
|
double fs02_dVgb =0.0, fs02_dVxb =0.0 ; |
|
|
|
double fs02_dVgb =0.0 ;/*, fs02_dVxb =0.0 ;*/ |
|
|
|
double TX_dVgb =0.0, TX_dVxb =0.0 ; |
|
|
|
double TY_dVgb =0.0, TY_dVxb =0.0 ; |
|
|
|
double Ps0LD =0.0, Ps0LD_dVgb =0.0, Ps0LD_dVxb =0.0, Ps0LD_dT =0.0 ; |
|
|
|
double Ps0LD_dVbs =0.0, Ps0LD_dVds =0.0, Ps0LD_dVgs =0.0 ; |
|
|
|
double /*Ps0LD_dVbs =0.0,*/ Ps0LD_dVds =0.0; /*Ps0LD_dVgs =0.0 ;*/ |
|
|
|
double Pb2over =0.0, Pb2over_dT =0.0 ; |
|
|
|
|
|
|
|
int flg_overgiven =0 ; |
|
|
|
@ -891,7 +892,7 @@ int HSMHVevaluate |
|
|
|
double Lovers =0.0, Loverd =0.0 ; |
|
|
|
double Novers =0.0, Noverd =0.0 ; |
|
|
|
double Nover_func =0.0 ; |
|
|
|
double ps0ldinib_func =0.0, ps0ldinib_func_dT =0.0 ; |
|
|
|
/* double ps0ldinib_func =0.0, ps0ldinib_func_dT =0.0 ;*/ |
|
|
|
double cnst0over_func =0.0, cnst0over_func_dT =0.0 ; |
|
|
|
double cnst1over =0.0, cnst1over_dT =0.0; |
|
|
|
/* Qover Analytical Model */ |
|
|
|
@ -904,15 +905,17 @@ int HSMHVevaluate |
|
|
|
double Tp, Tp_dT ; |
|
|
|
double Tq, Tq_dVxb, Tq_dVgb, Tq_dT ; |
|
|
|
double T1_dVxb, T1_dVgb ; |
|
|
|
/* double T2_dVxb, T2_dVgb ;*/ |
|
|
|
/* double T3_dVxb, T3_dVgb ;*/ |
|
|
|
double T5_dVxb, T5_dVgb ; |
|
|
|
double VgpLD_shift, VgpLD_shift_dT ; |
|
|
|
double VgpLD_shift_dVgb, VgpLD_shift_dVxb, exp_bVbs_dVxb ; |
|
|
|
double gamma, gamma_dVxb, gamma_dT ; |
|
|
|
double psi , psi_dVgb , psi_dVxb , psi_dT ; |
|
|
|
double psi_B, arg_B ; |
|
|
|
/* double psi_B, arg_B ;*/ |
|
|
|
double Chi_1, Chi_1_dVgb, Chi_1_dVxb ,Chi_1_dT ; |
|
|
|
double Chi_A, Chi_A_dVgb, Chi_A_dVxb, Chi_A_dT ; |
|
|
|
double Chi_B, Chi_B_dVgb, Chi_B_dVxb, Chi_B_dT; |
|
|
|
double Chi_B, Chi_B_dVgb, Chi_B_dVxb, Chi_B_dT;/*, Chi_B_dpsi , Chi_B_dgamma ;*/ |
|
|
|
|
|
|
|
/* X_dT for leakage currents & junction diodes */ |
|
|
|
double isbd_dT =0.0, isbs_dT =0.0 ; |
|
|
|
@ -1815,8 +1818,10 @@ int HSMHVevaluate |
|
|
|
|
|
|
|
Vdx = model->HSMHV_scp21 + Vdsz ; |
|
|
|
Vdx_dVbs = Vdsz_dVbs ; |
|
|
|
/* Vdx_dT = Vdsz_dT ;*/ |
|
|
|
Vdx2 = Vdx * Vdx ; |
|
|
|
Vdx2_dVbs = 2 * Vdx_dVbs * Vdx ; |
|
|
|
/* Vdx2_dT = 2 * Vdx_dT * Vdx ;*/ |
|
|
|
|
|
|
|
dVthLP = T1 * dVth0 * T3 + dqb - here->HSMHV_msc / Vdx2 ; |
|
|
|
dVthLP_dVb = T1_dVb * dVth0 * T3 + T1 * dVth0_dVb * T3 + T1 * dVth0 * T3_dVb |
|
|
|
@ -4045,6 +4050,7 @@ start_of_mobility: |
|
|
|
costi3_dVb_c3 = costi3_dVb * T2 ; |
|
|
|
costi3_dVd_c3 = costi3_dVd * T2 ; |
|
|
|
costi3_dVg_c3 = costi3_dVg * T2 ; |
|
|
|
/* costi3_dT_c3 = costi3_dT * T2 ;*/ |
|
|
|
|
|
|
|
costi4 = costi3 * beta * 0.5 ; |
|
|
|
costi4_dT = ( costi3_dT * beta + costi3 * beta_dT ) * 0.5 ; |
|
|
|
@ -5051,9 +5057,8 @@ start_of_mobility: |
|
|
|
Nover_func = Novers ; |
|
|
|
cnst0over_func = ModeNML * here->HSMHV_cnst0overs + ModeRVS * here->HSMHV_cnst0over ; |
|
|
|
cnst0over_func_dT = ModeNML * cnst0overs_dT + ModeRVS * cnst0over_dT ; |
|
|
|
ps0ldinib_func = ModeNML * here->HSMHV_ps0ldinibs + ModeRVS * here->HSMHV_ps0ldinib ; |
|
|
|
ps0ldinib_func_dT = ModeNML * ps0ldinibs_dT + ModeRVS * ps0ldinib_dT ; |
|
|
|
|
|
|
|
/* ps0ldinib_func = ModeNML * here->HSMHV_ps0ldinibs + ModeRVS * here->HSMHV_ps0ldinib ;*/ |
|
|
|
/* ps0ldinib_func_dT = ModeNML * ps0ldinibs_dT + ModeRVS * ps0ldinib_dT ;*/ |
|
|
|
#include "hsmhveval_qover.h" |
|
|
|
|
|
|
|
T4 = here->HSMHV_weffcv_nf * Lovers * ( 1 - CVDSOVER ) ; |
|
|
|
@ -5064,18 +5069,18 @@ start_of_mobility: |
|
|
|
Qovs_dVbs = T4 * QsuLD_dVbs ; |
|
|
|
Qovs_dT = T4 * QsuLD_dT ; |
|
|
|
|
|
|
|
QisLD = T4 * QiuLD ; |
|
|
|
/* QisLD = T4 * QiuLD ;*/ |
|
|
|
QisLD_dVbs = T4 * QiuLD_dVbs ; |
|
|
|
QisLD_dVds = T4 * QiuLD_dVds ; |
|
|
|
QisLD_dVgs = T4 * QiuLD_dVgs ; |
|
|
|
QisLD_dT = T4 * QiuLD_dT ; |
|
|
|
|
|
|
|
QbsLD = T4 * QbuLD ; |
|
|
|
QbsLD_dVbs = T4 * QbuLD_dVbs ; |
|
|
|
/* QbsLD_dVbs = T4 * QbuLD_dVbs ; |
|
|
|
QbsLD_dVds = T4 * QbuLD_dVds ; |
|
|
|
QbsLD_dVgs = T4 * QbuLD_dVgs ; |
|
|
|
QbsLD_dT = T4 * QbuLD_dT ; |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
if ( CVDSOVER != 0.0 ) { /* Qovsext begin */ |
|
|
|
@ -5097,18 +5102,18 @@ start_of_mobility: |
|
|
|
Qovsext_dVbse = T4 * QsuLD_dVbs ; |
|
|
|
Qovsext_dT = T4 * QsuLD_dT ; |
|
|
|
|
|
|
|
QisLDext = T4 * QiuLD ; |
|
|
|
/* QisLDext = T4 * QiuLD ;*/ |
|
|
|
QisLDext_dVbse = T4 * QiuLD_dVbs ; |
|
|
|
QisLDext_dVdse = T4 * QiuLD_dVds ; |
|
|
|
QisLDext_dVgse = T4 * QiuLD_dVgs ; |
|
|
|
QisLDext_dT = T4 * QiuLD_dT ; |
|
|
|
|
|
|
|
QbsLDext = T4 * QbuLD ; |
|
|
|
QbsLDext_dVbse = T4 * QbuLD_dVbs ; |
|
|
|
/* QbsLDext_dVbse = T4 * QbuLD_dVbs ; |
|
|
|
QbsLDext_dVdse = T4 * QbuLD_dVds ; |
|
|
|
QbsLDext_dVgse = T4 * QbuLD_dVgs ; |
|
|
|
QbsLDext_dT = T4 * QbuLD_dT ; |
|
|
|
|
|
|
|
*/ |
|
|
|
} /* Qovsext end */ |
|
|
|
|
|
|
|
} |
|
|
|
@ -5186,9 +5191,8 @@ start_of_mobility: |
|
|
|
Nover_func = Noverd ; |
|
|
|
cnst0over_func = ModeNML * here->HSMHV_cnst0over + ModeRVS * here->HSMHV_cnst0overs ; |
|
|
|
cnst0over_func_dT = ModeNML * cnst0over_dT + ModeRVS * cnst0overs_dT ; |
|
|
|
ps0ldinib_func = ModeNML * here->HSMHV_ps0ldinib + ModeRVS * here->HSMHV_ps0ldinibs ; |
|
|
|
ps0ldinib_func_dT = ModeNML * ps0ldinib_dT + ModeRVS * ps0ldinibs_dT ; |
|
|
|
|
|
|
|
/* ps0ldinib_func = ModeNML * here->HSMHV_ps0ldinib + ModeRVS * here->HSMHV_ps0ldinibs ;*/ |
|
|
|
/* ps0ldinib_func_dT = ModeNML * ps0ldinib_dT + ModeRVS * ps0ldinibs_dT ;*/ |
|
|
|
#include "hsmhveval_qover.h" |
|
|
|
|
|
|
|
T4 = here->HSMHV_weffcv_nf * Loverd * ( 1 - CVDSOVER ) ; |
|
|
|
@ -5198,7 +5202,7 @@ start_of_mobility: |
|
|
|
Qovd_dVbs = T4 * QsuLD_dVbs ; |
|
|
|
Qovd_dT = T4 * QsuLD_dT ; |
|
|
|
|
|
|
|
QidLD = T4 * QiuLD ; |
|
|
|
/* QidLD = T4 * QiuLD ;*/ |
|
|
|
QidLD_dVbs = T4 * QiuLD_dVbs ; |
|
|
|
QidLD_dVds = T4 * QiuLD_dVds ; |
|
|
|
QidLD_dVgs = T4 * QiuLD_dVgs ; |
|
|
|
@ -5230,7 +5234,7 @@ start_of_mobility: |
|
|
|
Qovdext_dVbse = T4 * QsuLD_dVbs ; |
|
|
|
Qovdext_dT = T4 * QsuLD_dT ; |
|
|
|
|
|
|
|
QidLDext = T4 * QiuLD ; |
|
|
|
/* QidLDext = T4 * QiuLD ;*/ |
|
|
|
QidLDext_dVbse = T4 * QiuLD_dVbs ; |
|
|
|
QidLDext_dVdse = T4 * QiuLD_dVds ; |
|
|
|
QidLDext_dVgse = T4 * QiuLD_dVgs ; |
|
|
|
|