psp102 white spaces and admsXml adaptions

This commit is contained in:
dwarning 2020-12-15 22:49:26 +01:00 committed by Holger Vogt
parent 1a5016cd49
commit fc70256828
8 changed files with 197 additions and 187 deletions

View File

@ -33,7 +33,7 @@
PBOT_i = `CLIP_BOTH(PBOT , `P_cliplow,`P_cliphigh);
PSTI_i = `CLIP_BOTH(PSTI , `P_cliplow,`P_cliphigh);
PGAT_i = `CLIP_BOTH(PGAT , `P_cliplow,`P_cliphigh);
IDSATRBOT_i = `CLIP_LOW( IDSATRBOT , `IDSATR_cliplow);
IDSATRBOT_i = `CLIP_LOW( IDSATRBOT , `IDSATR_cliplow);
IDSATRSTI_i = `CLIP_LOW( IDSATRSTI , `IDSATR_cliplow);
IDSATRGAT_i = `CLIP_LOW( IDSATRGAT , `IDSATR_cliplow);
CSRHBOT_i = `CLIP_LOW( CSRHBOT , `CSRH_cliplow);
@ -84,9 +84,9 @@
ftdgat = (pow(auxt, 1.5)) * exp(0.5 * ((phigrgat * phitrinv) - (phigdgat * phitdinv)));
// temperature-scaled saturation current for ideal-current model
idsatbot = IDSATRBOT_i * ftdbot * ftdbot;
idsatsti = IDSATRSTI_i * ftdsti * ftdsti;
idsatgat = IDSATRGAT_i * ftdgat * ftdgat;
idsatbot = IDSATRBOT_i * ftdbot * ftdbot;
idsatsti = IDSATRSTI_i * ftdsti * ftdsti;
idsatgat = IDSATRGAT_i * ftdgat * ftdgat;
// built-in voltages before limiting
ubibot = VBIRBOT_i * auxt - 2 * phitd * ln(ftdbot);
@ -137,11 +137,11 @@
wdepnulrinvbot = 1 / wdepnulrbot;
wdepnulrinvsti = 1 / wdepnulrsti;
wdepnulrinvgat = 1 / wdepnulrgat;
// inverse values of built-in voltages at reference temperature, needed in SRH and BBT model
VBIRBOTinv = 1 / VBIRBOT_i;
VBIRSTIinv = 1 / VBIRSTI_i;
VBIRGATinv = 1 / VBIRGAT_i;
VBIRBOTinv = 1 / VBIRBOT_i;
VBIRSTIinv = 1 / VBIRSTI_i;
VBIRGATinv = 1 / VBIRGAT_i;
// some constants needed in erfc-approximation, needed in TAT model
perfc = (`SQRTPI * `aerfc);
@ -154,9 +154,9 @@
deltaEgat = max(0.5 * phigdgat, phitd);
// values of atat, needed in TAT model
atatbot = deltaEbot * phitdinv;
atatsti = deltaEsti * phitdinv;
atatgat = deltaEgat * phitdinv;
atatbot = deltaEbot * phitdinv;
atatsti = deltaEsti * phitdinv;
atatgat = deltaEgat * phitdinv;
// values of btatpart, needed in TAT model
btatpartbot = sqrt(32 * MEFFTATBOT_i * `MELE * `QELE * (deltaEbot * deltaEbot * deltaEbot)) / (3 * `HBAR);
@ -177,7 +177,7 @@
VBRinvbot = 1 / VBRBOT_i;
VBRinvsti = 1 / VBRSTI_i;
VBRinvgat = 1 / VBRGAT_i;
// slopes for linear extraploation close to and beyond breakdown, needed in avalanche/breakdown model
slopebot = -(fstopbot * fstopbot * pow(`alphaav, (PBRBOT_i - 1))) * PBRBOT_i * VBRinvbot;
slopesti = -(fstopsti * fstopsti * pow(`alphaav, (PBRSTI_i - 1))) * PBRSTI_i * VBRinvsti;

View File

@ -17,19 +17,19 @@
///////////////////////////////////////////
//
// Macros and constants used in JUNCAP2
// Macros and constants used in JUNCAP2
//
///////////////////////////////////////////
// Other constants
`define MINTEMP -250
`define vbilow 0.050
`define a 2
`define MINTEMP -250
`define vbilow 0.050
`define a 2
`define epsch 0.1
`define dvbi 0.050
`define epsav 1E-6
`define vbrmax 1000
`define alphaav 0.999
`define dvbi 0.050
`define epsav 1E-6
`define vbrmax 1000
`define alphaav 0.999
`define vmaxlarge 1E8
`define aerfc 0.29214664
`define twothirds 0.666666666666667
@ -44,8 +44,8 @@
`define TRJ_cliplow `MINTEMP
`define IMAX_cliplow 1E-12
`define CJORBOT_cliplow 1E-12
`define CJORSTI_cliplow 1E-18
`define CJORGAT_cliplow 1E-18
`define CJORSTI_cliplow 1E-18
`define CJORGAT_cliplow 1E-18
`define VBIR_cliplow `vbilow
`define P_cliplow 0.05
`define P_cliphigh 0.95
@ -140,7 +140,7 @@ end
// Smoothing functions
`define hypfunction2(x,x0,eps,hyp2) \
hyp2 = 0.5 * ((x) + (x0) - sqrt(((x) - (x0)) * ((x) - (x0)) + 4 * (eps) * (eps)));
hyp2 = 0.5 * ((x) + (x0) - sqrt(((x) - (x0)) * ((x) - (x0)) + 4 * (eps) * (eps)));
`define hypfunction5(x,x0,eps,hyp5) \
h1 = 4.0 * (eps) * (eps); \
@ -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,
@ -232,7 +232,7 @@ end else begin \
fbreakdown = fstop + (vav + `alphaav * VBR) * slope; \
end \
end \
Ijprime = (id + isrh + itat + ibbt) * fbreakdown;
Ijprime = (id + isrh + itat + ibbt) * fbreakdown;
// The following code is written as a macro because the naming of the instance parameters is

View File

@ -22,44 +22,44 @@
//////////////////////////////////////////
parameter real IMAX = 1000 `from(`IMAX_cliplow ,inf ) `P(info="Maximum current up to which forward current behaves exponentially" unit="A" );
parameter real CJORBOT = 1E-3 `from(`CJORBOT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-area of bottom component" unit="Fm^-2" );
parameter real CJORSTI = 1E-9 `from(`CJORSTI_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of STI-edge component" unit="Fm^-1" );
parameter real CJORGAT = 1E-9 `from(`CJORGAT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of gate-edge component" unit="Fm^-1" );
parameter real VBIRBOT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of bottom component" unit="V" );
parameter real VBIRSTI = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of STI-edge component" unit="V" );
parameter real VBIRGAT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of gate-edge component" unit="V" );
parameter real PBOT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of bottom component" unit="" );
parameter real PSTI = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of STI-edge component" unit="" );
parameter real PGAT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of gate-edge component" unit="" );
parameter real PHIGBOT = 1.16 `P(info="Zero-temperature bandgap voltage of bottom component" unit="V" );
parameter real PHIGSTI = 1.16 `P(info="Zero-temperature bandgap voltage of STI-edge component" unit="V" );
parameter real PHIGGAT = 1.16 `P(info="Zero-temperature bandgap voltage of gate-edge component" unit="V" );
parameter real IDSATRBOT = 1E-12 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of bottom component" unit="Am^-2" );
parameter real IDSATRSTI = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of STI-edge component" unit="Am^-1" );
parameter real IDSATRGAT = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of gate-edge component" unit="Am^-1" );
parameter real CSRHBOT = 1E2 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of bottom component" unit="Am^-3" );
parameter real CSRHSTI = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of STI-edge component" unit="Am^-2" );
parameter real CSRHGAT = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of gate-edge component" unit="Am^-2" );
parameter real XJUNSTI = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of STI-edge component" unit="m" );
parameter real XJUNGAT = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of gate-edge component" unit="m" );
parameter real CTATBOT = 1E2 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of bottom component" unit="Am^-3" );
parameter real CTATSTI = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of STI-edge component" unit="Am^-2" );
parameter real CTATGAT = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of gate-edge component" unit="Am^-2" );
parameter real MEFFTATBOT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of bottom component" unit="" );
parameter real MEFFTATSTI = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component" unit="" );
parameter real MEFFTATGAT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component" unit="" );
parameter real CBBTBOT = 1E-12 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of bottom component" unit="AV^-3" );
parameter real CBBTSTI = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of STI-edge component" unit="AV^-3m" );
parameter real CBBTGAT = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of gate-edge component" unit="AV^-3m" );
parameter real FBBTRBOT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of bottom component" unit="Vm^-1" );
parameter real FBBTRSTI = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of STI-edge component" unit="Vm^-1" );
parameter real FBBTRGAT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of gate-edge component" unit="Vm^-1" );
parameter real STFBBTBOT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of bottom component" unit="K^-1" );
parameter real STFBBTSTI = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of STI-edge component" unit="K^-1" );
parameter real STFBBTGAT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of gate-edge component" unit="K^-1" );
parameter real VBRBOT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of bottom component" unit="V" );
parameter real VBRSTI = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of STI-edge component" unit="V" );
parameter real VBRGAT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of gate-edge component" unit="V" );
parameter real PBRBOT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of bottom component" unit="V" );
parameter real PBRSTI = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of STI-edge component" unit="V" );
parameter real PBRGAT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of gate-edge component" unit="V" );
parameter real CJORBOT = 1E-3 `from(`CJORBOT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-area of bottom component" unit="Fm^-2" );
parameter real CJORSTI = 1E-9 `from(`CJORSTI_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of STI-edge component" unit="Fm^-1" );
parameter real CJORGAT = 1E-9 `from(`CJORGAT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of gate-edge component" unit="Fm^-1" );
parameter real VBIRBOT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of bottom component" unit="V" );
parameter real VBIRSTI = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of STI-edge component" unit="V" );
parameter real VBIRGAT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of gate-edge component" unit="V" );
parameter real PBOT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of bottom component" unit="" );
parameter real PSTI = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of STI-edge component" unit="" );
parameter real PGAT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of gate-edge component" unit="" );
parameter real PHIGBOT = 1.16 `P(info="Zero-temperature bandgap voltage of bottom component" unit="V" );
parameter real PHIGSTI = 1.16 `P(info="Zero-temperature bandgap voltage of STI-edge component" unit="V" );
parameter real PHIGGAT = 1.16 `P(info="Zero-temperature bandgap voltage of gate-edge component" unit="V" );
parameter real IDSATRBOT = 1E-12 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of bottom component" unit="Am^-2" );
parameter real IDSATRSTI = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of STI-edge component" unit="Am^-1" );
parameter real IDSATRGAT = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of gate-edge component" unit="Am^-1" );
parameter real CSRHBOT = 1E2 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of bottom component" unit="Am^-3" );
parameter real CSRHSTI = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of STI-edge component" unit="Am^-2" );
parameter real CSRHGAT = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of gate-edge component" unit="Am^-2" );
parameter real XJUNSTI = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of STI-edge component" unit="m" );
parameter real XJUNGAT = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of gate-edge component" unit="m" );
parameter real CTATBOT = 1E2 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of bottom component" unit="Am^-3" );
parameter real CTATSTI = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of STI-edge component" unit="Am^-2" );
parameter real CTATGAT = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of gate-edge component" unit="Am^-2" );
parameter real MEFFTATBOT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of bottom component" unit="" );
parameter real MEFFTATSTI = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component" unit="" );
parameter real MEFFTATGAT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component" unit="" );
parameter real CBBTBOT = 1E-12 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of bottom component" unit="AV^-3" );
parameter real CBBTSTI = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of STI-edge component" unit="AV^-3m" );
parameter real CBBTGAT = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of gate-edge component" unit="AV^-3m" );
parameter real FBBTRBOT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of bottom component" unit="Vm^-1" );
parameter real FBBTRSTI = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of STI-edge component" unit="Vm^-1" );
parameter real FBBTRGAT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of gate-edge component" unit="Vm^-1" );
parameter real STFBBTBOT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of bottom component" unit="K^-1" );
parameter real STFBBTSTI = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of STI-edge component" unit="K^-1" );
parameter real STFBBTGAT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of gate-edge component" unit="K^-1" );
parameter real VBRBOT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of bottom component" unit="V" );
parameter real VBRSTI = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of STI-edge component" unit="V" );
parameter real VBRGAT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of gate-edge component" unit="V" );
parameter real PBRBOT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of bottom component" unit="V" );
parameter real PBRSTI = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of STI-edge component" unit="V" );
parameter real PBRGAT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of gate-edge component" unit="V" );

View File

@ -16,13 +16,13 @@
//
// declaration of variables needed in macro "calcerfcexpmtat"
real ysq, terfc, erfcpos;
// declaration of variables needed in hypfunction 5
real h1, h2, h2d, h3, h4, h5;
// declaration of variables used within macro "juncapfunction"
// declaration of variables needed in macro "calcerfcexpmtat"
real ysq, terfc, erfcpos;
// declaration of variables needed in hypfunction 5
real h1, h2, h2d, h3, h4, h5;
// declaration of variables used within macro "juncapfunction"
real tmp, id;
real isrh, vbi_minus_vjsrh, wsrhstep, dwsrh, wsrh, wdep, asrh;
real itat, btat, twoatatoverthreebtat, umaxbeforelimiting, umax, sqrtumax, umaxpoweronepointfive;
@ -44,7 +44,7 @@
real tkr, tkd, auxt, KBOL_over_QELE, phitr, phitrinv, phitd, phitdinv;
real deltaphigr, phigrbot, phigrsti, phigrgat, deltaphigd, phigdbot, phigdsti, phigdgat;
real ftdbot, ftdsti, ftdgat, idsatbot, idsatsti, idsatgat, exp_VMAX_over_phitd;
real ubibot, ubisti, ubigat, vbibot, vbisti, vbigat;
real ubibot, ubisti, ubigat, vbibot, vbisti, vbigat;
real vbibot2, vbisti2, vbigat2, vbibot2r, vbisti2r, vbigat2r;
real vbiinvbot, vbiinvsti, vbiinvgat;
real one_minus_PBOT, one_minus_PSTI, one_minus_PGAT;
@ -61,7 +61,7 @@
real fstopbot, fstopsti, fstopgat, VBRinvbot, VBRinvsti, VBRinvgat;
real slopebot, slopesti, slopegat;
real vmaxbot, vmaxsti, vmaxgat, VMAX;
// declaration of variables calculated outside macro "juncapfunction", voltage-dependent part
real VAK, idmult, vj, z, zinv, two_psistar, vjlim, vjsrh, vbbt, vav;

View File

@ -18,7 +18,7 @@
/////////////////////////////////////////////
//
// Macros and constants used in PSP
// Macros and constants used in PSP
//
/////////////////////////////////////////////
@ -86,7 +86,7 @@ end else begin \
mu = (nu) * (nu) / (tau) + 0.5 * ((c) * (c)) - (a) * (b); \
y = (eta) + (a) * nu / (mu + (nu / mu) * (c) * ((c) * (c) * `oneThird - (a) * (b))); \
end
//
// sp_s surface potential calculation
//

View File

@ -1,5 +1,5 @@
`undef P
`define P(txt) (*txt*)
`define P(txt) (*txt*)
//======================================================================================
//======================================================================================
// Filename: PSP102_module.include
@ -27,7 +27,7 @@
// Extra internal nodes for correlated drain and gate noise
electrical NOI;
electrical NOI2;
// Extra branches for correlated drain and gate noise
branch (NOI) NOII;
branch (NOI) NOIR;
@ -61,7 +61,7 @@
branch(INT7) SPLINE7;
branch(INT8) SPLINE8;
branch(INT9) SPLINE9;
branch(INT1) RES1;
branch(INT2) RES2;
branch(INT3) RES3;
@ -170,7 +170,7 @@
parameter real BGIDL = 41.0 `from( 0.0,inf ) `P(info="GIDL probability factor at TR" unit="V" );
parameter real STBGIDL = 0.0 `P(info="Temperature dependence of BGIDL" unit="V/K" );
parameter real CGIDL = 0.0 `P(info="Back-bias dependence of GIDL" unit="" );
// Charge model parameters
parameter real COX = 1.0e-14 `from( 0.0,inf ) `P(info="Oxide capacitance for intrinsic channel" unit="F" );
parameter real CGOV = 1.0e-15 `from( 0.0,inf ) `P(info="Oxide capacitance for gate-drain/source overlap" unit="F" );
@ -409,12 +409,12 @@
// NQS parameters
parameter real SWNQS = 0.0 `from( 0.0,9.0 ) `P(info="Flag for NQS, 0=off, 1, 2, 3, 5, or 9=number of collocation points" unit="" );
parameter real MUNQSO = 1.0 `P(info="Relative mobility for NQS modelling" );
parameter real RGO = 1.0e-3 `P(info="Gate resistance" );
parameter real RBULKO = 1.0e-3 `P(info="Bulk resistance between node BP and BI" unit="Ohm" );
parameter real RWELLO = 1.0e-3 `P(info="Well resistance between node BI and B" unit="Ohm" );
parameter real RJUNSO = 1.0e-3 `P(info="Source-side bulk resistance between node BI and BS" unit="Ohm" );
parameter real RJUNDO = 1.0e-3 `P(info="Drain-side bulk resistance between node BI and BD" unit="Ohm" );
parameter real MUNQSO = 1.0 `P(info="Relative mobility for NQS modelling" );
parameter real RGO = 1.0e-3 `P(info="Gate resistance" );
parameter real RBULKO = 1.0e-3 `P(info="Bulk resistance between node BP and BI" unit="Ohm" );
parameter real RWELLO = 1.0e-3 `P(info="Well resistance between node BI and B" unit="Ohm" );
parameter real RJUNSO = 1.0e-3 `P(info="Source-side bulk resistance between node BI and BS" unit="Ohm" );
parameter real RJUNDO = 1.0e-3 `P(info="Drain-side bulk resistance between node BI and BD" unit="Ohm" );
`endif // NQSmodel
// Stress Model Parameters
@ -464,11 +464,11 @@
// Variables
//
//////////////////////////
// Variables for geometrical scaling rules
real L_i, W_i, SA_i, SB_i;
real LEN, WEN, iL, iW, delLPS, delWOD, LE, WE, iLE, iWE, Lcv, Wcv, LEcv, WEcv;
`ifdef Binning
// Auxiliary variables for binning-rules
real iLEWE, iiLE, iiWE, iiLEWE, iiiLEWE;
@ -480,7 +480,7 @@
real LP1_i, LP2_i, WBET_i, AXL_i, ALP1L2_i, ALP2L2_i;
real NSUB, AA, BB, NSUB0e, NPCKe, LPCKe;
real FBET1e, LP1e, GPE, GWE, tmpx;
`endif // Binning
`endif // Binning
// List of local parameters
real VFB, STVFB, TOX, NEFF, VNSUB, NSLP, DNSUB, DPHIB, NP, CT;
@ -521,7 +521,7 @@
real temp, temp1, temp2, tempM;
real help;
real TKR, TKD, TKD_sq, dT, rT, rTn;
real phit, inv_phit, Eg, phibFac, CoxPrime, tox_sq;
real delVg, CoxovPrime, GOV, GOV2;
@ -581,17 +581,17 @@
real arg1, arg2max, arg2mina;
integer CHNL_TYPE;
`ifdef NQSmodel
// Variables used in NQS-calculations
real SWNQS_i, MUNQS_i, RG_i, RBULK_i, RWELL_i, RJUNS_i, RJUND_i;
real Qp1_0, Qp2_0, Qp3_0, Qp4_0, Qp5_0, Qp6_0, Qp7_0, Qp8_0, Qp9_0;
real fk1, fk2, fk3, fk4, fk5, fk6, fk7, fk8, fk9;
real fk1, fk2, fk3, fk4, fk5, fk6, fk7, fk8, fk9;
real phi_p1, phi_p2, phi_p3;
real phi_p4, phi_p5, phi_p6;
real phi_p7, phi_p8, phi_p9;
real Qp1, Qp2, Qp3;
real Qp4, Qp5, Qp6;
real Qp7, Qp8, Qp9;
@ -599,10 +599,10 @@
real QG_NQS, QS_NQS, QD_NQS;
real pd, Gp, Gp2, a_factrp, marginp, x_sp, x_dp;
real dfQi, fQi, dQis, dQis_1, d2Qis, dQbs, dQy, d2Qy, dpsy2;
real ym, inorm, Tnorm, Qb_tmp, QbSIGN;
real r_nqs, vnorm, vnorm_inv;
real r_nqs, vnorm, vnorm_inv;
real NQS_xg1, NQS_yg, NQS_z, NQS_eta, NQS_a, NQS_c, NQS_tau, NQS_D0, NQS_xi, NQS_p;
real NQS_q, NQS_temp, NQS_A_fac, NQS_xbar, NQS_w, NQS_x0, NQS_u, NQS_y0;
real xphi, fk0, thesat2, Fvsat;
@ -634,7 +634,7 @@
real ctype `P(ask="yes" info="Flag for channel type" unit="");
real sdint `P(ask="yes" info="Flag for source-drain interchange" unit="");
real ise `P(ask="yes" info="Total source current" unit="A");
real ige `P(ask="yes" info="Total gate current" unit="A");
real ide `P(ask="yes" info="Total drain current" unit="A");
@ -669,13 +669,13 @@
real vgt `P(ask="yes" info="Effective gate drive voltage including back bias and drain bias effects" unit="V");
real vdss `P(ask="yes" info="Drain saturation voltage at actual bias" unit="V");
real vsat `P(ask="yes" info="Saturation limit" unit="V");
real gm `P(ask="yes" info="Transconductance" unit="1/Ohm");
real gmb `P(ask="yes" info="Substrate transconductance" unit="1/Ohm");
real gds `P(ask="yes" info="Output conductance" unit="1/Ohm");
real gjs `P(ask="yes" info="Source junction conductance" unit="1/Ohm");
real gjd `P(ask="yes" info="Drain junction conductance" unit="1/Ohm");
real cdd `P(ask="yes" info="Drain capacitance" unit="F");
real cdg `P(ask="yes" info="Drain-gate capacitance" unit="F");
real cds `P(ask="yes" info="Drain-source capacitance" unit="F");
@ -694,7 +694,7 @@
real cbb `P(ask="yes" info="Bulk capacitance" unit="F");
real cgsol `P(ask="yes" info="Total gate-source overlap capacitance" unit="F");
real cgdol `P(ask="yes" info="Total gate-drain overlap capacitance" unit="F");
real cjs `P(ask="yes" info="Total source junction capacitance" unit="F");
real cjsbot `P(ask="yes" info="Source junction capacitance (bottom component)" unit="F");
real cjsgat `P(ask="yes" info="Source junction capacitance (gate-edge component)" unit="F");
@ -703,7 +703,7 @@
real cjdbot `P(ask="yes" info="Drain junction capacitance (bottom component)" unit="F");
real cjdgat `P(ask="yes" info="Drain junction capacitance (gate-edge component)" unit="F");
real cjdsti `P(ask="yes" info="Drain junction capacitance (STI-edge component)" unit="F");
real weff `P(ask="yes" info="Effective channel width for geometrical models" unit="m");
real leff `P(ask="yes" info="Effective channel length for geometrical models" unit="m");
real u `P(ask="yes" info="Transistor gain" unit="");
@ -734,6 +734,9 @@
analog begin
`ifdef insideADMS
`INITIAL_MODEL
`endif
begin : initial_model
// Code independent of bias or instance parameters
// This block needs to be evaluated only once
@ -788,7 +791,7 @@
rTn = TKR / TKD;
phit = TKD * `KBOL / `QELE;
inv_phit = 1.0 / phit;
// Local process parameters
Eg = 1.179 - 9.025e-5 * TKD - 3.05e-7 * TKD_sq;
phibFac = (1.045 + 4.5e-4 * TKD) * (0.523 + 1.4e-3 * TKD - 1.48e-6 * TKD_sq) * TKD_sq / 9.0E4;
@ -830,6 +833,9 @@
end // initial_model
`ifdef insideADMS
`INITIAL_INSTANCE
`endif
begin : initial_instance
// Code independent of bias, but dependent on instance parameters,
// (including code dependent on parameters which could IN PRINCIPLE be scaled)
@ -945,7 +951,7 @@
// Saturation voltage
AX = AXO / (1.0 + AXL_i * iLE);
// Channel length modulation
ALP = ALPL * pow(iLE, ALPLEXP) * (1.0 + ALPW * iWE);
tmpx = pow(iLE, ALP1LEXP);
@ -953,14 +959,14 @@
tmpx = pow(iLE, ALP2LEXP);
ALP2 = ALP2L1 * tmpx * (1.0 + ALP2W * iWE) / (1.0 + ALP2L2_i * iLE * tmpx);
VP = VPO;
// Impact ionization
A1 = A1O * (1.0 + A1L * iLE) * (1.0 + A1W * iWE);
A2 = A2O;
STA2 = STA2O;
A3 = A3O * (1.0 + A3L * iLE) * (1.0 + A3W * iWE);
A4 = A4O * (1.0 + A4L * iLE) * (1.0 + A4W * iWE);
// Gate current
GCO = GCOO;
IGINV = IGINVLW / (iWE * iLE);
@ -969,20 +975,20 @@
GC2 = GC2O;
GC3 = GC3O;
CHIB = CHIBO;
// GIDL
AGIDL = AGIDLW * LOV_i / (LEN * iWE);
BGIDL = BGIDLO;
STBGIDL = STBGIDLO;
CGIDL = CGIDLO;
// Charge model parameters
COX = `EPSOX * WEcv * LEcv / TOX_i;
CGOV = `EPSOX * WEcv * LOV_i / TOXOV_i;
CGBOV = CGBOVL * Lcv / LEN;
CFR = CFRW * Wcv / WEN;
FNT = FNTO;
// Noise model parameters
NFA = iWE * iLE * NFALW;
NFB = iWE * iLE * NFBLW;
@ -1170,7 +1176,7 @@
tf_ther = pow(rTn, STRS_i);
RS_i = RS_i * tf_ther;
THER_i = 2 * BET_i * RS_i;
// Velocity saturation
tf_thesat = pow(rTn, STTHESAT_i);
THESAT_i = THESAT_i * tf_thesat;
@ -1220,7 +1226,7 @@
RJUNS_i = `CLIP_LOW(RJUNS, 1.0e-6);
RJUND_i = `CLIP_LOW(RJUND, 1.0e-6);
RWELL_i = `CLIP_LOW(RWELL, 1.0e-6);
// Conductance of parasitic resistance
ggate = MULT_i / RG_i;
gbulk = MULT_i / RBULK_i;
@ -1247,7 +1253,7 @@
asrh = 0.0;
vav = 0.0;
vbi_minus_vjsrh = 0.0;
if (SWJUNCAP == 0.0) begin
ABSOURCE_i = 0.0;
LSSOURCE_i = 0.0;
@ -1259,33 +1265,33 @@
VMAXD = 0.0;
end else begin
if (SWJUNCAP == 2.0) begin
ABSOURCE_i = `CLIP_LOW(AS, `AB_cliplow);
LSSOURCE_i = `CLIP_LOW(PS, `LS_cliplow);
LGSOURCE_i = juncapwidth;
ABDRAIN_i = `CLIP_LOW(AD, `AB_cliplow);
LSDRAIN_i = `CLIP_LOW(PD, `LS_cliplow);
ABSOURCE_i = `CLIP_LOW(AS, `AB_cliplow);
LSSOURCE_i = `CLIP_LOW(PS, `LS_cliplow);
LGSOURCE_i = juncapwidth;
ABDRAIN_i = `CLIP_LOW(AD, `AB_cliplow);
LSDRAIN_i = `CLIP_LOW(PD, `LS_cliplow);
LGDRAIN_i = juncapwidth;
end else begin
if (SWJUNCAP == 3.0) begin
ABSOURCE_i = `CLIP_LOW(AS, `AB_cliplow);
ABDRAIN_i = `CLIP_LOW(AD, `AB_cliplow);
LSSOURCE_i = `CLIP_LOW(PS - juncapwidth, `LS_cliplow);
LGSOURCE_i = juncapwidth;
LSDRAIN_i = `CLIP_LOW(PD - juncapwidth, `LS_cliplow);
ABSOURCE_i = `CLIP_LOW(AS, `AB_cliplow);
ABDRAIN_i = `CLIP_LOW(AD, `AB_cliplow);
LSSOURCE_i = `CLIP_LOW(PS - juncapwidth, `LS_cliplow);
LGSOURCE_i = juncapwidth;
LSDRAIN_i = `CLIP_LOW(PD - juncapwidth, `LS_cliplow);
LGDRAIN_i = juncapwidth;
end else begin
ABSOURCE_i = `CLIP_LOW(ABSOURCE, `AB_cliplow);
LSSOURCE_i = `CLIP_LOW(LSSOURCE, `LS_cliplow);
LGSOURCE_i = `CLIP_LOW(LGSOURCE, `LG_cliplow);
ABDRAIN_i = `CLIP_LOW(ABDRAIN, `AB_cliplow);
LSDRAIN_i = `CLIP_LOW(LSDRAIN, `LS_cliplow);
ABSOURCE_i = `CLIP_LOW(ABSOURCE, `AB_cliplow);
LSSOURCE_i = `CLIP_LOW(LSSOURCE, `LS_cliplow);
LGSOURCE_i = `CLIP_LOW(LGSOURCE, `LG_cliplow);
ABDRAIN_i = `CLIP_LOW(ABDRAIN, `AB_cliplow);
LSDRAIN_i = `CLIP_LOW(LSDRAIN, `LS_cliplow);
LGDRAIN_i = `CLIP_LOW(LGDRAIN, `LG_cliplow);
end
end
`JuncapInitInstance(ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, VMAXS, vbimins, vchs, vfmins, vbbtlims)
`JuncapInitInstance(ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, VMAXD, vbimind, vchd, vfmind, vbbtlimd)
end
end // initial_instance
@ -1294,7 +1300,7 @@
// DC bias dependent quantities (calculations for current contribs)
//
/////////////////////////////////////////////////////////////////////////////
begin : evaluateStatic
// Initialisation of some variables
SP_S_x1 = 0.0;
@ -1349,7 +1355,7 @@
Vjuns = V(S, `Bjs);
Vjund = V(D, `Bjd);
end
// Source-drain interchange
sigVds = 1.0;
if (Vds < 0.0) begin
@ -1365,7 +1371,7 @@
xgs_ov = -Vgs * inv_phit;
xgd_ov = -Vgd * inv_phit;
// 4.2.1 Conditioning of terminal voltages
temp = `MINA(Vdb, Vsb, bphi) + phix;
Vsbstar = Vsb - `MINA(temp, 0, aphi) + phix1;
@ -1377,7 +1383,7 @@
delVg = CF_i * (Vdsx * (1 + CFB_i * Vsbx)); // DIBL
Vgb1 = Vgb1 + delVg;
xg = Vgb1 * inv_phit1;
// 4.2.2 Bias dependent body factor
if (DNSUB_i > 0.0) begin
Dnsub = DNSUB_i * `MAXA(0, Vgs + Vsb - VNSUB_i, NSLP_i);
@ -1385,7 +1391,7 @@
end else begin
Gf = G_0;
end
// 4.2.3 Surface potential at source side
Gf2 = Gf * Gf;
inv_Gf2 = 1.0 / Gf2;
@ -1403,7 +1409,7 @@
x_d = x_s;
x_m = x_s;
x_ds = 0.0;
//
// Core PSP current calculation
//
@ -1412,7 +1418,7 @@
Ids = 0.0;
xgm = xg - x_s;
Voxm = xgm * phit1;
qeff = Voxm;
qeff = Voxm;
Vdsat = Vdsat_lim;
end else begin // (xg > 0)
delta_1s = 0.0;
@ -1431,23 +1437,23 @@
delta_1s = `ke05 / `P3(xn_s - x_s - `se05);
Es = `ke05 / `P3(x_s - `se05);
end
Ds = delta_1s - delta_ns * (x_s + 1.0 + xi0s);
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;
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;
Dm = Ds;
Dd = Dm;
// 4.2.4 Drain saturation voltage
Rxcor = (1.0 + 0.2 * XCOR_i * Vsbx) / (1.0 + XCOR_i * Vsbx);
if ( Ds > `ke05) begin
@ -1496,7 +1502,7 @@
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
Vdsat = Vdsat_lim;
Vdsat = Vdsat_lim;
end
temp = pow(Vds / Vdsat, AX_i);
Vdse = Vds * pow(1.0 + temp, -inv_AX);
@ -1560,18 +1566,18 @@
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))));
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 + `invSqrt2 * (Gf * (1.0 - 0.5 * x_m + `oneSixth * (x_m * 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);
@ -1593,7 +1599,7 @@
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
@ -1793,7 +1799,7 @@
if ((SWGIDL != 0) && (AGIDL_i > 0)) begin
// GIDL current computation
if (Vovd < 0) begin
if (Vovd < 0) begin
Vtovd = sqrt(Vovd * Vovd + CGIDL_i * CGIDL_i * (Vdb * Vdb) + 1.0e-6);
temp = -BGIDL_i / Vtovd;
`expl_low(temp, temp2)
@ -1808,7 +1814,7 @@
Igisl = -AGIDL_i * (Vsb * Vovs * Vtovs * temp2);
end
end // (SWGIDL != 0)
end // evaluateStatic
@ -1863,20 +1869,20 @@
marginp = 0.0;
if (SWNQS_i != 0) begin
if (xg <= 0.0) begin
ym = 0.5;
ym = 0.5;
pd = 1.0;
Gp = Gf;
Gp = Gf;
end else begin
ym = 0.5 * ( 1.0 + 0.25 * (dps / H));
pd = xgm / (xg - x_m);
Gp = Gf / pd;
end
Gp2 = Gp * Gp;
Gp2 = Gp * Gp;
a_factrp = 1.0 + Gp * `invSqrt2;
marginp = 1e-5 * a_factrp;
end
`endif // NQSmodel
end // evaluateDynamic
@ -1887,7 +1893,7 @@
/////////////////////////////////////////////////////////////////////////////
begin : evaluateStaticDynamic
// Source side
VAK = Vjuns;
VMAX = VMAXS;
@ -1896,7 +1902,7 @@
vch = vchs;
vbbtlim = vbbtlims;
`juncapcommon(ABSOURCE_i,LSSOURCE_i,LGSOURCE_i,isjunbot,qsjunbot,isjunsti,qsjunsti,isjungat,qsjungat)
// Drain side
VAK = Vjund;
VMAX = VMAXD;
@ -1931,7 +1937,7 @@
Igbe = MULT_i * Igb;
Igse = MULT_i * Igs;
Igde = MULT_i * Igd;
// GIDL/GISL current
Igidle = MULT_i * Igidl;
Igisle = MULT_i * Igisl;
@ -1942,7 +1948,7 @@
// JUNCAP2
isjun = MULT_i * (ABSOURCE_i * isjunbot + LSSOURCE_i * isjunsti + LGSOURCE_i * isjungat);
idjun = MULT_i * (ABDRAIN_i * idjunbot + LSDRAIN_i * idjunsti + LGDRAIN_i * idjungat);
// Convert back for NMOS-PMOS and Source-Drain interchange
if (sigVds > 0) begin
I(D, `Bint) <+ CHNL_TYPE * (Iimpacte + Igidle);
@ -2140,14 +2146,14 @@
/////////////////////////////////////////////////////////////////////////////
begin : OPinfo
// The output variables defined below are currently not available in
// Verilog-A, but only in the SiMKit-C-code which was generated from
// this source. Similar functionality will be available in Verilog-A
// from Verilog-A version 2.2 onwards. However, a different syntax is
// to be used (see Verilog AMS language reference manual, version 2.2,
// november 2004, Accellera).
// Auxiliary variables
id_op = Idse + Iimpacte + Igidle - Igde;
is = -Idse + Igisle - Igse;
@ -2159,18 +2165,18 @@
facvsb = Vsbstar + facvsb0;
sig1k = 2 * `PI * 1000 * CGeff;
sig1k = sig1k * sig1k * mig;
////////////////////////////////////////////////////////////////////////////////////
//
// Actual operation point output variables
//
////////////////////////////////////////////////////////////////////////////////////
// Note: In this section (and ONLY in this section) `drain' always refers to
// the highest-potential end of the channel. Therefore, care has to be
// taken for derivatives w.r.t. terminal voltages when sigVds == -1.
sdint = sigVds;
ctype = CHNL_TYPE;
@ -2249,7 +2255,7 @@
cjdbot = -MULT_i * CHNL_TYPE * ABSOURCE_i * ddx(qsjunbot, V(S, `Bjs));
cjdgat = -MULT_i * CHNL_TYPE * LGSOURCE_i * ddx(qsjungat, V(S, `Bjs));
cjdsti = -MULT_i * CHNL_TYPE * LSSOURCE_i * ddx(qsjunsti, V(S, `Bjs));
cjd = cjdbot + cjdgat + cjdsti;
cjd = cjdbot + cjdgat + cjdsti;
end else begin
ise = is - isjun;
ige = ig;
@ -2316,7 +2322,7 @@
cjsbot = -MULT_i * CHNL_TYPE * ABSOURCE_i * ddx(qsjunbot, V(S, `Bjs));
cjsgat = -MULT_i * CHNL_TYPE * LGSOURCE_i * ddx(qsjungat, V(S, `Bjs));
cjssti = -MULT_i * CHNL_TYPE * LSSOURCE_i * ddx(qsjunsti, V(S, `Bjs));
cjs = cjsbot + cjsgat + cjssti;
cjs = cjsbot + cjsgat + cjssti;
cjdbot = -MULT_i * CHNL_TYPE * ABDRAIN_i * ddx(qdjunbot, V(D, `Bjd));
cjdgat = -MULT_i * CHNL_TYPE * LGDRAIN_i * ddx(qdjungat, V(D, `Bjd));
cjdsti = -MULT_i * CHNL_TYPE * LSDRAIN_i * ddx(qdjunsti, V(D, `Bjd));

View File

@ -17,7 +17,7 @@
//////////////////////////////////////////////////////////////
//
// General macros and constants for compact va-models
// General macros and constants for compact va-models
//
//////////////////////////////////////////////////////////////
@ -30,18 +30,22 @@
`define CLIP_HIGH(val,max) ((val)<(max)?(val):(max))
`define CLIP_BOTH(val,min,max) ((val)>(min)?((val)<(max)?(val):(max)):(min))
// Note 1: In this va-code, the `P-macro is defined such that its argument
// is ignored during compilation; in this source code it acts as
// a comment
// Note 2: In this va-code, the "from" keyword in the parameter
// list is not used. Silent clipping is used instead. One could enable
// the Verilog-A range checking by redefining the `from-macro below.
`define P(txt)
`define AT_MODEL
`define AT_INSTANCE
`define AT_NOISE
// Note 1: In this va-code, the `P-macro is defined such that its argument
// is ignored during compilation; in this source code it acts as
// a comment
// Note 2: In this va-code, the "from" keyword in the parameter
// list is not used. Silent clipping is used instead. One could enable
// the Verilog-A range checking by redefining the `from-macro below.
`define P(txt)
`ifdef insideADMS
`define from(lower,upper) from[lower:upper]
`define INITIAL_MODEL @(initial_model)
`define INITIAL_INSTANCE @(initial_instance)
`else
`define from(lower,upper)
// `define from(lower,upper) from[lower:upper]
`define INITIAL_MODEL
`define INITIAL_INSTANCE
`endif
// Some functions
`define MAX(x,y) ((x)>(y)?(x):(y))
@ -52,14 +56,14 @@
`define SQRTPI 1.77245385090551603
// Physical constants
`define KELVINCONVERSION 273.15
`define KBOL 1.3806505E-23
`define QELE 1.6021918E-19
`define HBAR 1.05457168E-34
`define KELVINCONVERSION 273.15
`define KBOL 1.3806505E-23
`define QELE 1.6021918E-19
`define HBAR 1.05457168E-34
`define MELE 9.1093826E-31
`define EPSSI 1.045E-10
// Other constants
// Other constants
`define oneThird 3.3333333333333333e-01
`define twoThirds 6.6666666666666667e-01

View File

@ -33,15 +33,15 @@
// `undef LocalModel
// `define Binning
module PSP102VA(D, G, S, B)
module PSP102VA(D, G, S, B);
`P(
info = "PSP MOSFET Model"
version = `VERS
revision = `VREV
simkit:name = "psp1020"
simkit:desc = "psp_1020"
);
//`P(
// info = "PSP MOSFET Model"
// version = `VERS
// revision = `VREV
// simkit:name = "psp1020"
// simkit:desc = "psp_1020"
//)
`include "PSP102_module.include"