new version 102.1

This commit is contained in:
dwarning 2007-07-24 17:26:23 +00:00
parent 1ae1913fd6
commit 2958b19aa4
14 changed files with 184 additions and 182 deletions

View File

@ -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)
//
//======================================================================================
//======================================================================================

View File

@ -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) \

View File

@ -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)
//
//======================================================================================
//======================================================================================

View File

@ -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)
//
//======================================================================================
//======================================================================================

View File

@ -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);

View File

@ -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)
//
//======================================================================================
//======================================================================================

View File

@ -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)
//
//======================================================================================
//======================================================================================

View File

@ -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)
//
//======================================================================================
//======================================================================================

View File

@ -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; \

View File

@ -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;

View File

@ -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)
//
//======================================================================================
//======================================================================================

View File

@ -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

View File

@ -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)
//
//======================================================================================
//======================================================================================

View File

@ -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.