diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include index 978aabe04..cf188bd4f 100644 --- a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include +++ b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include @@ -41,6 +41,16 @@ // ___Professor in Graduate School _______ // ******************************************************** +// Hyperbolic Smoothing max Function +analog function real hypmax; + input x, xmin, c; + real x, xmin, c; + + begin + hypmax = xmin + 0.5 * (x - xmin - c + sqrt((x - xmin - c) * (x - xmin - c) - 4.0 * xmin * c)); + end +endfunction + // Temperature Dependence Type analog function real Tempdep; input PARAML, PARAMT, DELTEMP, TEMPMOD; @@ -48,7 +58,7 @@ analog function real Tempdep; begin if (TEMPMOD != 0) begin - Tempdep = PARAML + `hypmax(PARAMT * DELTEMP, -PARAML, 1.0e-6); + Tempdep = PARAML + hypmax(PARAMT * DELTEMP, -PARAML, 1.0e-6); end else begin Tempdep = PARAML * `hypsmooth(1.0 + PARAMT * DELTEMP - 1.0e-6, 1.0e-3); end @@ -2404,18 +2414,18 @@ analog begin ETA0_t = Tempdep(ETA0_i, TETA0, delTemp, TEMPMOD); ETA0R_t = Tempdep(ETA0R_i, TETA0R, delTemp, TEMPMOD); T1 = U0_i * pow(TRatio, UTE_i); - U0_t = T1 + `hypmax(UTL_i * delTemp, -0.9 * T1, 1.0e-4); + U0_t = T1 + hypmax(UTL_i * delTemp, -0.9 * T1, 1.0e-4); u0 = U0_t; if (ASYMMOD == 1) begin T1 = U0R_i * pow(TRatio, UTER_i); - U0R_t = T1 + `hypmax(UTLR_i * delTemp, -0.9 * T1, 1.0e-4); + U0R_t = T1 + hypmax(UTLR_i * delTemp, -0.9 * T1, 1.0e-4); u0r = U0R_t; end ETAMOB_t = Tempdep(ETAMOB_i, EMOBT_i, delTemp, TEMPMOD); - UA_t = UA_i + `hypmax(UA1_i*delTemp, -UA_i, 1.0e-6); + UA_t = UA_i + hypmax(UA1_i*delTemp, -UA_i, 1.0e-6); if (ASYMMOD != 0) begin - UAR_t = UAR_i + `hypmax(UA1R_i * delTemp, -UAR_i, 1.0e-6); + UAR_t = UAR_i + hypmax(UA1R_i * delTemp, -UAR_i, 1.0e-6); end if (BULKMOD != 0) begin @@ -2499,26 +2509,26 @@ analog begin SII0_t = SII0_i * (`hypsmooth(1.0 + TII_i * (TRatio - 1.0) - 0.01, 1.0e-3) + 0.01); K0_t = K0_i + K01_i * delTemp; - K0SI_t = K0SI_i + `hypmax(K0SI1_i * delTemp, -K0SI_i, 1.0e-6); - K2SI_t = K2SI_i + `hypmax(K2SI1_i * delTemp, -K2SI_i, 1.0e-6); - K1_t = K1_i + `hypmax(K11_i * delTemp, -K1_i, 1.0e-6); + K0SI_t = K0SI_i + hypmax(K0SI1_i * delTemp, -K0SI_i, 1.0e-6); + K2SI_t = K2SI_i + hypmax(K2SI1_i * delTemp, -K2SI_i, 1.0e-6); + K1_t = K1_i + hypmax(K11_i * delTemp, -K1_i, 1.0e-6); K2SAT_t = K2SAT_i + K2SAT1_i * delTemp; A1_t = A1_i + A11_i * delTemp; A2_t = A2_i + A21_i * delTemp; - K2_t = K2_i + `hypmax(K21_i * delTemp, -K2_i, 1.0e-6); + K2_t = K2_i + hypmax(K21_i * delTemp, -K2_i, 1.0e-6); K0SISAT_t = K0SISAT_i + K0SISAT1_i * delTemp; K2SISAT_t = K2SISAT_i + K2SISAT1_i * delTemp; - AIGBINV_t = AIGBINV_i + `hypmax(AIGBINV1_i * delTemp, -AIGBINV_i, 1.0e-6); - AIGBACC_t = AIGBACC_i + `hypmax(AIGBACC1_i * delTemp, -AIGBACC_i, 1.0e-6); - AIGC_t = AIGC_i + `hypmax(AIGC1_i * delTemp, -AIGC_i, 1.0e-6); - AIGS_t = AIGS_i + `hypmax(AIGS1_i * delTemp, -AIGS_i, 1.0e-6); - AIGD_t = AIGD_i + `hypmax(AIGD1_i * delTemp, -AIGD_i, 1.0e-6); + AIGBINV_t = AIGBINV_i + hypmax(AIGBINV1_i * delTemp, -AIGBINV_i, 1.0e-6); + AIGBACC_t = AIGBACC_i + hypmax(AIGBACC1_i * delTemp, -AIGBACC_i, 1.0e-6); + AIGC_t = AIGC_i + hypmax(AIGC1_i * delTemp, -AIGC_i, 1.0e-6); + AIGS_t = AIGS_i + hypmax(AIGS1_i * delTemp, -AIGS_i, 1.0e-6); + AIGD_t = AIGD_i + hypmax(AIGD1_i * delTemp, -AIGD_i, 1.0e-6); BGIDL_t = BGIDL_i * `hypsmooth(1.0 + TGIDL_i * delTemp - 1.0e-6, 1.0e-3); BGISL_t = BGISL_i * `hypsmooth(1.0 + TGIDL_i * delTemp - 1.0e-6, 1.0e-3); - ALPHA0_t = ALPHA0_i + `hypmax(ALPHA01 * delTemp, -ALPHA0_i, 1.0e-6); - ALPHA1_t = ALPHA1_i + `hypmax(ALPHA11 * delTemp, -ALPHA1_i, 1.0e-6); - ALPHAII0_t = ALPHAII0_i + `hypmax(ALPHAII01 * delTemp, -ALPHAII0_i, 1.0e-25); - ALPHAII1_t = ALPHAII1_i + `hypmax(ALPHAII11 * delTemp, -ALPHAII1_i, 1.0e-20); + ALPHA0_t = ALPHA0_i + hypmax(ALPHA01 * delTemp, -ALPHA0_i, 1.0e-6); + ALPHA1_t = ALPHA1_i + hypmax(ALPHA11 * delTemp, -ALPHA1_i, 1.0e-6); + ALPHAII0_t = ALPHAII0_i + hypmax(ALPHAII01 * delTemp, -ALPHAII0_i, 1.0e-25); + ALPHAII1_t = ALPHAII1_i + hypmax(ALPHAII11 * delTemp, -ALPHAII1_i, 1.0e-20); igtemp = `lexp(IGT_i * `lln(TRatio)); igsd_mult = igsd_mult0 * igtemp; @@ -3207,7 +3217,7 @@ analog begin Vdiff = vds - Vdsatii; T0 = BETAII2_i + BETAII1_i * Vdiff + BETAII0_i * Vdiff * Vdiff; T1 = sqrt(T0 * T0 + 1.0e-10); - Ratio = -`hypmax( -ALPHAII * `lexp(Vdiff / T1), -10.0, IIMOD2CLAMP3); + Ratio = -hypmax( -ALPHAII * `lexp(Vdiff / T1), -10.0, IIMOD2CLAMP3); Iii = Ratio * ids; end end // End of IIMOD=2 diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include b/src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include index bd1bff0c4..a15059622 100644 --- a/src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include +++ b/src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include @@ -76,11 +76,6 @@ `define hypsmooth(x,c) \ (0.5 * ((x) + sqrt((x)*(x) + 4.0*(c)*(c)))) -// Hyperbolic Smoothing max Function -`define hypmax(x,xmin,c) \ - ((xmin) + 0.5 * ((x) - (xmin) - (c) + sqrt(((x) - (xmin) - (c)) * ((x) - (xmin) - (c)) - 4.0 * (xmin) * (c)))) - - // Mathematical functions //`define SINH(x) (0.5 * (`lexp(x) - `lexp(-(x)))) `define COSH(x) (0.5 * (`lexp(x) + `lexp(-(x))))