new version 102.1
This commit is contained in:
parent
1ae1913fd6
commit
2958b19aa4
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1 (PSP), 200.2 (JUNCAP), October 2006 (Simkit 2.4)
|
||||
// Version: 102.1 (PSP), 200.2 (JUNCAP), April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1 (PSP), 200.2 (JUNCAP), October 2006 (Simkit 2.4)
|
||||
// Version: 102.1 (PSP), 200.2 (JUNCAP), April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
@ -149,7 +149,7 @@ h2d = (x) + (eps) * h2; \
|
|||
h3 = (x0) + h2d; \
|
||||
h4 = (x0) - h2d; \
|
||||
h5 = sqrt(h4 * h4 + h1); \
|
||||
hyp5 = 2.0 * (x) * (x0) / (h3 + h5);
|
||||
hyp5 = 2.0 * ((x) * (x0) / (h3 + h5));
|
||||
|
||||
|
||||
// A special function used to calculate TAT-currents,
|
||||
|
|
@ -163,12 +163,12 @@ end else begin \
|
|||
terfc = 1 / (1 - perfc * y); \
|
||||
end \
|
||||
`expl_low(-ysq + m, tmp) \
|
||||
erfcpos = (`aerfc * terfc + berfc * terfc * terfc + cerfc * terfc * terfc * terfc) * tmp; \
|
||||
erfcpos = (`aerfc * terfc + berfc * (terfc * terfc) + cerfc * (terfc * terfc * terfc)) * tmp; \
|
||||
if (y > 0) begin \
|
||||
result = erfcpos; \
|
||||
end else begin\
|
||||
`expl_low(m, tmp) \
|
||||
result = 2* tmp - erfcpos; \
|
||||
result = 2 * tmp - erfcpos; \
|
||||
end
|
||||
|
||||
|
||||
|
|
@ -192,35 +192,35 @@ end else begin \
|
|||
wsrh = wsrhstep + dwsrh; \
|
||||
`mypower(vbi_minus_vjsrh * VBIRinv, P, tmp) \
|
||||
wdep = wdepnulr * tmp; \
|
||||
asrh = ftd * (zinv - 1) * wdep; \
|
||||
isrh = CSRH * asrh * wsrh; \
|
||||
asrh = ftd * ((zinv - 1) * wdep); \
|
||||
isrh = CSRH * (asrh * wsrh); \
|
||||
end \
|
||||
if (CTAT == 0) begin \
|
||||
itat = 0; \
|
||||
end else begin \
|
||||
btat = btatpart * (wdep * one_minus_P) / vbi_minus_vjsrh; \
|
||||
twoatatoverthreebtat = `twothirds * atat / btat; \
|
||||
btat = btatpart * ((wdep * one_minus_P) / vbi_minus_vjsrh); \
|
||||
twoatatoverthreebtat = (`twothirds * atat) / btat; \
|
||||
umaxbeforelimiting = twoatatoverthreebtat * twoatatoverthreebtat; \
|
||||
umax = sqrt(umaxbeforelimiting * umaxbeforelimiting / (umaxbeforelimiting * umaxbeforelimiting + 1)); \
|
||||
sqrtumax = sqrt(abs(umax)); \
|
||||
umaxpoweronepointfive = umax * sqrtumax; \
|
||||
`mypower2((1 + btat * umaxpoweronepointfive), (-P * one_over_one_minus_P), wgamma) \
|
||||
wtat = wsrh * wgamma / (wsrh + wgamma); \
|
||||
ktat = sqrt(0.375 * btat / sqrtumax); \
|
||||
ltat = 2 * twoatatoverthreebtat * sqrtumax - umax; \
|
||||
mtat = atat * twoatatoverthreebtat * sqrtumax - atat * umax + 0.5 * btat * umaxpoweronepointfive; \
|
||||
ktat = sqrt(0.375 * (btat / sqrtumax)); \
|
||||
ltat = 2 * (twoatatoverthreebtat * sqrtumax) - umax; \
|
||||
mtat = atat * twoatatoverthreebtat * sqrtumax - atat * umax + 0.5 * (btat * umaxpoweronepointfive); \
|
||||
xerfc = (ltat - 1) * ktat; \
|
||||
`calcerfcexpmtat(xerfc, mtat, erfctimesexpmtat) \
|
||||
gammamax = atat * erfctimesexpmtat * `SQRTPI / (2 * ktat); \
|
||||
itat = CTAT * asrh * gammamax * wtat; \
|
||||
gammamax = `SQRTPI * 0.5 * (atat * erfctimesexpmtat / ktat); \
|
||||
itat = CTAT * (asrh * gammamax * wtat); \
|
||||
end \
|
||||
if (CBBT == 0) begin \
|
||||
ibbt = 0; \
|
||||
end else begin \
|
||||
`mypower(((VBIR - vbbt) * VBIRinv), P, tmp) \
|
||||
Fmaxr = (VBIR - vbbt) * one_over_one_minus_P * wdepnulrinv / tmp; \
|
||||
Fmaxr = one_over_one_minus_P * ((VBIR - vbbt) * wdepnulrinv / tmp); \
|
||||
`expl(-fbbt / Fmaxr, tmp) \
|
||||
ibbt = CBBT * VAK * Fmaxr * Fmaxr * tmp; \
|
||||
ibbt = CBBT * (VAK * Fmaxr * Fmaxr * tmp); \
|
||||
end \
|
||||
if (VBR > `vbrmax) begin \
|
||||
fbreakdown = 1; \
|
||||
|
|
@ -246,7 +246,7 @@ two_psistar = 0.0; \
|
|||
if ( !( ((AB_i) == 0) && ((LS_i) == 0) && ((LG_i) == 0) ) ) begin \
|
||||
`hypfunction5(VAK, vfmin, vch, vj) \
|
||||
if (VAK < VMAX) begin \
|
||||
`expl(0.5 * VAK * phitdinv, zinv) \
|
||||
`expl(0.5 * (VAK * phitdinv), zinv) \
|
||||
idmult = zinv * zinv; \
|
||||
end else begin \
|
||||
`expl(VMAX * phitdinv, exp_VMAX_over_phitd) \
|
||||
|
|
@ -256,9 +256,9 @@ if ( !( ((AB_i) == 0) && ((LS_i) == 0) && ((LG_i) == 0) ) ) begin \
|
|||
idmult = idmult - 1.0; \
|
||||
z = 1 / zinv; \
|
||||
if (VAK > 0) begin \
|
||||
two_psistar = 2.0 * phitd * ln(2.0 + z + sqrt((z + 1.0) * (z + 3.0))); \
|
||||
two_psistar = 2.0 * (phitd * ln(2.0 + z + sqrt((z + 1.0) * (z + 3.0)))); \
|
||||
end else begin \
|
||||
two_psistar = -VAK + 2.0 * phitd * ln(2 * zinv + 1 + sqrt((1 + zinv) * (1 + 3 * zinv))); \
|
||||
two_psistar = -VAK + 2.0 * (phitd * ln(2 * zinv + 1 + sqrt((1 + zinv) * (1 + 3 * zinv)))); \
|
||||
end \
|
||||
vjlim = vbimin - two_psistar; \
|
||||
`hypfunction2(VAK, vjlim, phitd, vjsrh) \
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1 (PSP), 200.2 (JUNCAP), October 2006 (Simkit 2.4)
|
||||
// Version: 102.1 (PSP), 200.2 (JUNCAP), April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1 (PSP), 200.2 (JUNCAP), October 2006 (Simkit 2.4)
|
||||
// Version: 102.1 (PSP), 200.2 (JUNCAP), April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
@ -283,21 +283,21 @@
|
|||
|
||||
// Update internal nodes
|
||||
V(RES1) <+ vnorm_inv * I(RES1) * r_nqs;
|
||||
V(SPLINE1) <+ vnorm_inv * idt(-Tnorm * fk1, Qp1_0);
|
||||
V(SPLINE1) <+ idt(-vnorm_inv * Tnorm * fk1, Qp1_0);
|
||||
V(RES2) <+ vnorm_inv * I(RES2) * r_nqs;
|
||||
V(SPLINE2) <+ vnorm_inv * idt(-Tnorm * fk2, Qp2_0);
|
||||
V(SPLINE2) <+ idt(-vnorm_inv * Tnorm * fk2, Qp2_0);
|
||||
V(RES3) <+ vnorm_inv * I(RES3) * r_nqs;
|
||||
V(SPLINE3) <+ vnorm_inv * idt(-Tnorm * fk3, Qp3_0);
|
||||
V(SPLINE3) <+ idt(-vnorm_inv * Tnorm * fk3, Qp3_0);
|
||||
V(RES4) <+ vnorm_inv * I(RES4) * r_nqs;
|
||||
V(SPLINE4) <+ vnorm_inv * idt(-Tnorm * fk4, Qp4_0);
|
||||
V(SPLINE4) <+ idt(-vnorm_inv * Tnorm * fk4, Qp4_0);
|
||||
V(RES5) <+ vnorm_inv * I(RES5) * r_nqs;
|
||||
V(SPLINE5) <+ vnorm_inv * idt(-Tnorm * fk5, Qp5_0);
|
||||
V(SPLINE5) <+ idt(-vnorm_inv * Tnorm * fk5, Qp5_0);
|
||||
V(RES6) <+ vnorm_inv * I(RES6) * r_nqs;
|
||||
V(SPLINE6) <+ vnorm_inv * idt(-Tnorm * fk6, Qp6_0);
|
||||
V(SPLINE6) <+ idt(-vnorm_inv * Tnorm * fk6, Qp6_0);
|
||||
V(RES7) <+ vnorm_inv * I(RES7) * r_nqs;
|
||||
V(SPLINE7) <+ vnorm_inv * idt(-Tnorm * fk7, Qp7_0);
|
||||
V(SPLINE7) <+ idt(-vnorm_inv * Tnorm * fk7, Qp7_0);
|
||||
V(RES8) <+ vnorm_inv * I(RES8) * r_nqs;
|
||||
V(SPLINE8) <+ vnorm_inv * idt(-Tnorm * fk8, Qp8_0);
|
||||
V(SPLINE8) <+ idt(-vnorm_inv * Tnorm * fk8, Qp8_0);
|
||||
V(RES9) <+ vnorm_inv * I(RES9) * r_nqs;
|
||||
V(SPLINE9) <+ vnorm_inv * idt(-Tnorm * fk9, Qp9_0);
|
||||
V(SPLINE9) <+ idt(-vnorm_inv * Tnorm * fk9, Qp9_0);
|
||||
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
// around the arguments in the expressions are necessary)
|
||||
`define sigma(a,c,tau,eta,y) \
|
||||
nu = (a) + (c); \
|
||||
mu = nu * nu / (tau) + 0.5 * (c) * (c) - (a); \
|
||||
mu = nu * nu / (tau) + 0.5 * ((c) * (c)) - (a); \
|
||||
y = (eta) + (a) * nu / (mu + (nu / mu) * (c) * ((c) * (c) * `oneThird - (a)));
|
||||
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ nu = (a) + (c); \
|
|||
if (abs(tau) < 1e-120) begin /*sometimes tau is extremely small...*/\
|
||||
y = (eta); \
|
||||
end else begin \
|
||||
mu = (nu) * (nu) / (tau) + 0.5 * (c) * (c) - (a) * (b); \
|
||||
mu = (nu) * (nu) / (tau) + 0.5 * ((c) * (c)) - (a) * (b); \
|
||||
y = (eta) + (a) * nu / (mu + (nu / mu) * (c) * ((c) * (c) * `oneThird - (a) * (b))); \
|
||||
end
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ if (abs(xg) <= margin) begin \
|
|||
end else begin \
|
||||
if (xg < -margin) begin \
|
||||
SP_S_yg = -xg; \
|
||||
SP_S_ysub = 1.25 * SP_S_yg * inv_xi; \
|
||||
SP_S_ysub = 1.25 * (SP_S_yg * inv_xi); \
|
||||
SP_S_eta = 0.5 * (SP_S_ysub + 10 - sqrt((SP_S_ysub - 6.0) * (SP_S_ysub - 6.0) + 64.0)); \
|
||||
SP_S_temp = SP_S_yg - SP_S_eta; \
|
||||
SP_S_a = SP_S_temp * SP_S_temp + Gf2*(SP_S_eta + 1.0);\
|
||||
|
|
@ -108,15 +108,15 @@ end else begin \
|
|||
SP_S_delta1 = 1.0 / SP_S_delta0; \
|
||||
SP_S_temp = 1.0 / (2.0 + SP_S_y0 * SP_S_y0); \
|
||||
SP_S_xi0 = SP_S_y0 * SP_S_y0 * SP_S_temp; \
|
||||
SP_S_xi1 = 4.0 * SP_S_y0 * SP_S_temp * SP_S_temp; \
|
||||
SP_S_xi1 = 4.0 * (SP_S_y0 * SP_S_temp * SP_S_temp); \
|
||||
SP_S_xi2 = (8.0 * SP_S_temp - 12.0 * SP_S_xi0) * SP_S_temp * SP_S_temp; \
|
||||
SP_S_temp = SP_S_yg - SP_S_y0; \
|
||||
SP_S_temp1 = (delta) * SP_S_delta1; \
|
||||
SP_S_pC = 2.0 * SP_S_temp + Gf2 * (SP_S_delta0 - 1.0 - SP_S_temp1 + (delta) * (1.0 - SP_S_xi1)); \
|
||||
SP_S_qC = SP_S_temp * SP_S_temp - Gf2 * (SP_S_delta0 - SP_S_y0 - 1.0 + SP_S_temp1 + (delta) * (SP_S_y0 - 1.0 - SP_S_xi0)); \
|
||||
SP_S_temp = 2.0 - Gf2*(SP_S_delta0 + SP_S_temp1 - (delta) * SP_S_xi2); \
|
||||
SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * SP_S_qC * SP_S_temp; \
|
||||
sp = -SP_S_y0 - 2.0 * SP_S_qC / (SP_S_pC + sqrt(SP_S_temp)); \
|
||||
SP_S_temp = 2.0 - Gf2 * (SP_S_delta0 + SP_S_temp1 - (delta) * SP_S_xi2); \
|
||||
SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * (SP_S_qC * SP_S_temp); \
|
||||
sp = -SP_S_y0 - 2.0 * (SP_S_qC / (SP_S_pC + sqrt(SP_S_temp))); \
|
||||
end else begin \
|
||||
SP_xg1 = 1.0 / (x1 + Gf * 7.324648775608221e-001); \
|
||||
SP_S_A_fac= (xi * x1 * SP_xg1 - 1.0) * SP_xg1; \
|
||||
|
|
@ -130,10 +130,10 @@ end else begin \
|
|||
SP_S_temp1= exp(-SP_S_eta); \
|
||||
SP_S_temp2= 1.0 / (2.0 + SP_S_eta * SP_S_eta); \
|
||||
SP_S_xi0 = SP_S_eta * SP_S_eta * SP_S_temp2; \
|
||||
SP_S_xi1 = 4.0 * SP_S_eta * SP_S_temp2 * SP_S_temp2; \
|
||||
SP_S_xi1 = 4.0 * (SP_S_eta * SP_S_temp2 * SP_S_temp2); \
|
||||
SP_S_xi2 = (8.0 * SP_S_temp2 - 12.0 * SP_S_xi0) * SP_S_temp2 * SP_S_temp2; \
|
||||
SP_S_a = max(1.0e-40, SP_S_temp * SP_S_temp - Gf2 * (SP_S_temp1 + SP_S_eta - 1.0 - (delta) * (SP_S_eta + 1.0 + SP_S_xi0))); \
|
||||
SP_S_b = 1.0 - 0.5 * Gf2 * (SP_S_temp1 - (delta) * SP_S_xi2); \
|
||||
SP_S_b = 1.0 - 0.5 * (Gf2 * (SP_S_temp1 - (delta) * SP_S_xi2)); \
|
||||
SP_S_c = 2.0 * SP_S_temp + Gf2 * (1.0 - SP_S_temp1 - (delta) * (1.0 + SP_S_xi1)); \
|
||||
SP_S_tau = (xn) - SP_S_eta + ln(SP_S_a / Gf2); \
|
||||
`sigma2(SP_S_a, SP_S_b, SP_S_c, SP_S_tau, SP_S_eta, SP_S_x0) \
|
||||
|
|
@ -152,14 +152,14 @@ end else begin \
|
|||
end \
|
||||
SP_S_temp = 1.0 / (2.0 + SP_S_x0 * SP_S_x0); \
|
||||
SP_S_xi0 = SP_S_x0 * SP_S_x0 * SP_S_temp; \
|
||||
SP_S_xi1 = 4.0 * SP_S_x0 * SP_S_temp * SP_S_temp; \
|
||||
SP_S_xi1 = 4.0 * (SP_S_x0 * SP_S_temp * SP_S_temp); \
|
||||
SP_S_xi2 = (8.0 * SP_S_temp - 12.0 * SP_S_xi0) * SP_S_temp * SP_S_temp; \
|
||||
SP_S_temp = xg - SP_S_x0; \
|
||||
SP_S_pC = 2.0 * SP_S_temp + Gf2 * (1.0 - SP_S_delta1 + SP_S_delta0 - (delta) * (1.0 + SP_S_xi1)); \
|
||||
SP_S_qC = SP_S_temp * SP_S_temp - Gf2 * (SP_S_delta1 + SP_S_x0 - 1.0 + SP_S_delta0 - (delta) * (SP_S_x0 + 1.0 + SP_S_xi0)); \
|
||||
SP_S_temp = 2.0 - Gf2 * (SP_S_delta1 + SP_S_delta0 - (delta) * SP_S_xi2); \
|
||||
SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * SP_S_qC * SP_S_temp; \
|
||||
sp = SP_S_x0 + 2.0 * SP_S_qC / (SP_S_pC + sqrt(SP_S_temp)); \
|
||||
SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * (SP_S_qC * SP_S_temp); \
|
||||
sp = SP_S_x0 + 2.0 * (SP_S_qC / (SP_S_pC + sqrt(SP_S_temp))); \
|
||||
end \
|
||||
end
|
||||
|
||||
|
|
@ -177,10 +177,10 @@ end else begin \
|
|||
SP_S_temp1= exp(-SP_S_eta); \
|
||||
SP_S_temp2= 1.0 / (2.0 + SP_S_eta * SP_S_eta); \
|
||||
SP_S_xi0 = SP_S_eta * SP_S_eta * SP_S_temp2; \
|
||||
SP_S_xi1 = 4.0 * SP_S_eta * SP_S_temp2 * SP_S_temp2; \
|
||||
SP_S_xi1 = 4.0 * (SP_S_eta * SP_S_temp2 * SP_S_temp2); \
|
||||
SP_S_xi2 = (8.0 * SP_S_temp2 - 12.0 * SP_S_xi0) * SP_S_temp2 * SP_S_temp2; \
|
||||
SP_S_a = max(1.0e-40, SP_S_temp * SP_S_temp - Gf2 * (SP_S_temp1 + SP_S_eta - 1.0 - (delta) * (SP_S_eta + 1.0 + SP_S_xi0))); \
|
||||
SP_S_b = 1.0 - 0.5 * Gf2 * (SP_S_temp1 - (delta) * SP_S_xi2); \
|
||||
SP_S_b = 1.0 - 0.5 * (Gf2 * (SP_S_temp1 - (delta) * SP_S_xi2)); \
|
||||
SP_S_c = 2.0 * SP_S_temp + Gf2 * (1.0 - SP_S_temp1 - (delta) * (1.0 + SP_S_xi1)); \
|
||||
SP_S_tau = (xn) - SP_S_eta + ln(SP_S_a / Gf2); \
|
||||
`sigma2(SP_S_a, SP_S_b, SP_S_c, SP_S_tau, SP_S_eta, SP_S_x0) \
|
||||
|
|
@ -199,14 +199,14 @@ end else begin \
|
|||
end \
|
||||
SP_S_temp = 1.0 / (2.0 + SP_S_x0 * SP_S_x0); \
|
||||
SP_S_xi0 = SP_S_x0 * SP_S_x0 * SP_S_temp; \
|
||||
SP_S_xi1 = 4.0 * SP_S_x0 * SP_S_temp * SP_S_temp; \
|
||||
SP_S_xi1 = 4.0 * (SP_S_x0 * SP_S_temp * SP_S_temp); \
|
||||
SP_S_xi2 = (8.0 * SP_S_temp-12.0 * SP_S_xi0) * SP_S_temp * SP_S_temp; \
|
||||
SP_S_temp = xg - SP_S_x0; \
|
||||
SP_S_pC = 2.0 * SP_S_temp + Gf2 * (1.0 - SP_S_delta1 + SP_S_delta0 - (delta) * (1.0 + SP_S_xi1)); \
|
||||
SP_S_qC = SP_S_temp * SP_S_temp - Gf2 * (SP_S_delta1 + SP_S_x0 - 1.0 + SP_S_delta0 - (delta) * (SP_S_x0 + 1.0 + SP_S_xi0)); \
|
||||
SP_S_temp = 2.0 - Gf2*(SP_S_delta1+SP_S_delta0-(delta)*SP_S_xi2); \
|
||||
SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * SP_S_qC * SP_S_temp; \
|
||||
sp = SP_S_x0 + 2.0 * SP_S_qC / (SP_S_pC + sqrt(SP_S_temp));\
|
||||
SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * (SP_S_qC * SP_S_temp); \
|
||||
sp = SP_S_x0 + 2.0 * (SP_S_qC / (SP_S_pC + sqrt(SP_S_temp)));\
|
||||
end
|
||||
|
||||
//
|
||||
|
|
@ -229,8 +229,8 @@ end else begin \
|
|||
SP_OV_p = 2.0 * SP_OV_temp + GOV2 * (SP_OV_D0 - 1.0); \
|
||||
SP_OV_q = SP_OV_temp * SP_OV_temp + GOV2 * (SP_OV_y0 + 1.0 - SP_OV_D0); \
|
||||
SP_OV_xi = 1.0 - GOV2 * 0.5 * SP_OV_D0; \
|
||||
SP_OV_temp = SP_OV_p * SP_OV_p - 4.0 * SP_OV_xi * SP_OV_q; \
|
||||
SP_OV_w = 2.0 * SP_OV_q / (SP_OV_p + sqrt(SP_OV_temp)); \
|
||||
SP_OV_temp = SP_OV_p * SP_OV_p - 4.0 * (SP_OV_xi * SP_OV_q); \
|
||||
SP_OV_w = 2.0 * (SP_OV_q / (SP_OV_p + sqrt(SP_OV_temp))); \
|
||||
sp = -(SP_OV_y0 + SP_OV_w); \
|
||||
end else begin \
|
||||
SP_OV_Afac = (xi_ov * x1 * inv_xg1 - 1.0) * inv_xg1; \
|
||||
|
|
@ -242,8 +242,8 @@ end else begin \
|
|||
SP_OV_p = 2.0 * (xg - SP_OV_x0) + GOV2 * (1 - SP_OV_D0); \
|
||||
SP_OV_q = (xg - SP_OV_x0) * (xg - SP_OV_x0) - GOV2 * (SP_OV_x0 - 1.0 + SP_OV_D0); \
|
||||
SP_OV_xi = 1.0 - GOV2 * 0.5 * SP_OV_D0; \
|
||||
SP_OV_temp = SP_OV_p * SP_OV_p - 4.0 * SP_OV_xi * SP_OV_q; \
|
||||
SP_OV_u = 2.0 * SP_OV_q / (SP_OV_p + sqrt(SP_OV_temp)); \
|
||||
SP_OV_temp = SP_OV_p * SP_OV_p - 4.0 * (SP_OV_xi * SP_OV_q); \
|
||||
SP_OV_u = 2.0 * (SP_OV_q / (SP_OV_p + sqrt(SP_OV_temp))); \
|
||||
sp = SP_OV_x0 + SP_OV_u; \
|
||||
end \
|
||||
sp = -sp; \
|
||||
|
|
|
|||
|
|
@ -6,10 +6,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
@ -540,7 +540,7 @@
|
|||
real Dnsub;
|
||||
real Igidl, Igisl, Vtovd, Vtovs;
|
||||
real x_s, sqm, alpha, alpha1, eta_p, phi_inf, za, xitsb, rhob;
|
||||
real thesat1, wsat, ysat, zsat, r1, r2, dL, GdL, dL1, FdL, GR, Gmob, Gmob_dL, Gvsat, QCLM;
|
||||
real thesat1, wsat, ysat, zsat, r1, r2, dL, GdL, dL1, FdL, GR, Gmob, Gmob_dL, Gvsat, Gvsatinv, QCLM;
|
||||
real xgm, Voxm, dps, qim, qim1, qim1_1, xgs_ov, xgd_ov, sigVds;
|
||||
real Ux, xg;
|
||||
real mu, nu, xn_s, delta_ns;
|
||||
|
|
@ -1312,6 +1312,7 @@
|
|||
QCLM = 0.0;
|
||||
thesat1 = 0.0;
|
||||
Gvsat = 1.0;
|
||||
Gvsatinv = 1.0;
|
||||
xgm = 0.0;
|
||||
dps = 0.0;
|
||||
qim = 0.0;
|
||||
|
|
@ -1373,7 +1374,7 @@
|
|||
Vgb1 = Vgbstar - VFB_i;
|
||||
Vdsx = sqrt(Vds * Vds + 0.01) - 0.1;
|
||||
Vsbx = Vsbstar + 0.5 * (Vds - Vdsx);
|
||||
delVg = CF_i * Vdsx * (1 + CFB_i * Vsbx); // DIBL
|
||||
delVg = CF_i * (Vdsx * (1 + CFB_i * Vsbx)); // DIBL
|
||||
Vgb1 = Vgb1 + delVg;
|
||||
xg = Vgb1 * inv_phit1;
|
||||
|
||||
|
|
@ -1417,32 +1418,30 @@
|
|||
delta_1s = 0.0;
|
||||
temp = 1.0 / (2.0 + x_s * x_s);
|
||||
xi0s = x_s * x_s * temp;
|
||||
xi1s = 4.0 * x_s * temp * temp;
|
||||
xi1s = 4.0 * (x_s * temp * temp);
|
||||
xi2s = (8.0 * temp - 12.0 * xi0s) * temp * temp;
|
||||
if (x_s < `se05) begin
|
||||
delta_1s = exp(x_s);
|
||||
Es = 1.0 / delta_1s;
|
||||
delta_1s = delta_ns * delta_1s;
|
||||
Ds = delta_ns * (1.0 / Es - x_s - 1.0 - xi0s);
|
||||
end else if (x_s > (xn_s - `se05)) begin
|
||||
delta_1s = exp(x_s - xn_s);
|
||||
Es = delta_ns / delta_1s;
|
||||
Ds = delta_1s - delta_ns * (x_s + 1.0 + xi0s);
|
||||
end else begin
|
||||
delta_1s = `ke05 / `P3(xn_s - x_s - `se05);
|
||||
Es = `ke05 / `P3(x_s - `se05);
|
||||
Ds = delta_1s - delta_ns * (x_s + 1.0 + xi0s);
|
||||
end
|
||||
Ds = delta_1s - delta_ns * (x_s + 1.0 + xi0s);
|
||||
if (x_s < 1.0e-5) begin
|
||||
Ps = 0.5 * x_s * x_s * (1.0 - `oneThird * x_s * (1.0 - 0.25 * x_s));
|
||||
Ds = `oneSixth * delta_ns * x_s * x_s * x_s * (1.0 + 1.75 * x_s);
|
||||
temp = sqrt(1.0 - `oneThird * x_s * (1.0 - 0.25 * x_s));
|
||||
sqm = `invSqrt2 * x_s * temp;
|
||||
alpha = 1.0 + Gf * `invSqrt2 * (1.0 - 0.5 * x_s + `oneSixth * x_s * x_s) / temp;
|
||||
Ps = 0.5 * (x_s * x_s * (1.0 - `oneThird * (x_s * (1.0 - 0.25 * x_s))));
|
||||
Ds = `oneSixth * (delta_ns * x_s * x_s * x_s * (1.0 + 1.75 * x_s));
|
||||
temp = sqrt(1.0 - `oneThird * (x_s * (1.0 - 0.25 * x_s)));
|
||||
sqm = `invSqrt2 * (x_s * temp);
|
||||
alpha = 1.0 + Gf * `invSqrt2 * (1.0 - 0.5 * x_s + `oneSixth * (x_s * x_s)) / temp;
|
||||
end else begin
|
||||
Ps = x_s - 1.0 + Es;
|
||||
sqm = sqrt(Ps);
|
||||
alpha = 1.0 + 0.5 * Gf * (1.0 - Es) / sqm;
|
||||
alpha = 1.0 + 0.5 * (Gf * (1.0 - Es) / sqm);
|
||||
end
|
||||
Em = Es;
|
||||
Ed = Em;
|
||||
|
|
@ -1465,9 +1464,9 @@
|
|||
end else begin
|
||||
temp = 1.0 / (1.0 + RSG_i * qis);
|
||||
end
|
||||
GR = THER_i * rhob * temp * qis;
|
||||
GR = THER_i * (rhob * temp * qis);
|
||||
Eeffm = E_eff0 * (qbs + eta_mu * qis);
|
||||
Mutmp = pow(Eeffm * MUE_i, THEMU_i) + CS_i * Ps / (Ps + Ds + 1.0e-14);
|
||||
Mutmp = pow(Eeffm * MUE_i, THEMU_i) + CS_i * (Ps / (Ps + Ds + 1.0e-14));
|
||||
Gmob = (1.0 + Mutmp + GR) * Rxcor;
|
||||
if (THESATB_i < 0) begin
|
||||
xitsb = 1.0 / (1.0 - THESATB_i * Vsbx);
|
||||
|
|
@ -1475,13 +1474,13 @@
|
|||
xitsb = 1.0 + THESATB_i * Vsbx;
|
||||
end
|
||||
temp2 = qis * xitsb;
|
||||
wsat = 100.0 * temp2 / (100.0 + temp2);
|
||||
wsat = 100.0 * (temp2 / (100.0 + temp2));
|
||||
if (THESATG_i < 0) begin
|
||||
temp = 1 / (1 - THESATG_i * wsat);
|
||||
end else begin
|
||||
temp = 1 + THESATG_i * wsat;
|
||||
end
|
||||
thesat1 = THESAT_i * temp / Gmob;
|
||||
thesat1 = THESAT_i * (temp / Gmob);
|
||||
phi_inf = qis / alpha + phit1;
|
||||
ysat = thesat1 * phi_inf * `invSqrt2;
|
||||
if (CHNL_TYPE==`PMOS) begin
|
||||
|
|
@ -1489,11 +1488,11 @@
|
|||
end
|
||||
za = 2.0 / (1.0 + sqrt(1.0 + 4.0 * ysat));
|
||||
temp1 = za * ysat;
|
||||
Phi_0 = phi_inf * za * (1.0 + 0.86 * temp1 * (1.0 - temp1 * za) / (1.0 + 4.0 * temp1 * temp1 * za));
|
||||
Phi_0 = phi_inf * za * (1.0 + 0.86 * (temp1 * (1.0 - temp1 * za) / (1.0 + 4.0 * (temp1 * temp1 * za))));
|
||||
asat = xgs + 0.5 * Gf2;
|
||||
Phi_2 = Gf2 * Ds * phit1 * 0.98 / (asat + sqrt(asat * asat - Gf2 * Ds * 0.98));
|
||||
Phi_2 = 0.98 * (Gf2 * Ds * phit1 / (asat + sqrt(asat * asat - Gf2 * Ds * 0.98)));
|
||||
Phi_0_2 = Phi_0 + Phi_2;
|
||||
Phi0_Phi2 = 2.0 * Phi_0 * Phi_2;
|
||||
Phi0_Phi2 = 2.0 * (Phi_0 * Phi_2);
|
||||
Phi_sat = Phi0_Phi2 / (Phi_0_2 + sqrt(Phi_0_2 * Phi_0_2 - 1.98 * Phi0_Phi2));
|
||||
Vdsat = Phi_sat - phit1 * ln(1.0 + Phi_sat * (Phi_sat - 2.0 * asat * phit1) * inv_Gf2 / (phit1 * phit1 * Ds));
|
||||
end else begin
|
||||
|
|
@ -1522,8 +1521,8 @@
|
|||
pC = 2.0 * (xg - x_s) + Gf2 * (1.0 - Es + delta_1s * k_ds - delta_nd * (1.0 + xi1s));
|
||||
qC = Gf2 * (1.0 - k_ds) * Ds;
|
||||
temp = 2.0 - Gf2 * (Es + delta_1s * k_ds - delta_nd * xi2s);
|
||||
temp = pC * pC - 2.0 * temp * qC;
|
||||
x_ds = 2.0 * qC / (pC + sqrt(temp));
|
||||
temp = pC * pC - 2.0 * (temp * qC);
|
||||
x_ds = 2.0 * (qC / (pC + sqrt(temp)));
|
||||
x_d = x_s + x_ds;
|
||||
end
|
||||
dps = x_ds * phit1; // deltaPsi
|
||||
|
|
@ -1556,32 +1555,32 @@
|
|||
Em = sqrt(temp);
|
||||
end
|
||||
D_bar = 0.5 * (Ds + Dd);
|
||||
Dm = D_bar + 0.125 * x_ds * x_ds * (Em - 2.0 * inv_Gf2);
|
||||
Dm = D_bar + 0.125 * (x_ds * x_ds * (Em - 2.0 * inv_Gf2));
|
||||
|
||||
if (x_m < 1.0e-5) begin
|
||||
Pm = 0.5 * x_m * x_m * (1.0 - `oneThird * x_m * (1.0 - 0.25 * x_m));
|
||||
Pm = 0.5 * (x_m * x_m * (1.0 - `oneThird * (x_m * (1.0 - 0.25 * x_m))));
|
||||
xgm = Gf * sqrt(Dm + Pm);
|
||||
|
||||
// 4.2.7 Polysilicon depletion
|
||||
if (kp > 0.0) begin
|
||||
eta_p = 1.0 / sqrt(1.0 + kp * xgm);
|
||||
end // (kp > 0.0)
|
||||
temp = sqrt(1.0 - `oneThird * x_m * (1.0 - 0.25 * x_m));
|
||||
sqm = `invSqrt2 * x_m * temp;
|
||||
alpha = eta_p + Gf * `invSqrt2 * (1.0 - 0.5 * x_m + `oneSixth * x_m * x_m) / temp;
|
||||
temp = sqrt(1.0 - `oneThird * (x_m * (1.0 - 0.25 * x_m)));
|
||||
sqm = `invSqrt2 * (x_m * temp);
|
||||
alpha = eta_p + `invSqrt2 * (Gf * (1.0 - 0.5 * x_m + `oneSixth * (x_m * x_m)) / temp);
|
||||
end else begin
|
||||
Pm = x_m - 1.0 + Em;
|
||||
xgm = Gf * sqrt(Dm + Pm);
|
||||
|
||||
// 4.2.7 Polysilicon depletion
|
||||
if (kp > 0.0) begin
|
||||
d0 = 1.0 - Em + 2.0 * xgm * inv_Gf2;
|
||||
d0 = 1.0 - Em + 2.0 * (xgm * inv_Gf2);
|
||||
eta_p = 1.0 / sqrt(1.0 + kp * xgm);
|
||||
temp = eta_p / (eta_p + 1.0);
|
||||
x_pm = kp * temp * temp * Gf2 * Dm;
|
||||
x_pm = kp * (temp * temp * Gf2 * Dm);
|
||||
p_pd = 2.0 * (xgm - x_pm) + Gf2 * (1.0 - Em + Dm);
|
||||
q_pd = x_pm * (x_pm - 2.0 * xgm);
|
||||
xi_pd = 1.0 - 0.5 * Gf2 * (Em + Dm);
|
||||
xi_pd = 1.0 - 0.5 * (Gf2 * (Em + Dm));
|
||||
u_pd = q_pd * p_pd / (p_pd * p_pd - xi_pd * q_pd);
|
||||
x_m = x_m + u_pd;
|
||||
km = exp(u_pd);
|
||||
|
|
@ -1589,16 +1588,16 @@
|
|||
Dm = Dm * km;
|
||||
Pm = x_m - 1.0 + Em;
|
||||
xgm = Gf * sqrt(Dm + Pm);
|
||||
help = 1.0 - Em + 2.0 * xgm * eta_p * inv_Gf2;
|
||||
help = 1.0 - Em + 2.0 * (xgm * eta_p * inv_Gf2);
|
||||
x_ds = x_ds * km * (d0 + D_bar) / (help + km * D_bar);
|
||||
dps = x_ds * phit1;
|
||||
end // (kp > 0.0)
|
||||
sqm = sqrt(Pm);
|
||||
alpha = eta_p + 0.5 * Gf * (1.0 - Em) / sqm;
|
||||
alpha = eta_p + 0.5 * (Gf * (1.0 - Em) / sqm);
|
||||
end
|
||||
|
||||
// 4.2.8 Potential midpoint inversion charge
|
||||
qim = Gf2 * Dm * phit1 / (xgm + Gf * sqm);
|
||||
qim = phit1 * (Gf2 * Dm / (xgm + Gf * sqm));
|
||||
|
||||
// 4.2.8 Potential midpoint inversion charge (continued)
|
||||
qim1 = qim + phit1 * alpha;
|
||||
|
|
@ -1610,54 +1609,55 @@
|
|||
end else begin
|
||||
temp = 1.0 / (1.0 + RSG_i * qim);
|
||||
end
|
||||
GR = THER_i * rhob * temp * qim;
|
||||
GR = THER_i * (rhob * temp * qim);
|
||||
// Mobility reduction
|
||||
qeff = qbm + eta_mu * qim;
|
||||
Eeffm = E_eff0 * qeff;
|
||||
Mutmp = pow(Eeffm * MUE_i, THEMU_i) + CS_i * Pm / (Pm + Dm + 1.0e-14);
|
||||
Mutmp = pow(Eeffm * MUE_i, THEMU_i) + CS_i * (Pm / (Pm + Dm + 1.0e-14));
|
||||
Gmob = (1.0 + Mutmp + GR) * Rxcor;
|
||||
|
||||
// 4.2.9 Drain-source channel current
|
||||
// Channel length modulation
|
||||
r1 = qim * qim1_1;
|
||||
r2 = phit1 * alpha * qim1_1;
|
||||
r2 = phit1 * (alpha * qim1_1);
|
||||
temp = ln((1.0 + (Vds - dps) * inv_VP) / (1.0 + (Vdse - dps) * inv_VP));
|
||||
temp1 = ln(1.0 + Vdsx * inv_VP);
|
||||
dL = ALP_i * temp;
|
||||
GdL = 1.0 / (1.0 + dL + dL * dL);
|
||||
dL1 = dL + ALP1_i * qim1_1 * r1 * temp + ALP2_i * qbm * r2 * r2 * temp1;
|
||||
dL1 = dL + ALP1_i * (qim1_1 * r1 * temp) + ALP2_i * (qbm * r2 * r2 * temp1);
|
||||
FdL = (1.0 + dL1 + dL1 * dL1) * GdL;
|
||||
// Velocity saturation
|
||||
temp2 = qim * xitsb;
|
||||
wsat = 100.0 * temp2 / (100.0 + temp2);
|
||||
wsat = 100.0 * (temp2 / (100.0 + temp2));
|
||||
Gmob_dL = Gmob * GdL;
|
||||
if (THESATG_i < 0) begin
|
||||
temp = 1 / (1 - THESATG_i * wsat);
|
||||
end else begin
|
||||
temp = 1 + THESATG_i * wsat;
|
||||
end
|
||||
thesat1 = THESAT_i * temp / Gmob_dL;
|
||||
thesat1 = THESAT_i * (temp / Gmob_dL);
|
||||
zsat = thesat1 * thesat1 * dps * dps;
|
||||
if (CHNL_TYPE == `PMOS) begin
|
||||
zsat = zsat / (1.0 + thesat1 * dps);
|
||||
end
|
||||
Gvsat = 0.5 * Gmob_dL * (1.0 + sqrt(1.0 + 2.0 * zsat));
|
||||
Gvsat = 0.5 * (Gmob_dL * (1.0 + sqrt(1.0 + 2.0 * zsat)));
|
||||
Gvsatinv = 1.0 / Gvsat;
|
||||
// Drain-source current
|
||||
Ids = BET_i * FdL * qim1 * dps / Gvsat;
|
||||
Ids = BET_i * (FdL * qim1 * dps * Gvsatinv);
|
||||
|
||||
// 4.2.10 Variables for calculation of intrinsic charges and gate current
|
||||
Voxm = xgm * phit1;
|
||||
temp = Gmob_dL / Gvsat;
|
||||
alpha1 = alpha * (1.0 + 0.5 * zsat * temp * temp);
|
||||
temp = Gmob_dL * Gvsatinv;
|
||||
alpha1 = alpha * (1.0 + 0.5 * (zsat * temp * temp));
|
||||
H = temp * qim1 / alpha1;
|
||||
|
||||
// 4.2.11 Impact-Ionization
|
||||
if (SWIMPACT != 0) begin
|
||||
delVsat = Vds - A3_i * dps;
|
||||
if (delVsat > 0) begin
|
||||
temp2 = A2_i * (1.0 + A4_i * (sqrt(phib + Vsbstar) - sqrt_phib)) / delVsat;
|
||||
temp2 = A2_i * ((1.0 + A4_i * (sqrt(phib + Vsbstar) - sqrt_phib)) / delVsat);
|
||||
`expl_low(-temp2, temp)
|
||||
mavl = A1_i * delVsat * temp;
|
||||
mavl = A1_i * (delVsat * temp);
|
||||
Iimpact = Ids * mavl;
|
||||
end
|
||||
end
|
||||
|
|
@ -1701,7 +1701,7 @@
|
|||
end else begin
|
||||
`expl_low(temp, TP)
|
||||
end
|
||||
Igsov = IGOV_i * TP * ln((1.0 + Dsi) / (1.0 + Dgate));
|
||||
Igsov = IGOV_i * (TP * ln((1.0 + Dsi) / (1.0 + Dgate)));
|
||||
|
||||
// Gate-drain overlap component of gate current
|
||||
arg2mina = Vovd + Dov;
|
||||
|
|
@ -1721,7 +1721,7 @@
|
|||
end else begin
|
||||
`expl_low(temp, TP)
|
||||
end
|
||||
Igdov = IGOV_i * TP * ln((1.0 + Dsi) / (1.0 + Dgate));
|
||||
Igdov = IGOV_i * (TP * ln((1.0 + Dsi) / (1.0 + Dgate)));
|
||||
end
|
||||
|
||||
// Gate-channel component of gate current
|
||||
|
|
@ -1750,7 +1750,7 @@
|
|||
end else begin
|
||||
`expl_low(temp, TP)
|
||||
end
|
||||
Igc0 = IGINV_i * TP * ln((1.0 + Dsi) / (1.0 + Dgate));
|
||||
Igc0 = IGINV_i * (TP * ln((1.0 + Dsi) / (1.0 + Dgate)));
|
||||
|
||||
// Source/drain partitioning of gate-channel current
|
||||
if ((xg <= 0) || ((GC2_i == 0) && (GC3_i == 0))) begin
|
||||
|
|
@ -1759,14 +1759,14 @@
|
|||
end else begin
|
||||
temp = GC2_i + 2.0 * GC3_i * zg;
|
||||
u0 = CHIB_i / (temp * BCH);
|
||||
x = 0.5 * dps / u0;
|
||||
x = 0.5 * (dps / u0);
|
||||
u0_div_H = u0 / H;
|
||||
Bg = u0_div_H * (1.0 - u0_div_H) * 0.5;
|
||||
Ag = 0.5 - 3.0 * Bg;
|
||||
if (x < 1.0e-3) begin
|
||||
xsq = x * x;
|
||||
igc = 1.0 + xsq * (`oneSixth + u0_div_H * `oneThird + xsq * `oneSixth * (0.05 + 0.2 * u0_div_H));
|
||||
igcd_h = 0.5 * igc - `oneSixth * x * (1.0 + xsq * (0.4 * (Bg + 0.25) + 0.0285714285714 * xsq * (0.125 + Bg)));
|
||||
igc = 1.0 + xsq * (`oneSixth + u0_div_H * `oneThird + `oneSixth * (xsq * (0.05 + 0.2 * u0_div_H)));
|
||||
igcd_h = 0.5 * igc - `oneSixth * (x * (1.0 + xsq * (0.4 * (Bg + 0.25) + 0.0285714285714 * (xsq * (0.125 + Bg)))));
|
||||
end else begin
|
||||
inv_x = 1.0 / x;
|
||||
`expl(x, ex)
|
||||
|
|
@ -1794,18 +1794,18 @@
|
|||
|
||||
// GIDL current computation
|
||||
if (Vovd < 0) begin
|
||||
Vtovd = sqrt(Vovd * Vovd + CGIDL_i * CGIDL_i * Vdb * Vdb + 1.0e-6);
|
||||
Vtovd = sqrt(Vovd * Vovd + CGIDL_i * CGIDL_i * (Vdb * Vdb) + 1.0e-6);
|
||||
temp = -BGIDL_i / Vtovd;
|
||||
`expl_low(temp, temp2)
|
||||
Igidl = -AGIDL_i * Vdb * Vovd * Vtovd * temp2;
|
||||
Igidl = -AGIDL_i * (Vdb * Vovd * Vtovd * temp2);
|
||||
end
|
||||
|
||||
// GISL current computation
|
||||
if (Vovs < 0) begin
|
||||
Vtovs = sqrt(Vovs * Vovs + CGIDL_i * CGIDL_i * Vsb * Vsb + 1.0e-6);
|
||||
Vtovs = sqrt(Vovs * Vovs + CGIDL_i * CGIDL_i * (Vsb * Vsb) + 1.0e-6);
|
||||
temp = -BGIDL_i / Vtovs;
|
||||
`expl_low(temp, temp2)
|
||||
Igisl = -AGIDL_i * Vsb * Vovs * Vtovs * temp2;
|
||||
Igisl = -AGIDL_i * (Vsb * Vovs * Vtovs * temp2);
|
||||
end
|
||||
end // (SWGIDL != 0)
|
||||
|
||||
|
|
@ -1833,13 +1833,13 @@
|
|||
QD = 0.0;
|
||||
QB = QG;
|
||||
end else begin
|
||||
Fj = 0.5 * dps / H;
|
||||
Fj = 0.5 * (dps / H);
|
||||
Fj2 = Fj * Fj;
|
||||
QCLM = (1.0 - GdL) * (qim - alpha * 0.5 * dps);
|
||||
QG = Voxm + 0.5 * eta_p * dps * (Fj * GdL * `oneThird - 1.0 + GdL);
|
||||
QCLM = (1.0 - GdL) * (qim - 0.5 * (alpha * dps));
|
||||
QG = Voxm + 0.5 * (eta_p * dps * (Fj * GdL * `oneThird - 1.0 + GdL));
|
||||
temp = alpha * dps * `oneSixth;
|
||||
QI = GdL * (qim + temp * Fj) + QCLM;
|
||||
QD = 0.5 * GdL * GdL * (qim - temp * (1.0 - Fj - 0.2 * Fj2)) + 0.5 * QCLM * (1.0 + GdL);
|
||||
QD = 0.5 * (GdL * GdL * (qim - temp * (1.0 - Fj - 0.2 * Fj2)) + QCLM * (1.0 + GdL));
|
||||
QB = QG - QI;
|
||||
end
|
||||
Qg = QG * COX_qm;
|
||||
|
|
@ -1867,7 +1867,7 @@
|
|||
pd = 1.0;
|
||||
Gp = Gf;
|
||||
end else begin
|
||||
ym = 0.5 * ( 1.0 + 0.25 * dps / H);
|
||||
ym = 0.5 * ( 1.0 + 0.25 * (dps / H));
|
||||
pd = xgm / (xg - x_m);
|
||||
Gp = Gf / pd;
|
||||
end
|
||||
|
|
@ -2015,14 +2015,14 @@
|
|||
Qfgs = temp;
|
||||
end
|
||||
|
||||
I(`Gint, S) <+ CHNL_TYPE * ddt(Qg);
|
||||
I(`Bint, S) <+ CHNL_TYPE * ddt(Qb);
|
||||
I(D, S) <+ CHNL_TYPE * ddt(Qd);
|
||||
I(`Gint, S) <+ CHNL_TYPE * ddt(Qfgs);
|
||||
I(`Gint, D) <+ CHNL_TYPE * ddt(Qfgd);
|
||||
I(`Gint, `Bint) <+ CHNL_TYPE * ddt(Qgb_ov);
|
||||
I(`Bjs, S) <+ CHNL_TYPE * ddt(qsjun);
|
||||
I(`Bjd, D) <+ CHNL_TYPE * ddt(qdjun);
|
||||
I(`Gint, S) <+ ddt(CHNL_TYPE * Qg);
|
||||
I(`Bint, S) <+ ddt(CHNL_TYPE * Qb);
|
||||
I(D, S) <+ ddt(CHNL_TYPE * Qd);
|
||||
I(`Gint, S) <+ ddt(CHNL_TYPE * Qfgs);
|
||||
I(`Gint, D) <+ ddt(CHNL_TYPE * Qfgd);
|
||||
I(`Gint, `Bint) <+ ddt(CHNL_TYPE * Qgb_ov);
|
||||
I(`Bjs, S) <+ ddt(CHNL_TYPE * qsjun);
|
||||
I(`Bjd, D) <+ ddt(CHNL_TYPE * qdjun);
|
||||
|
||||
end // loadDynamic
|
||||
|
||||
|
|
@ -2047,27 +2047,27 @@
|
|||
if ((xg > 0.0) && (MULT_i > 0) && (BET_i > 0)) begin
|
||||
N1 = Cox_over_q * alpha * phit;
|
||||
Nm1 = Cox_over_q * qim1;
|
||||
Delta_N1 = Cox_over_q * alpha * dps;
|
||||
Sfl = (NFA_i - NFB_i * N1 + NFC_i * N1 * N1) * ln((Nm1 + 0.5 * Delta_N1) / (Nm1 - 0.5 * Delta_N1));
|
||||
Delta_N1 = Cox_over_q * (alpha * dps);
|
||||
Sfl = (NFA_i - NFB_i * N1 + NFC_i * (N1 * N1)) * ln((Nm1 + 0.5 * Delta_N1) / (Nm1 - 0.5 * Delta_N1));
|
||||
Sfl = Sfl + (NFB_i + NFC_i * (Nm1 - 2.0 * N1)) * Delta_N1;
|
||||
Sfl = Sfl_prefac * Ids / (Gvsat * N1) * Sfl;
|
||||
Sfl = Sfl_prefac * Ids * Gvsatinv * Sfl / N1;
|
||||
|
||||
H0 = qim1 / alpha;
|
||||
t1 = qim / qim1;
|
||||
sqt2 = 0.5 * `oneSixth * dps / H0;
|
||||
sqt2 = 0.5 * `oneSixth * (dps / H0);
|
||||
t2 = sqt2 * sqt2;
|
||||
r = H0 / H - 1.0;
|
||||
lc = `CLIP_LOW(1.0 - 12 * r * t2, 1e-20);
|
||||
lc = `CLIP_LOW(1.0 - 12 * (r * t2), 1e-20);
|
||||
lcinv2 = 1 / (lc * lc);
|
||||
g_ideal = BET_i * FdL * qim1 / Gvsat;
|
||||
g_ideal = BET_i * (FdL * qim1 * Gvsatinv);
|
||||
CGeff = Gvsat * Gvsat * COX_qm * eta_p / (Gmob_dL * Gmob_dL);
|
||||
mid = t1 + 12 * t2 - 24 * (1.0 + t1) * t2 * r;
|
||||
mid = t1 + 12 * t2 - 24 * ((1.0 + t1) * t2 * r);
|
||||
mid = `CLIP_LOW(mid, 1e-40);
|
||||
mid = g_ideal * lcinv2 * mid;
|
||||
mig = t1 / 12 - t2 * (t1 + 0.2 - 12 * t2) - 1.6 * t2 * (t1 + 1.0 - 12 * t2) * r;
|
||||
mig = t1 / 12 - t2 * (t1 + 0.2 - 12 * t2) - 1.6 * (t2 * (t1 + 1.0 - 12 * t2) * r);
|
||||
mig = `CLIP_LOW(mig, 1e-40);
|
||||
mig = lcinv2 / g_ideal * mig;
|
||||
migid = lcinv2 * sqt2 * (1.0 - 12 * t2 - (t1 + 19.2 * t2 - 12 * t1 * t2) * r);
|
||||
migid = lcinv2 * sqt2 * (1.0 - 12 * t2 - (t1 + 19.2 * t2 - 12 * (t1 * t2)) * r);
|
||||
sqid = sqrt(MULT_i * nt * mid);
|
||||
sqig = sqrt(MULT_i * nt / mig);
|
||||
c_igid = (sqid == 0) ? 0.0 : (migid * sqig / sqid); // = migid / sqrt(mig * mid);
|
||||
|
|
@ -2075,7 +2075,7 @@
|
|||
end
|
||||
shot_igsx = 2.0 * `QELE * abs(Igse);
|
||||
shot_igdx = 2.0 * `QELE * abs(Igde);
|
||||
shot_iavl = 2.0 * `QELE * (mavl + 1) * abs(Iimpacte);
|
||||
shot_iavl = 2.0 * `QELE * ((mavl + 1) * abs(Iimpacte));
|
||||
// JUNCAP2
|
||||
sjnoisex = 2.0 * `QELE * abs(isjun);
|
||||
djnoisex = 2.0 * `QELE * abs(idjun);
|
||||
|
|
@ -2114,8 +2114,8 @@
|
|||
I(D,S) <+ flicker_noise(MULT_i * Sfl, 1.0);
|
||||
I(D,S) <+ white_noise(sqid * sqid * (1.0 - c_igid));
|
||||
I(D,S) <+ sqid * V(NOI2);
|
||||
I(`Gint,S)<+ 0.5 * (1.0 + sigVds) * ddt(mig * CGeff * V(NOIC));
|
||||
I(`Gint,D)<+ 0.5 * (1.0 - sigVds) * ddt(mig * CGeff * V(NOIC));
|
||||
I(`Gint,S)<+ ddt(0.5 * ((1.0 + sigVds) * mig * CGeff * V(NOIC)));
|
||||
I(`Gint,D)<+ ddt(0.5 * ((1.0 - sigVds) * mig * CGeff * V(NOIC)));
|
||||
I(`Gint,S)<+ white_noise(shot_igs);
|
||||
I(`Gint,D)<+ white_noise(shot_igd);
|
||||
// JUNCAP2
|
||||
|
|
@ -2154,7 +2154,7 @@
|
|||
ig = Igse + Igde + Igbe;
|
||||
ib = -Iimpacte - Igbe - Igidle - Igisle;
|
||||
|
||||
P_D = 1 + 0.25 * Gf * kp;
|
||||
P_D = 1 + 0.25 * (Gf * kp);
|
||||
facvsb0 = phib + 2 * phit1;
|
||||
facvsb = Vsbstar + facvsb0;
|
||||
sig1k = 2 * `PI * 1000 * CGeff;
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
@ -43,7 +43,7 @@
|
|||
`define from(lower,upper)
|
||||
// `define from(lower,upper) from[lower:upper]
|
||||
|
||||
// Some functions
|
||||
// Some functions
|
||||
`define MAX(x,y) ((x)>(y)?(x):(y))
|
||||
`define MIN(x,y) ((x)<(y)?(x):(y))
|
||||
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
|
||||
|
||||
// P3 3rd order polynomial expansion of exp()
|
||||
`define P3(u) (1.0 + (u) * (1.0 + 0.5 * (u) * (1.0 + (u) * `oneThird)))
|
||||
`define P3(u) (1.0 + (u) * (1.0 + 0.5 * ((u) * (1.0 + (u) * `oneThird))))
|
||||
|
||||
|
||||
// expl exp() with 3rd order polynomial extrapolation
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
//
|
||||
//
|
||||
// Version: 102.1, October 2006 (Simkit 2.4)
|
||||
// Version: 102.1, April 2007 (Simkit 2.5)
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
|
|
|
|||
|
|
@ -6,10 +6,10 @@
|
|||
---------------------------
|
||||
|
||||
|
||||
(c) Copyright 2006, All Rights Reserved, NXP Semiconductors
|
||||
(c) Copyright 2007, All Rights Reserved, NXP Semiconductors
|
||||
|
||||
|
||||
Version: PSP 102.1 (including JUNCAP2 200.2), October 2006 (Simkit 2.4)
|
||||
Version: PSP 102.1 (including JUNCAP2 200.2), April 2007 (Simkit 2.5)
|
||||
|
||||
======================================================================================
|
||||
======================================================================================
|
||||
|
|
@ -72,40 +72,42 @@ the JUNCAP2-model.
|
|||
======================================================================================
|
||||
======================================================================================
|
||||
|
||||
Release notes va-code of PSP 102.1, including JUNCAP2 200.2 (October 2006)
|
||||
--------------------------------------------------------------------------
|
||||
Release notes va-code of PSP 102.1, including JUNCAP2 200.2 (April 2007)
|
||||
------------------------------------------------------------------------
|
||||
|
||||
PSP 102.1 is backwards compatible with the previous version, PSP 102.0, and
|
||||
resolves some minor implementation issues and bugs. Next to the existing
|
||||
verilog-A implementation, a test version of the NQS model is now available
|
||||
in the SiMKit.
|
||||
Focus in this release has been on improving the simulation speed of PSP and JUNCAP2.
|
||||
The model equations in this release of PSP 102.1 are identical to those in the
|
||||
October 2006 release. This version features some minor impelementation changes
|
||||
w.r.t. the previous release.
|
||||
|
||||
The main changes have been in the SiMKit version generated from this verilog-A
|
||||
implementation: improvements in the automatic C-code generation process
|
||||
and compilation of the C-code. The result is reflected in the SiMKit 2.5 version of
|
||||
PSP, which shows a very significant simulation speed improvement w.r.t SiMKit 2.4.
|
||||
|
||||
The minor implementation changes in the verilog-A code will have some positive effect
|
||||
on the simulation speed of the verilog-A version as well. Note, however, that the
|
||||
simulation speed of the verilog-A version of PSP and the improvement w.r.t. the
|
||||
previous version strongly depend on the verilog-A compiler used.
|
||||
|
||||
PSP 102.1 is backwards compatible with the previous version, PSP 102.0.
|
||||
|
||||
- Added clipping boundaries for SWNQS.
|
||||
- Removed several "empty statements".
|
||||
- Resolved SpectreRF hidden state problem
|
||||
- Solved minor bugs in stress model
|
||||
- Solved minor bug in juncap model
|
||||
- Changed the NQS-module names in the verilog-A code
|
||||
- Made some implementation changes for optimization and maintenance purposes
|
||||
* Introduced verilog-macro for nodes G/GP, B/BP, B/BS, and B/BD
|
||||
* Make drain junction voltage equal to V(D, B) instead of V(D, S) + V(S, B)
|
||||
* Extra intermediate variables for parasitic resistor noise densities
|
||||
* Modified implementation of NQS-model
|
||||
|
||||
======================================================================================
|
||||
======================================================================================
|
||||
|
||||
The functionality of the Verilog-A code in this package is the same as that of the
|
||||
C-code, which is contained in SIMKIT version 2.4. Note that Operating Point information
|
||||
C-code, which is contained in SIMKIT version 2.5. Note that Operating Point information
|
||||
is available only in the C-code, not in Verilog-A code.
|
||||
|
||||
|
||||
The PSP-NQS model is provided as Verilog-A code. In SiMKit 2.4, for the first time a
|
||||
test version of the PSP-NQS model is included. This implementation circumvents the
|
||||
of the SpectreVerilog-A-generated C-code being too large to compile. Moreover, it is
|
||||
computationally more efficient as it uses less rows in the simulator matrix. On the
|
||||
other hand, this implementation has some known limitations. More information is
|
||||
available from the authors. Further improvements are expected in future releases.
|
||||
The PSP-NQS model is provided as Verilog-A code. In SiMKit 2.5, a test version of
|
||||
the PSP-NQS model is included (identical to that in SiMKit 2.4). This implementation
|
||||
circumvents the problem of the SpectreVerilog-A-generated C-code being too large to
|
||||
compile. Moreover, it is computationally more efficient as it uses less rows in the
|
||||
simulator matrix. On the other hand, this implementation has some known limitations.
|
||||
More information is available from the authors. Further improvements are expected in
|
||||
future releases.
|
||||
|
||||
|
||||
This Verilog-A code of PSP is primarily intended as a source for C-code generation
|
||||
|
|
@ -114,5 +116,5 @@ using ADMS. Most of the testing has been done on the C-code which was generated
|
|||
|
||||
The authors want to thank Laurent Lemaitre and Colin McAndrew (Freescale)
|
||||
for their help with ADMS and the implementation of the model code. Geoffrey
|
||||
Coram (Analog Devices) is acknowledged for his useful comments on the Verilog-A
|
||||
Coram (Analog Devices) is acknowledged for useful comments on the Verilog-A
|
||||
code.
|
||||
|
|
|
|||
Loading…
Reference in New Issue