add latest available psp103 version to adms
This commit is contained in:
parent
70d1647cfa
commit
0e9d1c50a4
|
|
@ -1101,7 +1101,8 @@ if test "x$enable_adms" = xyes ; then
|
|||
adms/ekv \
|
||||
adms/hicum0 \
|
||||
adms/mextram \
|
||||
adms/psp102 "
|
||||
adms/psp102 \
|
||||
adms/psp103 "
|
||||
|
||||
# The makefiles for adms (to be added to AC_CONFIG_FILES by ./autogen.sh --adms)
|
||||
#VLAMKF src/spicelib/devices/adms/bsimbulk/Makefile
|
||||
|
|
@ -1110,6 +1111,7 @@ if test "x$enable_adms" = xyes ; then
|
|||
#VLAMKF src/spicelib/devices/adms/hicum0/Makefile
|
||||
#VLAMKF src/spicelib/devices/adms/mextram/Makefile
|
||||
#VLAMKF src/spicelib/devices/adms/psp102/Makefile
|
||||
#VLAMKF src/spicelib/devices/adms/psp103/Makefile
|
||||
|
||||
NOTVLADEVDIR=""
|
||||
|
||||
|
|
@ -1118,7 +1120,8 @@ if test "x$enable_adms" = xyes ; then
|
|||
spicelib/devices/adms/ekv/libekv.la \
|
||||
spicelib/devices/adms/hicum0/libhicum0.la \
|
||||
spicelib/devices/adms/mextram/libbjt504t.la \
|
||||
spicelib/devices/adms/psp102/libpsp102.la "
|
||||
spicelib/devices/adms/psp102/libpsp102.la \
|
||||
spicelib/devices/adms/psp103/libpsp103.la "
|
||||
|
||||
else
|
||||
|
||||
|
|
|
|||
|
|
@ -1943,6 +1943,12 @@
|
|||
<admst:value-to select="value" value="psp102"/>
|
||||
</admst:new>
|
||||
</admst:when>
|
||||
<admst:when test="[lower-case(name)='psp103va']">
|
||||
<admst:new datatype="attribute" arguments="ngspicename">
|
||||
<admst:push into="../attribute" select="." onduplicate="abort"/>
|
||||
<admst:value-to select="value" value="psp103"/>
|
||||
</admst:new>
|
||||
</admst:when>
|
||||
<admst:otherwise>
|
||||
<admst:new datatype="attribute" arguments="ngspicename">
|
||||
<admst:push into="../attribute" select="." onduplicate="abort"/>
|
||||
|
|
@ -2094,6 +2100,52 @@
|
|||
</admst:new>
|
||||
</admst:if>
|
||||
</admst:when>
|
||||
<admst:when test="[lower-case(name)='psp103va']">
|
||||
<admst:if test="[nilled(variable[name='nmos'])]">
|
||||
<admst:value-of select="analog"/>
|
||||
<admst:value-of select="."/>
|
||||
<admst:new datatype="variable" arguments="%p,nmos,%p">
|
||||
<admst:push into="module/variable" select="." onduplicate="ignore"/>
|
||||
<admst:value-to select="sizetype" value="scalar"/>
|
||||
<admst:value-to select="type" value="integer"/>
|
||||
<admst:value-to select="input" value="yes"/>
|
||||
<admst:value-to select="output" value="yes"/>
|
||||
<admst:value-to select="parametertype" value="model"/>
|
||||
<admst:value-to select="scope" value="global_model"/>
|
||||
<admst:new datatype="number" arguments="1">
|
||||
<admst:value-to select="scalingunit" value="1"/>
|
||||
<admst:value-of select="."/>
|
||||
<admst:value-of select="../module"/>
|
||||
<admst:new datatype="expression" arguments="%p,%p">
|
||||
<admst:value-of select="."/>
|
||||
<admst:value-to select="../../default" value="%p"/>
|
||||
</admst:new>
|
||||
</admst:new>
|
||||
</admst:new>
|
||||
</admst:if>
|
||||
<admst:if test="[nilled(variable[name='pmos'])]">
|
||||
<admst:value-of select="analog"/>
|
||||
<admst:value-of select="."/>
|
||||
<admst:new datatype="variable" arguments="%p,pmos,%p">
|
||||
<admst:push into="module/variable" select="." onduplicate="ignore"/>
|
||||
<admst:value-to select="sizetype" value="scalar"/>
|
||||
<admst:value-to select="type" value="integer"/>
|
||||
<admst:value-to select="input" value="yes"/>
|
||||
<admst:value-to select="output" value="yes"/>
|
||||
<admst:value-to select="parametertype" value="model"/>
|
||||
<admst:value-to select="scope" value="global_model"/>
|
||||
<admst:new datatype="number" arguments="1">
|
||||
<admst:value-to select="scalingunit" value="1"/>
|
||||
<admst:value-of select="."/>
|
||||
<admst:value-of select="../module"/>
|
||||
<admst:new datatype="expression" arguments="%p,%p">
|
||||
<admst:value-of select="."/>
|
||||
<admst:value-to select="../../default" value="%p"/>
|
||||
</admst:new>
|
||||
</admst:new>
|
||||
</admst:new>
|
||||
</admst:if>
|
||||
</admst:when>
|
||||
<admst:when test="[name='ekv']">
|
||||
<admst:if test="[nilled(variable[name='nmos'])]">
|
||||
<admst:value-of select="analog"/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,176 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: Common103_macrodefs.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
//
|
||||
// General macros and constants for compact va-models
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
// Clipping functions
|
||||
`define CLIP_LOW(val,min) ((val)>(min)?(val):(min))
|
||||
`define CLIP_HIGH(val,max) ((val)<(max)?(val):(max))
|
||||
`define CLIP_BOTH(val,min,max) ((val)>(min)?((val)<(max)?(val):(max)):(min))
|
||||
|
||||
`ifdef insideADMS
|
||||
`define INITIAL_MODEL @(initial_model)
|
||||
`define INITIAL_INSTANCE @(initial_instance)
|
||||
`define from(lower,upper) from [lower:upper]
|
||||
`else
|
||||
`define INITIAL_MODEL
|
||||
`define INITIAL_INSTANCE
|
||||
`define from(lower,upper)
|
||||
`endif
|
||||
|
||||
// Min/Max functions
|
||||
`define MAX(x,y) ((x)>(y)?(x):(y))
|
||||
`define MIN(x,y) ((x)<(y)?(x):(y))
|
||||
|
||||
// Mathematical constants
|
||||
`define PI 3.1415926535897931
|
||||
`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 MELE 9.1093826E-31
|
||||
`define EPSO 8.8541878176E-12
|
||||
`define EPSRSI 11.8
|
||||
|
||||
// Other constants
|
||||
`define oneThird 3.3333333333333333e-01
|
||||
`define twoThirds 6.6666666666666667e-01
|
||||
|
||||
// Constants needed in safe exponential function (called "expl")
|
||||
`define se 4.6051701859880916e+02
|
||||
`define se05 2.3025850929940458e+02
|
||||
`define ke 1.0e-200
|
||||
`define ke05 1.0e-100
|
||||
`define keinv 1.0e200
|
||||
`define ke05inv 1.0e100
|
||||
|
||||
// P3 3rd order polynomial expansion of exp()
|
||||
`define P3(u) (1.0 + (u) * (1.0 + 0.5 * ((u) * (1.0 + (u) * `oneThird))))
|
||||
|
||||
// expl exp() with 3rd order polynomial extrapolation for very low values (exp_low),
|
||||
// very high values (exp_high), or both (expl)
|
||||
`define expl(x, res) \
|
||||
if (abs(x) < `se05) begin\
|
||||
res = exp(x); \
|
||||
end else begin \
|
||||
if ((x) < 0.0) begin\
|
||||
res = `ke05 / `P3(-`se05 - (x)); \
|
||||
end else begin\
|
||||
res = `ke05inv * `P3((x) - `se05); \
|
||||
end \
|
||||
end
|
||||
|
||||
`define expl_low(x, res) \
|
||||
if ((x) > -`se05) begin\
|
||||
res = exp(x); \
|
||||
end else begin\
|
||||
res = `ke05 / `P3(-`se05 - (x)); \
|
||||
end
|
||||
|
||||
`define expl_high(x, res) \
|
||||
if ((x) < `se05) begin\
|
||||
res = exp(x); \
|
||||
end else begin \
|
||||
res = `ke05inv * `P3((x) - `se05); \
|
||||
end
|
||||
|
||||
// Exchange function
|
||||
`define swap(a, b) \
|
||||
temp = a; \
|
||||
a = b; \
|
||||
b = temp;
|
||||
|
||||
// Parameter definition macros: "des" description argument is intended to
|
||||
// be a short description, the "inf" information argument is intended to be
|
||||
// a detailed description (e.g. for display as part of on-line help).
|
||||
//
|
||||
// MPR model parameter real
|
||||
// MPI model parameter integer
|
||||
// IPR instance parameter real
|
||||
// IPI instance parameter integer
|
||||
// OPP operating point parameter, includes units and description for printing
|
||||
// OPM operating point parameter, scales with $mfactor
|
||||
// OPD operating point parameter, scales with 1/$mfactor
|
||||
//
|
||||
// Instance parameters have the attribute *type="instance"* and note that
|
||||
// compilers treat these as both instance and model parameters, with a
|
||||
// specified instance value taking precedence over a specified model card value.
|
||||
//
|
||||
// There are some issues with passing range directives with some compilers,
|
||||
// so for each parameter declaration there are multiple versions:
|
||||
// cc closed lower bound, closed upper bound
|
||||
// co closed lower bound, open upper bound
|
||||
// cz closed lower bound of zero (no upper bound)
|
||||
// oc open lower bound, closed upper bound
|
||||
// oo open lower bound, open upper bound
|
||||
// oz open lower bound of zero (no upper bound)
|
||||
// nb no bounds
|
||||
// sw switch (integer only, values 0=false and >0=true)
|
||||
// ty switch (integer only, values -1=n-type and +1=p-type)
|
||||
//
|
||||
|
||||
`define ALIAS(alias,paramName) aliasparam alias = paramName;
|
||||
`define OPP(nam,uni,des) (*units=uni, desc=des*) real nam;
|
||||
`define OPM(nam,uni,des) (*units=uni, multiplicity="multiply", desc=des*) real nam;
|
||||
`define OPD(nam,uni,des) (*units=uni, multiplicity="divide", desc=des*) real nam;
|
||||
`define MPRcc(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter real nam=def from[lwr:upr];
|
||||
`define MPRco(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter real nam=def from[lwr:upr);
|
||||
`define MPRcz(nam,def,uni, des) (*units=uni , desc=des*) parameter real nam=def from[ 0:inf);
|
||||
`define MPRoc(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter real nam=def from(lwr:upr];
|
||||
`define MPRoo(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter real nam=def from(lwr:upr);
|
||||
`define MPRoz(nam,def,uni, des) (*units=uni , desc=des*) parameter real nam=def from( 0:inf);
|
||||
`define MPRnb(nam,def,uni, des) (*units=uni , desc=des*) parameter real nam=def;
|
||||
`define MPIcc(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter integer nam=def from[lwr:upr];
|
||||
`define MPIco(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter integer nam=def from[lwr:upr);
|
||||
`define MPIcz(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def from[ 0:inf);
|
||||
`define MPIoc(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter integer nam=def from(lwr:upr];
|
||||
`define MPIoo(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter integer nam=def from(lwr:upr);
|
||||
`define MPIoz(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def from( 0:inf);
|
||||
`define MPInb(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def;
|
||||
`define MPIsw(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def from[ 0:inf);
|
||||
`define MPIty(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def from[ -1: 1] exclude 0;
|
||||
`define IPRcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr];
|
||||
`define IPRco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr);
|
||||
`define IPRcz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[ 0:inf);
|
||||
`define IPRoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr];
|
||||
`define IPRoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr);
|
||||
`define IPRoz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def from( 0:inf);
|
||||
`define IPRnb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def;
|
||||
`define IPIcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr];
|
||||
`define IPIco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr);
|
||||
`define IPIcz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[ 0:inf);
|
||||
`define IPIoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr];
|
||||
`define IPIoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr);
|
||||
`define IPIoz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from( 0:inf);
|
||||
`define IPInb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def;
|
||||
`define IPIsw(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[ 0:inf);
|
||||
|
|
@ -0,0 +1,406 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: JUNCAP200_InitModel.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 200.6.0, April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// Calculation of internal parameters which are independent on instance parameters
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
TRJ_i = `CLIP_LOW( TRJ ,`TRJ_cliplow);
|
||||
IMAX_i = `CLIP_LOW( IMAX ,`IMAX_cliplow);
|
||||
FREV_i = `CLIP_BOTH(FREV ,`FREV_cliplow,`FREV_cliphigh);
|
||||
//IFACTOR_i = `CLIP_LOW( IFACTOR ,`IFACTOR_cliplow);
|
||||
//CFACTOR_i = `CLIP_LOW( CFACTOR ,`CFACTOR_cliplow);
|
||||
|
||||
CJORBOT_i = `CLIP_LOW( CJORBOT ,`CJORBOT_cliplow);
|
||||
CJORSTI_i = `CLIP_LOW( CJORSTI ,`CJORSTI_cliplow);
|
||||
CJORGAT_i = `CLIP_LOW( CJORGAT ,`CJORGAT_cliplow);
|
||||
VBIRBOT_i = `CLIP_LOW( VBIRBOT ,`VBIR_cliplow);
|
||||
VBIRSTI_i = `CLIP_LOW( VBIRSTI ,`VBIR_cliplow);
|
||||
VBIRGAT_i = `CLIP_LOW( VBIRGAT ,`VBIR_cliplow);
|
||||
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);
|
||||
PHIGBOT_i = PHIGBOT;
|
||||
PHIGSTI_i = PHIGSTI;
|
||||
PHIGGAT_i = PHIGGAT;
|
||||
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);
|
||||
CSRHSTI_i = `CLIP_LOW( CSRHSTI ,`CSRH_cliplow);
|
||||
CSRHGAT_i = `CLIP_LOW( CSRHGAT ,`CSRH_cliplow);
|
||||
XJUNSTI_i = `CLIP_LOW( XJUNSTI ,`XJUN_cliplow);
|
||||
XJUNGAT_i = `CLIP_LOW( XJUNGAT ,`XJUN_cliplow);
|
||||
CTATBOT_i = `CLIP_LOW( CTATBOT ,`CTAT_cliplow);
|
||||
CTATSTI_i = `CLIP_LOW( CTATSTI ,`CTAT_cliplow);
|
||||
CTATGAT_i = `CLIP_LOW( CTATGAT ,`CTAT_cliplow);
|
||||
MEFFTATBOT_i = `CLIP_LOW( MEFFTATBOT ,`MEFFTAT_cliplow);
|
||||
MEFFTATSTI_i = `CLIP_LOW( MEFFTATSTI ,`MEFFTAT_cliplow);
|
||||
MEFFTATGAT_i = `CLIP_LOW( MEFFTATGAT ,`MEFFTAT_cliplow);
|
||||
CBBTBOT_i = `CLIP_LOW( CBBTBOT ,`CBBT_cliplow);
|
||||
CBBTSTI_i = `CLIP_LOW( CBBTSTI ,`CBBT_cliplow);
|
||||
CBBTGAT_i = `CLIP_LOW( CBBTGAT ,`CBBT_cliplow);
|
||||
FBBTRBOT_i = FBBTRBOT;
|
||||
FBBTRSTI_i = FBBTRSTI;
|
||||
FBBTRGAT_i = FBBTRGAT;
|
||||
STFBBTBOT_i = STFBBTBOT;
|
||||
STFBBTSTI_i = STFBBTSTI;
|
||||
STFBBTGAT_i = STFBBTGAT;
|
||||
VBRBOT_i = `CLIP_LOW( VBRBOT ,`VBR_cliplow);
|
||||
VBRSTI_i = `CLIP_LOW( VBRSTI ,`VBR_cliplow);
|
||||
VBRGAT_i = `CLIP_LOW( VBRGAT ,`VBR_cliplow);
|
||||
PBRBOT_i = `CLIP_LOW( PBRBOT ,`PBR_cliplow);
|
||||
PBRSTI_i = `CLIP_LOW( PBRSTI ,`PBR_cliplow);
|
||||
PBRGAT_i = `CLIP_LOW( PBRGAT ,`PBR_cliplow);
|
||||
|
||||
SWJUNEXP_i = 0.0;
|
||||
if (SWJUNEXP > 0.5) begin
|
||||
SWJUNEXP_i = 1.0;
|
||||
end else begin
|
||||
SWJUNEXP_i = 0.0;
|
||||
end
|
||||
|
||||
VJUNREF_i = `CLIP_LOW( VJUNREF ,`VJUNREF_cliplow);
|
||||
FJUNQ_i = `CLIP_LOW( FJUNQ ,`FJUNQ_cliplow);
|
||||
|
||||
`ifdef JUNCAP_StandAlone
|
||||
// do nothing
|
||||
`else // JUNCAP_StandAlone
|
||||
if (SWJUNASYM == 0.0) begin
|
||||
CJORBOTD_i = CJORBOT_i;
|
||||
CJORSTID_i = CJORSTI_i;
|
||||
CJORGATD_i = CJORGAT_i;
|
||||
VBIRBOTD_i = VBIRBOT_i;
|
||||
VBIRSTID_i = VBIRSTI_i;
|
||||
VBIRGATD_i = VBIRGAT_i;
|
||||
PBOTD_i = PBOT_i;
|
||||
PSTID_i = PSTI_i;
|
||||
PGATD_i = PGAT_i;
|
||||
PHIGBOTD_i = PHIGBOT_i;
|
||||
PHIGSTID_i = PHIGSTI_i;
|
||||
PHIGGATD_i = PHIGGAT_i;
|
||||
IDSATRBOTD_i = IDSATRBOT_i;
|
||||
IDSATRSTID_i = IDSATRSTI_i;
|
||||
IDSATRGATD_i = IDSATRGAT_i;
|
||||
CSRHBOTD_i = CSRHBOT_i;
|
||||
CSRHSTID_i = CSRHSTI_i;
|
||||
CSRHGATD_i = CSRHGAT_i;
|
||||
XJUNSTID_i = XJUNSTI_i;
|
||||
XJUNGATD_i = XJUNGAT_i;
|
||||
CTATBOTD_i = CTATBOT_i;
|
||||
CTATSTID_i = CTATSTI_i;
|
||||
CTATGATD_i = CTATGAT_i;
|
||||
MEFFTATBOTD_i = MEFFTATBOT_i;
|
||||
MEFFTATSTID_i = MEFFTATSTI_i;
|
||||
MEFFTATGATD_i = MEFFTATGAT_i;
|
||||
CBBTBOTD_i = CBBTBOT_i;
|
||||
CBBTSTID_i = CBBTSTI_i;
|
||||
CBBTGATD_i = CBBTGAT_i;
|
||||
FBBTRBOTD_i = FBBTRBOT_i;
|
||||
FBBTRSTID_i = FBBTRSTI_i;
|
||||
FBBTRGATD_i = FBBTRGAT_i;
|
||||
STFBBTBOTD_i = STFBBTBOT_i;
|
||||
STFBBTSTID_i = STFBBTSTI_i;
|
||||
STFBBTGATD_i = STFBBTGAT_i;
|
||||
VBRBOTD_i = VBRBOT_i;
|
||||
VBRSTID_i = VBRSTI_i;
|
||||
VBRGATD_i = VBRGAT_i;
|
||||
PBRBOTD_i = PBRBOT_i;
|
||||
PBRSTID_i = PBRSTI_i;
|
||||
PBRGATD_i = PBRGAT_i;
|
||||
VJUNREFD_i = VJUNREF_i;
|
||||
FJUNQD_i = FJUNQ_i;
|
||||
end else begin
|
||||
CJORBOTD_i = `CLIP_LOW( CJORBOTD ,`CJORBOT_cliplow);
|
||||
CJORSTID_i = `CLIP_LOW( CJORSTID ,`CJORSTI_cliplow);
|
||||
CJORGATD_i = `CLIP_LOW( CJORGATD ,`CJORGAT_cliplow);
|
||||
VBIRBOTD_i = `CLIP_LOW( VBIRBOTD ,`VBIR_cliplow);
|
||||
VBIRSTID_i = `CLIP_LOW( VBIRSTID ,`VBIR_cliplow);
|
||||
VBIRGATD_i = `CLIP_LOW( VBIRGATD ,`VBIR_cliplow);
|
||||
PBOTD_i = `CLIP_BOTH(PBOTD ,`P_cliplow,`P_cliphigh);
|
||||
PSTID_i = `CLIP_BOTH(PSTID ,`P_cliplow,`P_cliphigh);
|
||||
PGATD_i = `CLIP_BOTH(PGATD ,`P_cliplow,`P_cliphigh);
|
||||
PHIGBOTD_i = PHIGBOTD;
|
||||
PHIGSTID_i = PHIGSTID;
|
||||
PHIGGATD_i = PHIGGATD;
|
||||
IDSATRBOTD_i = `CLIP_LOW( IDSATRBOTD ,`IDSATR_cliplow);
|
||||
IDSATRSTID_i = `CLIP_LOW( IDSATRSTID ,`IDSATR_cliplow);
|
||||
IDSATRGATD_i = `CLIP_LOW( IDSATRGATD ,`IDSATR_cliplow);
|
||||
CSRHBOTD_i = `CLIP_LOW( CSRHBOTD ,`CSRH_cliplow);
|
||||
CSRHSTID_i = `CLIP_LOW( CSRHSTID ,`CSRH_cliplow);
|
||||
CSRHGATD_i = `CLIP_LOW( CSRHGATD ,`CSRH_cliplow);
|
||||
XJUNSTID_i = `CLIP_LOW( XJUNSTID ,`XJUN_cliplow);
|
||||
XJUNGATD_i = `CLIP_LOW( XJUNGATD ,`XJUN_cliplow);
|
||||
CTATBOTD_i = `CLIP_LOW( CTATBOTD ,`CTAT_cliplow);
|
||||
CTATSTID_i = `CLIP_LOW( CTATSTID ,`CTAT_cliplow);
|
||||
CTATGATD_i = `CLIP_LOW( CTATGATD ,`CTAT_cliplow);
|
||||
MEFFTATBOTD_i = `CLIP_LOW( MEFFTATBOTD,`MEFFTAT_cliplow);
|
||||
MEFFTATSTID_i = `CLIP_LOW( MEFFTATSTID,`MEFFTAT_cliplow);
|
||||
MEFFTATGATD_i = `CLIP_LOW( MEFFTATGATD,`MEFFTAT_cliplow);
|
||||
CBBTBOTD_i = `CLIP_LOW( CBBTBOTD ,`CBBT_cliplow);
|
||||
CBBTSTID_i = `CLIP_LOW( CBBTSTID ,`CBBT_cliplow);
|
||||
CBBTGATD_i = `CLIP_LOW( CBBTGATD ,`CBBT_cliplow);
|
||||
FBBTRBOTD_i = FBBTRBOTD;
|
||||
FBBTRSTID_i = FBBTRSTID;
|
||||
FBBTRGATD_i = FBBTRGATD;
|
||||
STFBBTBOTD_i = STFBBTBOTD;
|
||||
STFBBTSTID_i = STFBBTSTID;
|
||||
STFBBTGATD_i = STFBBTGATD;
|
||||
VBRBOTD_i = `CLIP_LOW( VBRBOTD ,`VBR_cliplow);
|
||||
VBRSTID_i = `CLIP_LOW( VBRSTID ,`VBR_cliplow);
|
||||
VBRGATD_i = `CLIP_LOW( VBRGATD ,`VBR_cliplow);
|
||||
PBRBOTD_i = `CLIP_LOW( PBRBOTD ,`PBR_cliplow);
|
||||
PBRSTID_i = `CLIP_LOW( PBRSTID ,`PBR_cliplow);
|
||||
PBRGATD_i = `CLIP_LOW( PBRGATD ,`PBR_cliplow);
|
||||
VJUNREFD_i = `CLIP_LOW( VJUNREFD ,`VJUNREF_cliplow);
|
||||
FJUNQD_i = `CLIP_LOW( FJUNQD ,`FJUNQ_cliplow);
|
||||
end
|
||||
`endif // JUNCAP_StandAlone
|
||||
|
||||
tkr = `KELVINCONVERSION + TRJ_i;
|
||||
tkd = max($temperature + DTA, `KELVINCONVERSION + `MINTEMP);
|
||||
auxt = tkd / tkr;
|
||||
KBOL_over_QELE = `KBOL / `QELE;
|
||||
phitr = KBOL_over_QELE * tkr;
|
||||
phitrinv = 1.0 / phitr;
|
||||
phitd = KBOL_over_QELE * tkd;
|
||||
phitdinv = 1.0 / phitd;
|
||||
|
||||
// bandgap voltages at reference temperature
|
||||
deltaphigr = -(7.02e-4 * tkr * tkr) / (1108.0 + tkr);
|
||||
phigrbot = PHIGBOT_i + deltaphigr;
|
||||
phigrsti = PHIGSTI_i + deltaphigr;
|
||||
phigrgat = PHIGGAT_i + deltaphigr;
|
||||
|
||||
// bandgap voltages at device temperature
|
||||
deltaphigd = -(7.02e-4 * tkd * tkd) / (1108.0 + tkd);
|
||||
phigdbot = PHIGBOT_i + deltaphigd;
|
||||
phigdsti = PHIGSTI_i + deltaphigd;
|
||||
phigdgat = PHIGGAT_i + deltaphigd;
|
||||
|
||||
// factors ftd for ideal-current model
|
||||
ftdbot = (pow(auxt, 1.5)) * exp(0.5 * ((phigrbot * phitrinv) - (phigdbot * phitdinv)));
|
||||
ftdsti = (pow(auxt, 1.5)) * exp(0.5 * ((phigrsti * phitrinv) - (phigdsti * phitdinv)));
|
||||
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;
|
||||
|
||||
// built-in voltages before limiting
|
||||
ubibot = VBIRBOT_i * auxt - 2.0 * phitd * ln(ftdbot);
|
||||
ubisti = VBIRSTI_i * auxt - 2.0 * phitd * ln(ftdsti);
|
||||
ubigat = VBIRGAT_i * auxt - 2.0 * phitd * ln(ftdgat);
|
||||
|
||||
// built-in voltages limited to phitd
|
||||
vbibot = ubibot + phitd * ln(1 + exp((`vbilow - ubibot) * phitdinv));
|
||||
vbisti = ubisti + phitd * ln(1 + exp((`vbilow - ubisti) * phitdinv));
|
||||
vbigat = ubigat + phitd * ln(1 + exp((`vbilow - ubigat) * phitdinv));
|
||||
|
||||
// inverse values of built-in voltages
|
||||
vbiinvbot = 1.0 / vbibot;
|
||||
vbiinvsti = 1.0 / vbisti;
|
||||
vbiinvgat = 1.0 / vbigat;
|
||||
|
||||
// one minus the grading coefficient
|
||||
one_minus_PBOT = 1.0 - PBOT_i;
|
||||
one_minus_PSTI = 1.0 - PSTI_i;
|
||||
one_minus_PGAT = 1.0 - PGAT_i;
|
||||
|
||||
// one over "one minus the grading coefficient"
|
||||
one_over_one_minus_PBOT = 1.0 / one_minus_PBOT;
|
||||
one_over_one_minus_PSTI = 1.0 / one_minus_PSTI;
|
||||
one_over_one_minus_PGAT = 1.0 / one_minus_PGAT;
|
||||
|
||||
// temperature-scaled zero-bias capacitance
|
||||
cjobot = CJORBOT_i * pow((VBIRBOT_i * vbiinvbot), PBOT_i);
|
||||
cjosti = CJORSTI_i * pow((VBIRSTI_i * vbiinvsti), PSTI_i);
|
||||
cjogat = CJORGAT_i * pow((VBIRGAT_i * vbiinvgat), PGAT_i);
|
||||
|
||||
// prefactor in physical part of charge model
|
||||
qprefbot = cjobot * vbibot * one_over_one_minus_PBOT;
|
||||
qprefsti = cjosti * vbisti * one_over_one_minus_PSTI;
|
||||
qprefgat = cjogat * vbigat * one_over_one_minus_PGAT;
|
||||
|
||||
// prefactor in mathematical extension of charge model
|
||||
qpref2bot = `a * cjobot;
|
||||
qpref2sti = `a * cjosti;
|
||||
qpref2gat = `a * cjogat;
|
||||
|
||||
// zero-bias depletion widths at reference temperature, needed in SRH and TAT model
|
||||
wdepnulrbot = EPSSI / CJORBOT_i;
|
||||
wdepnulrsti = XJUNSTI_i * EPSSI / CJORSTI_i;
|
||||
wdepnulrgat = XJUNGAT_i * EPSSI / CJORGAT_i;
|
||||
|
||||
// inverse values of "wdepnulr", used in BBT model
|
||||
wdepnulrinvbot = 1.0 / wdepnulrbot;
|
||||
wdepnulrinvsti = 1.0 / wdepnulrsti;
|
||||
wdepnulrinvgat = 1.0 / wdepnulrgat;
|
||||
|
||||
// inverse values of built-in voltages at reference temperature, needed in SRH and BBT model
|
||||
VBIRBOTinv = 1.0 / VBIRBOT_i;
|
||||
VBIRSTIinv = 1.0 / VBIRSTI_i;
|
||||
VBIRGATinv = 1.0 / VBIRGAT_i;
|
||||
|
||||
// some constants needed in erfc-approximation, needed in TAT model
|
||||
perfc = (`SQRTPI * `aerfc);
|
||||
berfc = ((-5.0 * (`aerfc) + 6.0 - pow((perfc), -2.0)) / 3.0);
|
||||
cerfc = (1.0 - (`aerfc) - (berfc));
|
||||
|
||||
// half the bandgap energy, limited to values > phitd, needed in TAT model
|
||||
deltaEbot = max(0.5 * phigdbot, phitd);
|
||||
deltaEsti = max(0.5 * phigdsti, phitd);
|
||||
deltaEgat = max(0.5 * phigdgat, phitd);
|
||||
|
||||
// values of atat, needed in TAT model
|
||||
atatbot = deltaEbot * phitdinv;
|
||||
atatsti = deltaEsti * phitdinv;
|
||||
atatgat = deltaEgat * phitdinv;
|
||||
|
||||
// values of btatpart, needed in TAT model
|
||||
btatpartbot = sqrt(32.0 * MEFFTATBOT_i * `MELE * `QELE * (deltaEbot * deltaEbot * deltaEbot)) / (3.0 * `HBAR);
|
||||
btatpartsti = sqrt(32.0 * MEFFTATSTI_i * `MELE * `QELE * (deltaEsti * deltaEsti * deltaEsti)) / (3.0 * `HBAR);
|
||||
btatpartgat = sqrt(32.0 * MEFFTATGAT_i * `MELE * `QELE * (deltaEgat * deltaEgat * deltaEgat)) / (3.0 * `HBAR);
|
||||
|
||||
// temperature-scaled values of FBBT, needed in BBT model
|
||||
fbbtbot = FBBTRBOT_i * (1.0 + STFBBTBOT_i * (tkd - tkr));
|
||||
fbbtsti = FBBTRSTI_i * (1.0 + STFBBTSTI_i * (tkd - tkr));
|
||||
fbbtgat = FBBTRGAT_i * (1.0 + STFBBTGAT_i * (tkd - tkr));
|
||||
fbbtbot = `CLIP_LOW(fbbtbot, 0.0);
|
||||
fbbtsti = `CLIP_LOW(fbbtsti, 0.0);
|
||||
fbbtgat = `CLIP_LOW(fbbtgat, 0.0);
|
||||
|
||||
// values of fstop, needed in avalanche/breakdown model
|
||||
alphaav = 1.0 - 1.0 / FREV_i;
|
||||
fstopbot = 1.0 / (1.0 - pow(alphaav, PBRBOT_i));
|
||||
fstopsti = 1.0 / (1.0 - pow(alphaav, PBRSTI_i));
|
||||
fstopgat = 1.0 / (1.0 - pow(alphaav, PBRGAT_i));
|
||||
|
||||
// inverse values of breakdown voltages, needed in avalanche/breakdown model
|
||||
VBRinvbot = 1.0 / VBRBOT_i;
|
||||
VBRinvsti = 1.0 / VBRSTI_i;
|
||||
VBRinvgat = 1.0 / VBRGAT_i;
|
||||
|
||||
// slopes for linear extrapolation close to and beyond breakdown, needed in avalanche/breakdown model
|
||||
slopebot = -(fstopbot * fstopbot * pow(alphaav, (PBRBOT_i - 1.0))) * PBRBOT_i * VBRinvbot;
|
||||
slopesti = -(fstopsti * fstopsti * pow(alphaav, (PBRSTI_i - 1.0))) * PBRSTI_i * VBRinvsti;
|
||||
slopegat = -(fstopgat * fstopgat * pow(alphaav, (PBRGAT_i - 1.0))) * PBRGAT_i * VBRinvgat;
|
||||
|
||||
`ifdef JUNCAP_StandAlone
|
||||
// do nothing
|
||||
`else // JUNCAP_StandAlone
|
||||
phigrbot_d = PHIGBOTD_i + deltaphigr;
|
||||
phigrsti_d = PHIGSTID_i + deltaphigr;
|
||||
phigrgat_d = PHIGGATD_i + deltaphigr;
|
||||
|
||||
phigdbot_d = PHIGBOTD_i + deltaphigd;
|
||||
phigdsti_d = PHIGSTID_i + deltaphigd;
|
||||
phigdgat_d = PHIGGATD_i + deltaphigd;
|
||||
|
||||
ftdbot_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrbot_d * phitrinv) - (phigdbot_d * phitdinv)));
|
||||
ftdsti_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrsti_d * phitrinv) - (phigdsti_d * phitdinv)));
|
||||
ftdgat_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrgat_d * phitrinv) - (phigdgat_d * phitdinv)));
|
||||
|
||||
idsatbot_d = IDSATRBOTD_i * ftdbot_d * ftdbot_d;
|
||||
idsatsti_d = IDSATRSTID_i * ftdsti_d * ftdsti_d;
|
||||
idsatgat_d = IDSATRGATD_i * ftdgat_d * ftdgat_d;
|
||||
|
||||
ubibot_d = VBIRBOTD_i * auxt - 2.0 * phitd * ln(ftdbot_d);
|
||||
ubisti_d = VBIRSTID_i * auxt - 2.0 * phitd * ln(ftdsti_d);
|
||||
ubigat_d = VBIRGATD_i * auxt - 2.0 * phitd * ln(ftdgat_d);
|
||||
|
||||
vbibot_d = ubibot_d + phitd * ln(1.0 + exp((`vbilow - ubibot_d) * phitdinv));
|
||||
vbisti_d = ubisti_d + phitd * ln(1.0 + exp((`vbilow - ubisti_d) * phitdinv));
|
||||
vbigat_d = ubigat_d + phitd * ln(1.0 + exp((`vbilow - ubigat_d) * phitdinv));
|
||||
|
||||
vbiinvbot_d = 1.0 / vbibot_d;
|
||||
vbiinvsti_d = 1.0 / vbisti_d;
|
||||
vbiinvgat_d = 1.0 / vbigat_d;
|
||||
|
||||
one_minus_PBOT_d = 1.0 - PBOTD_i;
|
||||
one_minus_PSTI_d = 1.0 - PSTID_i;
|
||||
one_minus_PGAT_d = 1.0 - PGATD_i;
|
||||
|
||||
one_over_one_minus_PBOT_d = 1.0 / one_minus_PBOT_d;
|
||||
one_over_one_minus_PSTI_d = 1.0 / one_minus_PSTI_d;
|
||||
one_over_one_minus_PGAT_d = 1.0 / one_minus_PGAT_d;
|
||||
|
||||
cjobot_d = CJORBOTD_i * pow((VBIRBOTD_i * vbiinvbot_d), PBOTD_i);
|
||||
cjosti_d = CJORSTID_i * pow((VBIRSTID_i * vbiinvsti_d), PSTID_i);
|
||||
cjogat_d = CJORGATD_i * pow((VBIRGATD_i * vbiinvgat_d), PGATD_i);
|
||||
|
||||
qprefbot_d = cjobot_d * vbibot_d * one_over_one_minus_PBOT_d;
|
||||
qprefsti_d = cjosti_d * vbisti_d * one_over_one_minus_PSTI_d;
|
||||
qprefgat_d = cjogat_d * vbigat_d * one_over_one_minus_PGAT_d;
|
||||
|
||||
qpref2bot_d = `a * cjobot_d;
|
||||
qpref2sti_d = `a * cjosti_d;
|
||||
qpref2gat_d = `a * cjogat_d;
|
||||
|
||||
wdepnulrbot_d = EPSSI / CJORBOTD_i;
|
||||
wdepnulrsti_d = XJUNSTID_i * EPSSI / CJORSTID_i;
|
||||
wdepnulrgat_d = XJUNGATD_i * EPSSI / CJORGATD_i;
|
||||
|
||||
wdepnulrinvbot_d = 1.0 / wdepnulrbot_d;
|
||||
wdepnulrinvsti_d = 1.0 / wdepnulrsti_d;
|
||||
wdepnulrinvgat_d = 1.0 / wdepnulrgat_d;
|
||||
|
||||
VBIRBOTinv_d = 1.0 / VBIRBOTD_i;
|
||||
VBIRSTIinv_d = 1.0 / VBIRSTID_i;
|
||||
VBIRGATinv_d = 1.0 / VBIRGATD_i;
|
||||
|
||||
deltaEbot_d = max(0.5 * phigdbot_d, phitd);
|
||||
deltaEsti_d = max(0.5 * phigdsti_d, phitd);
|
||||
deltaEgat_d = max(0.5 * phigdgat_d, phitd);
|
||||
|
||||
atatbot_d = deltaEbot_d * phitdinv;
|
||||
atatsti_d = deltaEsti_d * phitdinv;
|
||||
atatgat_d = deltaEgat_d * phitdinv;
|
||||
|
||||
btatpartbot_d = sqrt(32.0 * MEFFTATBOTD_i * `MELE * `QELE * (deltaEbot_d * deltaEbot_d * deltaEbot_d)) / (3.0 * `HBAR);
|
||||
btatpartsti_d = sqrt(32.0 * MEFFTATSTID_i * `MELE * `QELE * (deltaEsti_d * deltaEsti_d * deltaEsti_d)) / (3.0 * `HBAR);
|
||||
btatpartgat_d = sqrt(32.0 * MEFFTATGATD_i * `MELE * `QELE * (deltaEgat_d * deltaEgat_d * deltaEgat_d)) / (3.0 * `HBAR);
|
||||
|
||||
fbbtbot_d = FBBTRBOTD_i * (1.0 + STFBBTBOTD_i * (tkd - tkr));
|
||||
fbbtsti_d = FBBTRSTID_i * (1.0 + STFBBTSTID_i * (tkd - tkr));
|
||||
fbbtgat_d = FBBTRGATD_i * (1.0 + STFBBTGATD_i * (tkd - tkr));
|
||||
fbbtbot_d = `CLIP_LOW(fbbtbot_d, 0.0);
|
||||
fbbtsti_d = `CLIP_LOW(fbbtsti_d, 0.0);
|
||||
fbbtgat_d = `CLIP_LOW(fbbtgat_d, 0.0);
|
||||
|
||||
fstopbot_d = 1.0 / (1.0 - pow(alphaav, PBRBOTD_i));
|
||||
fstopsti_d = 1.0 / (1.0 - pow(alphaav, PBRSTID_i));
|
||||
fstopgat_d = 1.0 / (1.0 - pow(alphaav, PBRGATD_i));
|
||||
|
||||
VBRinvbot_d = 1.0 / VBRBOTD_i;
|
||||
VBRinvsti_d = 1.0 / VBRSTID_i;
|
||||
VBRinvgat_d = 1.0 / VBRGATD_i;
|
||||
|
||||
slopebot_d = -(fstopbot_d * fstopbot_d * pow(alphaav, (PBRBOTD_i - 1.0))) * PBRBOTD_i * VBRinvbot_d;
|
||||
slopesti_d = -(fstopsti_d * fstopsti_d * pow(alphaav, (PBRSTID_i - 1.0))) * PBRSTID_i * VBRinvsti_d;
|
||||
slopegat_d = -(fstopgat_d * fstopgat_d * pow(alphaav, (PBRGATD_i - 1.0))) * PBRGATD_i * VBRinvgat_d;
|
||||
`endif // JUNCAP_StandAlone
|
||||
|
|
@ -0,0 +1,471 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: JUNCAP200_macrodefs.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 200.6.0, April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
///////////////////////////////////////////
|
||||
//
|
||||
// Macros and constants used in JUNCAP2
|
||||
//
|
||||
///////////////////////////////////////////
|
||||
|
||||
// Other constants
|
||||
`define MINTEMP -2.5e2
|
||||
`define vbilow 5.0e-2
|
||||
`define a 2.0
|
||||
`define epsch 0.1
|
||||
`define dvbi 5.0e-2
|
||||
`define epsav 1.0e-6
|
||||
`define vbrmax 1.0e3
|
||||
`define vmaxlarge 1.0e8
|
||||
`define aerfc 0.29214664
|
||||
`define twothirds 0.666666666666667
|
||||
|
||||
// Clipping values
|
||||
`define levelnumber 2.0e2
|
||||
`define AB_cliplow 0.0
|
||||
`define LS_cliplow 0.0
|
||||
`define LG_cliplow 0.0
|
||||
`define MULT_cliplow 0.0
|
||||
`define TRJ_cliplow `MINTEMP
|
||||
`define IMAX_cliplow 1.0e-12
|
||||
`define FREV_cliplow 1.0e1
|
||||
`define FREV_cliphigh 1.0e10
|
||||
`define IFACTOR_cliplow 0.0
|
||||
`define CFACTOR_cliplow 0.0
|
||||
`define CJORBOT_cliplow 1.0e-12
|
||||
`define CJORSTI_cliplow 1.0e-18
|
||||
`define CJORGAT_cliplow 1.0e-18
|
||||
`define VBIR_cliplow `vbilow
|
||||
`define P_cliplow 5.0e-2
|
||||
`define P_cliphigh 0.95
|
||||
`define IDSATR_cliplow 0.0
|
||||
`define CSRH_cliplow 0.0
|
||||
`define XJUN_cliplow 1.0e-9
|
||||
`define CTAT_cliplow 0.0
|
||||
`define MEFFTAT_cliplow 1.0e-2
|
||||
`define CBBT_cliplow 0.0
|
||||
`define VBR_cliplow 0.1
|
||||
`define PBR_cliplow 0.1
|
||||
`define VJUNREF_cliplow 0.5
|
||||
`define FJUNQ_cliplow 0.0
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Macro definitions.
|
||||
//
|
||||
// Note that because at present locally scoped variables
|
||||
// can only be in named blocks, the intermediate variables
|
||||
// used in the macros below must be explicitly declared
|
||||
// as variables.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Variable declarations of variables that need to be *local* in juncap-express initialization
|
||||
|
||||
//`define LocalGlobalVars \
|
||||
// /* 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 calculated outside macro "juncapfunction", voltage-dependent part */ \
|
||||
// real idmult, vj, z, zinv, two_psistar, vjlim, vjsrh, vbbt, vav; \
|
||||
// \
|
||||
// /* 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; \
|
||||
// real wgamma, wtat, ktat, ltat, mtat, xerfc, erfctimesexpmtat, gammamax; \
|
||||
// real ibbt, Fmaxr; \
|
||||
// real fbreakdown;
|
||||
|
||||
// Instance parameter dependent initialization
|
||||
`define JuncapInitInstance(AB_i, LS_i, LG_i, idsatbot, idsatsti, idsatgat, vbibot, vbisti, vbigat, PBOT_i, PSTI_i, PGAT_i, VBIRBOT_i, VBIRSTI_i, VBIRGAT_i, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \
|
||||
if (idsatbot * AB_i > 0.0) begin \
|
||||
vmaxbot = phitd * ln(IMAX_i / (idsatbot * AB_i) + 1.0); \
|
||||
end else begin \
|
||||
vmaxbot = `vmaxlarge; \
|
||||
end \
|
||||
if (idsatsti * LS_i > 0.0) begin \
|
||||
vmaxsti = phitd * ln(IMAX_i / (idsatsti * LS_i) + 1.0); \
|
||||
end else begin \
|
||||
vmaxsti = `vmaxlarge; \
|
||||
end \
|
||||
if (idsatgat * LG_i > 0.0) begin \
|
||||
vmaxgat = phitd * ln(IMAX_i / (idsatgat * LG_i) + 1.0); \
|
||||
end else begin \
|
||||
vmaxgat = `vmaxlarge; \
|
||||
end \
|
||||
VMAX = min(min(vmaxbot, vmaxsti), vmaxgat); \
|
||||
`expl(VMAX * phitdinv, exp_VMAX_over_phitd) \
|
||||
\
|
||||
/* determination of minimum value of the relevant built-in voltages */ \
|
||||
/* and determination of limiting value of conditioned voltage for BBT calculation */ \
|
||||
vbibot2 = vbibot; \
|
||||
vbisti2 = vbisti; \
|
||||
vbigat2 = vbigat; \
|
||||
pbot2 = PBOT_i; \
|
||||
psti2 = PSTI_i; \
|
||||
pgat2 = PGAT_i; \
|
||||
vbibot2r = VBIRBOT_i; \
|
||||
vbisti2r = VBIRSTI_i; \
|
||||
vbigat2r = VBIRGAT_i; \
|
||||
if (AB_i == 0.0) begin \
|
||||
vbibot2 = vbisti + vbigat; \
|
||||
pbot2 = 0.9 * min(PSTI_i, PGAT_i); \
|
||||
vbibot2r = VBIRSTI_i + VBIRGAT_i; \
|
||||
end \
|
||||
if (LS_i == 0.0) begin \
|
||||
vbisti2 = vbibot + vbigat; \
|
||||
psti2 = 0.9 * min(PBOT_i, PGAT_i); \
|
||||
vbisti2r = VBIRBOT_i + VBIRGAT_i; \
|
||||
end \
|
||||
if (LG_i == 0.0) begin \
|
||||
vbigat2 = vbibot + vbisti; \
|
||||
pgat2 = 0.9 * min(PBOT_i, PSTI_i); \
|
||||
vbigat2r = VBIRBOT_i + VBIRSTI_i; \
|
||||
end \
|
||||
vbimin = min(min(vbibot2, vbisti2), vbigat2); \
|
||||
vch = vbimin * `epsch; \
|
||||
pmax = max(max(pbot2, psti2), pgat2); \
|
||||
vfmin = vbimin * (1.0 - (pow(`a, (-1.0 / (pmax))))); \
|
||||
vbbtlim = min(min(vbibot2r, vbisti2r), vbigat2r) - `dvbi;
|
||||
|
||||
|
||||
// Special power-functions
|
||||
|
||||
`define mypower(x,power,result) \
|
||||
if (power == 0.5) begin \
|
||||
result = sqrt(x); \
|
||||
end else begin \
|
||||
result = pow(x, power); \
|
||||
end
|
||||
|
||||
`define mypower2(x,power,result) \
|
||||
if (power == -1.0) begin \
|
||||
result = 1.0 / (x); \
|
||||
end else begin \
|
||||
result = pow(x, power); \
|
||||
end
|
||||
|
||||
`define mypower3(x,power,result) \
|
||||
if (power == 4.0) begin \
|
||||
result = (x) * (x) * (x) * (x); \
|
||||
end else begin \
|
||||
result = pow(abs(x), power); \
|
||||
end
|
||||
|
||||
// Smoothing functions
|
||||
`define hypfunction2(x,x0,eps,hyp2) \
|
||||
hyp2 = 0.5 * ((x) + (x0) - sqrt(((x) - (x0)) * ((x) - (x0)) + 4.0 * (eps) * (eps)));
|
||||
|
||||
`define hypfunction5(x,x0,eps,hyp5) \
|
||||
h1 = 4.0 * (eps) * (eps); \
|
||||
h2 = (eps) / (x0); \
|
||||
h2d = (x) + (eps) * h2; \
|
||||
h3 = (x0) + h2d; \
|
||||
h4 = (x0) - h2d; \
|
||||
h5 = sqrt(h4 * h4 + h1); \
|
||||
hyp5 = 2.0 * ((x) * (x0) / (h3 + h5));
|
||||
|
||||
|
||||
// A special function used to calculate TAT-currents,
|
||||
// including an approximation of the erfc-function
|
||||
|
||||
`define calcerfcexpmtat(y,m,result) \
|
||||
ysq = y * y; \
|
||||
if (y > 0.0) begin \
|
||||
terfc = 1.0 / (1.0 + perfc * y); \
|
||||
end else begin \
|
||||
terfc = 1.0 / (1.0 - perfc * y); \
|
||||
end \
|
||||
`expl_low(-ysq + m, tmp) \
|
||||
erfcpos = (`aerfc * terfc + berfc * (terfc * terfc) + cerfc * (terfc * terfc * terfc)) * tmp; \
|
||||
if (y > 0.0) begin \
|
||||
result = erfcpos; \
|
||||
end else begin\
|
||||
`expl_low(m, tmp) \
|
||||
result = 2.0 * tmp - erfcpos; \
|
||||
end
|
||||
|
||||
// This is the main function of the JUNCAP2-model. It returns the current and charge
|
||||
// for a single diode
|
||||
`define juncapfunction(VAK,qpref,qpref2,vbiinv,one_minus_P,idsat,CSRH,CTAT,vbi,wdepnulr,VBIRinv,P,ftd,btatpart,atat,one_over_one_minus_P,CBBT,VBIR,wdepnulrinv,fbbt,VBR,VBRinv,PBR,fstop,slope,Ijprime,Qjprime) \
|
||||
`mypower((1.0 - vj * vbiinv), one_minus_P, tmp) \
|
||||
Qjprime = CFACTOR_i * (qpref * (1.0 - tmp) + qpref2 * (VAK - vj)); \
|
||||
id = idsat * idmult; \
|
||||
if ((CSRH == 0.0) && (CTAT == 0.0)) begin \
|
||||
isrh = 0.0; \
|
||||
end else begin \
|
||||
vbi_minus_vjsrh = vbi-vjsrh; \
|
||||
wsrhstep = 1.0 - sqrt(1.0 - two_psistar / vbi_minus_vjsrh); \
|
||||
if (P == 0.5) begin \
|
||||
dwsrh = 0.0; \
|
||||
end else begin \
|
||||
dwsrh = ((wsrhstep * wsrhstep * ln(wsrhstep) / (1.0 - wsrhstep)) + wsrhstep) * (1.0 - 2.0 * P); \
|
||||
end \
|
||||
wsrh = wsrhstep + dwsrh; \
|
||||
`mypower(vbi_minus_vjsrh * VBIRinv, P, tmp) \
|
||||
wdep = wdepnulr * tmp; \
|
||||
asrh = ftd * ((zinv - 1.0) * wdep); \
|
||||
isrh = CSRH * (asrh * wsrh); \
|
||||
end \
|
||||
if (CTAT == 0.0) begin \
|
||||
itat = 0.0; \
|
||||
end else begin \
|
||||
btat = btatpart * ((wdep * one_minus_P) / vbi_minus_vjsrh); \
|
||||
twoatatoverthreebtat = (`twothirds * atat) / btat; \
|
||||
umaxbeforelimiting = twoatatoverthreebtat * twoatatoverthreebtat; \
|
||||
umax = sqrt(umaxbeforelimiting * umaxbeforelimiting / (umaxbeforelimiting * umaxbeforelimiting + 1.0)); \
|
||||
sqrtumax = sqrt(abs(umax)); \
|
||||
umaxpoweronepointfive = umax * sqrtumax; \
|
||||
`mypower2((1.0 + btat * umaxpoweronepointfive), (-P * one_over_one_minus_P), wgamma) \
|
||||
wtat = wsrh * wgamma / (wsrh + wgamma); \
|
||||
ktat = sqrt(0.375 * (btat / sqrtumax)); \
|
||||
ltat = 2.0 * (twoatatoverthreebtat * sqrtumax) - umax; \
|
||||
mtat = atat * twoatatoverthreebtat * sqrtumax - atat * umax + 0.5 * (btat * umaxpoweronepointfive); \
|
||||
xerfc = (ltat - 1.0) * ktat; \
|
||||
`calcerfcexpmtat(xerfc, mtat, erfctimesexpmtat) \
|
||||
gammamax = `SQRTPI * 0.5 * (atat * erfctimesexpmtat / ktat); \
|
||||
itat = CTAT * (asrh * gammamax * wtat); \
|
||||
end \
|
||||
if (CBBT == 0.0) begin \
|
||||
ibbt = 0.0; \
|
||||
end else begin \
|
||||
`mypower(((VBIR - vbbt) * VBIRinv), P, tmp) \
|
||||
Fmaxr = one_over_one_minus_P * ((VBIR - vbbt) * wdepnulrinv / tmp); \
|
||||
`expl(-fbbt / Fmaxr, tmp) \
|
||||
ibbt = CBBT * (VAK * Fmaxr * Fmaxr * tmp); \
|
||||
end \
|
||||
if (VBR > `vbrmax) begin \
|
||||
fbreakdown = 1.0; \
|
||||
end else begin \
|
||||
if (vav > -alphaav * VBR) begin \
|
||||
`mypower3(vav * VBRinv, PBR, tmp) \
|
||||
fbreakdown = 1.0 / (1.0 - tmp); \
|
||||
end else begin \
|
||||
fbreakdown = fstop + (vav + alphaav * VBR) * slope; \
|
||||
end \
|
||||
end \
|
||||
Ijprime = IFACTOR_i * (id + isrh + itat + ibbt) * fbreakdown;
|
||||
|
||||
|
||||
// The following code is written as a macro because the naming of the instance parameters is
|
||||
// different for JUNCAP2 stand-alone and JUNCAP2-in-PSP: AB, LS, LG for JUNCAP2 stand-alone,
|
||||
// ABSOURCE, LSSOURCE, LGSOURCE for source junction in PSP and ABDRAIN, LSDRAIN, LGDRAIN for
|
||||
// drain junction in PSP
|
||||
`define juncapcommon(V, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
|
||||
vbbt = 0.0; \
|
||||
two_psistar = 0.0; \
|
||||
if ( !( ((AB_i) == 0.0) && ((LS_i) == 0.0) && ((LG_i) == 0.0) ) ) begin \
|
||||
`hypfunction5(V, vfmin, vch, vj) \
|
||||
if (V < VMAX) begin \
|
||||
`expl(0.5 * (V * phitdinv), zinv) \
|
||||
idmult = zinv * zinv; \
|
||||
end else begin \
|
||||
idmult = (1.0 + (V - VMAX) * phitdinv) * exp_VMAX_over_phitd; \
|
||||
zinv = sqrt(idmult); \
|
||||
end \
|
||||
idmult = idmult - 1.0; \
|
||||
z = 1.0 / zinv; \
|
||||
if (V > 0.0) begin \
|
||||
two_psistar = 2.0 * (phitd * ln(2.0 + z + sqrt((z + 1.0) * (z + 3.0)))); \
|
||||
end else begin \
|
||||
two_psistar = -V + 2.0 * (phitd * ln(2.0 * zinv + 1.0 + sqrt((1.0 + zinv) * (1.0 + 3.0 * zinv)))); \
|
||||
end \
|
||||
vjlim = vbimin - two_psistar; \
|
||||
`hypfunction2(V, vjlim, phitd, vjsrh) \
|
||||
`hypfunction2(V, vbbtlim, phitr, vbbt) \
|
||||
`hypfunction2(V, 0.0, `epsav, vav) \
|
||||
end \
|
||||
if ((AB_i) == 0.0) begin \
|
||||
ijunbot = 0.0; \
|
||||
qjunbot = 0.0; \
|
||||
end else begin \
|
||||
`juncapfunction(V, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, ijunbot, qjunbot) \
|
||||
end \
|
||||
if ((LS_i) == 0.0) begin \
|
||||
ijunsti = 0.0; \
|
||||
qjunsti = 0.0; \
|
||||
end else begin \
|
||||
`juncapfunction(V, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, ijunsti, qjunsti) \
|
||||
end \
|
||||
if ((LG_i) == 0.0) begin \
|
||||
ijungat = 0.0; \
|
||||
qjungat = 0.0; \
|
||||
end else begin \
|
||||
`juncapfunction(V, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, ijungat, qjungat) \
|
||||
end
|
||||
|
||||
//============================================================================================================
|
||||
// JUNCAP-express
|
||||
//
|
||||
// The macros below are used in the express-version of JUNCAP2
|
||||
//============================================================================================================
|
||||
|
||||
`define relerr 1.0e-3
|
||||
`define P1(x) ((x) + 1.0)
|
||||
|
||||
`define expll(x, xlow, expxlow, xhigh, expxhigh) \
|
||||
((x) < (xlow)) ? (expxlow) / `P1((xlow) - (x)) : (((x) > (xhigh)) ? (expxhigh) * `P1((x) - (xhigh)) : exp(x))
|
||||
|
||||
|
||||
// The "JuncapExpressInit"-macro below is split into three parts, as some verilog-A compilers cannot handle
|
||||
// macros beyond a certain size. Moreover, it is useful to limit the list of input and output variables.
|
||||
|
||||
// Part 1
|
||||
`define JuncapExpressInit1(AB_i, LS_i, LG_i, VJUNREF_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \
|
||||
FRACNA = 0.4; \
|
||||
FRACNB = 0.65; \
|
||||
FRACI = 0.8; \
|
||||
/* Sample voltages */ \
|
||||
V1 = -FRACNA * VJUNREF_i; \
|
||||
V2 = -FRACNB * VJUNREF_i; \
|
||||
V3 = -FRACI * VJUNREF_i; \
|
||||
V4 = 0.1; \
|
||||
V5 = 0.2; \
|
||||
/* evaluate full JUNCAP-model at five voltages */ \
|
||||
`juncapcommon(V1, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
|
||||
I1 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \
|
||||
`juncapcommon(V2, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
|
||||
I2 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \
|
||||
`juncapcommon(V3, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
|
||||
I3 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat;
|
||||
|
||||
// Part 2
|
||||
`define JuncapExpressInit2(AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \
|
||||
/* forward currents */ \
|
||||
`juncapcommon(V4, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
|
||||
I4 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \
|
||||
`juncapcommon(V5, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
|
||||
I5 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat;
|
||||
|
||||
// Part 3
|
||||
`define JuncapExpressInit3(AB_i, LS_i, LG_i, idsatbot, idsatsti, idsatgat, ISATFOR1, MFOR1, ISATFOR2, MFOR2, ISATREV, MREV, m0flag) \
|
||||
/* compute internal parameters from these five (I,V)-values */ \
|
||||
ISATFOR1 = AB_i * idsatbot + LS_i * idsatsti + LG_i * idsatgat; \
|
||||
I4_cor = I4 - ISATFOR1 * (exp(V4 * phitdinv * MFOR1) - 1.0); \
|
||||
I5_cor = I5 - ISATFOR1 * (exp(V5 * phitdinv * MFOR1) - 1.0); \
|
||||
if ( !( ((AB_i) == 0.0) && ((LS_i) == 0.0) && ((LG_i) == 0.0) ) ) begin \
|
||||
if ((I4 > 0.0) && (I5 > 0.0)) begin \
|
||||
if ((((I4_cor / I4) > `relerr) || ((I5_cor / I5) > `relerr)) && (I4_cor > 0.0) && (I5_cor > 0.0) && (I5_cor > I4_cor)) begin \
|
||||
alphaje = I4_cor / I5_cor; \
|
||||
MFOR2 = phitd * ln(alphaje) / (V4 - V5); \
|
||||
ISATFOR2 = I4_cor / (exp(V4 * phitdinv * MFOR2) - 1.0); \
|
||||
end \
|
||||
end \
|
||||
I1_cor = I1 - ISATFOR1 * (exp(V1 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V1 * phitdinv * MFOR2) - 1.0); \
|
||||
I2_cor = I2 - ISATFOR1 * (exp(V2 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V2 * phitdinv * MFOR2) - 1.0); \
|
||||
I3_cor = I3 - ISATFOR1 * (exp(V3 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V3 * phitdinv * MFOR2) - 1.0); \
|
||||
if ((I1 < 0.0) && (I2 < 0.0) && (I3 < 0.0)) begin \
|
||||
if ((((I1_cor / I1) > `relerr) || ((I2_cor / I2) > `relerr) || ((I3_cor / I3) > `relerr)) \
|
||||
&& (I1_cor < 0.0) && (I2_cor < 0.0) && (I3_cor < 0.0)) begin \
|
||||
alphaje = I1_cor / I2_cor; \
|
||||
m0_rev = -phitd * ln(alphaje) / (V1 - V2); /* zeroth order approximation */ \
|
||||
tt0 = V2 / (V2 - V1); \
|
||||
tt1 = phitd * (alphaje - 1.0) * (pow(alphaje, tt0) - 1.0); \
|
||||
tt0 = V1 / (V1 - V2); \
|
||||
tt2 = pow(alphaje, tt0) * (V2 - V1) + alphaje * V1 - V2; \
|
||||
mcor_rev = tt1 / tt2; /* first order Newton correction */ \
|
||||
MREV = m0_rev + mcor_rev; \
|
||||
if (abs(V3 * phitdinv * MREV) < 1.0e-6) begin \
|
||||
/* Taylor approximation needed */ \
|
||||
/* Note: ISATREV and MREV have different meaning in this situation!! */ \
|
||||
m0flag = 1.0; \
|
||||
ISATREV = I3_cor * (1.0 / V3 + 0.5 * phitdinv * MREV); \
|
||||
MREV = -0.5 * I3_cor * MREV * phitdinv / V3; \
|
||||
end else begin \
|
||||
m0flag = 0.0; \
|
||||
ISATREV = -I3_cor / (exp(-V3 * phitdinv * MREV) - 1.0); \
|
||||
end \
|
||||
end \
|
||||
end \
|
||||
end
|
||||
|
||||
// Part 4
|
||||
`define JuncapExpressInit4(AB_i, LS_i, LG_i, FJUNQ_i, cjobot, cjosti, cjogat, zflagbot, zflagsti, zflaggat) \
|
||||
/* charge model initialization */ \
|
||||
zfrac = FJUNQ_i * (AB_i * cjobot + LS_i * cjosti + LG_i * cjogat); \
|
||||
if ((AB_i * cjobot) <= zfrac) begin \
|
||||
zflagbot = 0.0; \
|
||||
end \
|
||||
if ((LS_i * cjosti) <= zfrac) begin \
|
||||
zflagsti = 0.0; \
|
||||
end \
|
||||
if ((LG_i * cjogat) <= zfrac) begin \
|
||||
zflaggat = 0.0; \
|
||||
end
|
||||
|
||||
// Part 5
|
||||
`define JuncapExpressInit5(AB_i, LS_i, LG_i, ISATFOR1, ISATFOR2, ISATREV, xhighf1, expxhf1, xhighf2, expxhf2, xhighr, expxhr) \
|
||||
/* calculate limits beyond which exponentials are linearly extrapolated */ \
|
||||
if ( !( ((AB_i) == 0.0) && ((LS_i) == 0.0) && ((LG_i) == 0.0) ) ) begin \
|
||||
xhighf1 = ln(0.5 * IMAX_i / (ISATFOR1 + 1.0e-21)); \
|
||||
xhighf2 = ln(0.5 * IMAX_i / (ISATFOR2 + 1.0e-21)); \
|
||||
xhighr = ln(0.5 * IMAX_i / (abs(ISATREV) + 1.0e-21)); \
|
||||
end \
|
||||
xhighf1 = min(xhighf1, `se05); \
|
||||
expxhf1 = exp(xhighf1); \
|
||||
xhighf2 = min(xhighf2, `se05); \
|
||||
expxhf2 = exp(xhighf2); \
|
||||
xhighr = min(xhighr, `se05); \
|
||||
expxhr = exp(xhighr);
|
||||
|
||||
`define JuncapExpressCurrent(V, MFOR1, ISATFOR1, MFOR2, ISATFOR2, MREV, ISATREV, m0flag, xhighf1, expxhf1, xhighf2, expxhf2, xhighr, expxhr, ijun) \
|
||||
tm0 = V * phitdinv * MFOR1; \
|
||||
tm1 = `expll(tm0, -`se05, `ke05, xhighf1, expxhf1); \
|
||||
ijunfor1 = ISATFOR1 * (tm1 - 1.0); \
|
||||
tm0 = V * phitdinv * MFOR2; \
|
||||
tm1 = `expll(tm0, -`se05, `ke05, xhighf2, expxhf2); \
|
||||
ijunfor2 = ISATFOR2 * (tm1 - 1.0); \
|
||||
ijunrev = 0.0; \
|
||||
if (m0flag > 0.0) begin \
|
||||
ijunrev = V * (ISATREV + V * MREV); \
|
||||
end else begin \
|
||||
tm0 = -V * phitdinv * MREV; \
|
||||
tm1 = `expll(tm0, -`se05, `ke05, xhighr, expxhr); \
|
||||
ijunrev = -ISATREV * (tm1 - 1.0); \
|
||||
end \
|
||||
ijun = ijunfor1 + ijunfor2 + ijunrev;
|
||||
|
||||
`define JuncapExpressCharge(V, AB_i, LS_i, LG_i, qprefbot, qprefsti, qprefgat, qpref2bot, qpref2sti, qpref2gat, vbiinvbot, vbiinvsti, vbiinvgat, one_minus_PBOT, one_minus_PSTI, one_minus_PGAT, vfmin, vch, zflagbot, zflagsti, zflaggat, qjunbot, qjunsti, qjungat) \
|
||||
tmpv = 0.0; \
|
||||
vjv = 0.0; \
|
||||
`hypfunction5(V, vfmin, vch, vjv) \
|
||||
if (zflagbot > 0.5) begin \
|
||||
`mypower((1.0 - vjv * vbiinvbot), one_minus_PBOT, tmpv) \
|
||||
qjunbot = qprefbot * (1.0 - tmpv) + qpref2bot * (V - vjv); \
|
||||
end \
|
||||
if (zflagsti > 0.5) begin \
|
||||
`mypower((1.0 - vjv * vbiinvsti), one_minus_PSTI, tmpv) \
|
||||
qjunsti = qprefsti * (1.0 - tmpv) + qpref2sti * (V - vjv); \
|
||||
end \
|
||||
if (zflaggat > 0.5) begin \
|
||||
`mypower((1.0 - vjv * vbiinvgat), one_minus_PGAT, tmpv) \
|
||||
qjungat = qprefgat * (1.0 - tmpv) + qpref2gat * (V - vjv); \
|
||||
end
|
||||
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: JUNCAP200_parlist.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 200.6.0, April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// JUNCAP2 - Reduced parameter list
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
`MPRco(IMAX ,1000.0 ,"A" ,`IMAX_cliplow ,inf ,"Maximum current up to which forward current behaves exponentially")
|
||||
`MPRco(TRJ ,21.0 ,"degC" ,`TRJ_cliplow ,inf ,"Reference temperature")
|
||||
`MPRcc(FREV ,1.0e3 ,"" ,`FREV_cliplow ,`FREV_cliphigh ,"Coefficient for reverse breakdown current limitation")
|
||||
`IPRcz(IFACTOR ,1.0 ,"" ,"Multiplier for current")
|
||||
`IPRcz(CFACTOR ,1.0 ,"" ,"Multiplier for depletion capacitance")
|
||||
|
||||
// Parameters for source-bulk junction
|
||||
`ifdef JUNCAP_StandAlone
|
||||
`MPRco(CJORBOT ,1.0e-3 ,"Fm^-2" ,`CJORBOT_cliplow ,inf ,"Zero-bias capacitance per unit-of-area of bottom component")
|
||||
`MPRco(CJORSTI ,1.0e-9 ,"Fm^-1" ,`CJORSTI_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of STI-edge component")
|
||||
`MPRco(CJORGAT ,1.0e-9 ,"Fm^-1" ,`CJORGAT_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of gate-edge component")
|
||||
`MPRco(VBIRBOT ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of bottom component")
|
||||
`MPRco(VBIRSTI ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of STI-edge component")
|
||||
`MPRco(VBIRGAT ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of gate-edge component")
|
||||
`MPRcc(PBOT ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of bottom component")
|
||||
`MPRcc(PSTI ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of STI-edge component")
|
||||
`MPRcc(PGAT ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of gate-edge component")
|
||||
`MPRnb(PHIGBOT ,1.16 ,"V" ,"Zero-temperature bandgap voltage of bottom component")
|
||||
`MPRnb(PHIGSTI ,1.16 ,"V" ,"Zero-temperature bandgap voltage of STI-edge component")
|
||||
`MPRnb(PHIGGAT ,1.16 ,"V" ,"Zero-temperature bandgap voltage of gate-edge component")
|
||||
`MPRco(IDSATRBOT ,1.0e-12 ,"Am^-2" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of bottom component")
|
||||
`MPRco(IDSATRSTI ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of STI-edge component")
|
||||
`MPRco(IDSATRGAT ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of gate-edge component")
|
||||
`MPRco(CSRHBOT ,1.0e2 ,"Am^-3" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of bottom component")
|
||||
`MPRco(CSRHSTI ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of STI-edge component")
|
||||
`MPRco(CSRHGAT ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of gate-edge component")
|
||||
`MPRco(XJUNSTI ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of STI-edge component")
|
||||
`MPRco(XJUNGAT ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of gate-edge component")
|
||||
`MPRco(CTATBOT ,1.0e2 ,"Am^-3" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of bottom component")
|
||||
`MPRco(CTATSTI ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of STI-edge component")
|
||||
`MPRco(CTATGAT ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of gate-edge component")
|
||||
`MPRco(MEFFTATBOT ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of bottom component")
|
||||
`MPRco(MEFFTATSTI ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component")
|
||||
`MPRco(MEFFTATGAT ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component")
|
||||
`MPRco(CBBTBOT ,1.0e-12 ,"AV^-3" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of bottom component")
|
||||
`MPRco(CBBTSTI ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of STI-edge component")
|
||||
`MPRco(CBBTGAT ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of gate-edge component")
|
||||
`MPRnb(FBBTRBOT ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of bottom component")
|
||||
`MPRnb(FBBTRSTI ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of STI-edge component")
|
||||
`MPRnb(FBBTRGAT ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of gate-edge component")
|
||||
`MPRnb(STFBBTBOT ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of bottom component")
|
||||
`MPRnb(STFBBTSTI ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of STI-edge component")
|
||||
`MPRnb(STFBBTGAT ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of gate-edge component")
|
||||
`MPRco(VBRBOT ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of bottom component")
|
||||
`MPRco(VBRSTI ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of STI-edge component")
|
||||
`MPRco(VBRGAT ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of gate-edge component")
|
||||
`MPRco(PBRBOT ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of bottom component")
|
||||
`MPRco(PBRSTI ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of STI-edge component")
|
||||
`MPRco(PBRGAT ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of gate-edge component")
|
||||
`else // JUNCAP_StandAlone
|
||||
`MPRco(CJORBOT ,1.0e-3 ,"Fm^-2" ,`CJORBOT_cliplow ,inf ,"Zero-bias capacitance per unit-of-area of bottom component for source-bulk junction")
|
||||
`MPRco(CJORSTI ,1.0e-9 ,"Fm^-1" ,`CJORSTI_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of STI-edge component for source-bulk junction")
|
||||
`MPRco(CJORGAT ,1.0e-9 ,"Fm^-1" ,`CJORGAT_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of gate-edge component for source-bulk junction")
|
||||
`MPRco(VBIRBOT ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of bottom component for source-bulk junction")
|
||||
`MPRco(VBIRSTI ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of STI-edge component for source-bulk junction")
|
||||
`MPRco(VBIRGAT ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of gate-edge component for source-bulk junction")
|
||||
`MPRcc(PBOT ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of bottom component for source-bulk junction")
|
||||
`MPRcc(PSTI ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of STI-edge component for source-bulk junction")
|
||||
`MPRcc(PGAT ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of gate-edge component for source-bulk junction")
|
||||
`MPRnb(PHIGBOT ,1.16 ,"V" ,"Zero-temperature bandgap voltage of bottom component for source-bulk junction")
|
||||
`MPRnb(PHIGSTI ,1.16 ,"V" ,"Zero-temperature bandgap voltage of STI-edge component for source-bulk junction")
|
||||
`MPRnb(PHIGGAT ,1.16 ,"V" ,"Zero-temperature bandgap voltage of gate-edge component for source-bulk junction")
|
||||
`MPRco(IDSATRBOT ,1.0e-12 ,"Am^-2" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of bottom component for source-bulk junction")
|
||||
`MPRco(IDSATRSTI ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of STI-edge component for source-bulk junction")
|
||||
`MPRco(IDSATRGAT ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of gate-edge component for source-bulk junction")
|
||||
`MPRco(CSRHBOT ,1.0e2 ,"Am^-3" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of bottom component for source-bulk junction")
|
||||
`MPRco(CSRHSTI ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of STI-edge component for source-bulk junction")
|
||||
`MPRco(CSRHGAT ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of gate-edge component for source-bulk junction")
|
||||
`MPRco(XJUNSTI ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of STI-edge component for source-bulk junction")
|
||||
`MPRco(XJUNGAT ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of gate-edge component for source-bulk junction")
|
||||
`MPRco(CTATBOT ,1.0e2 ,"Am^-3" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of bottom component for source-bulk junction")
|
||||
`MPRco(CTATSTI ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of STI-edge component for source-bulk junction")
|
||||
`MPRco(CTATGAT ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of gate-edge component for source-bulk junction")
|
||||
`MPRco(MEFFTATBOT ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of bottom component for source-bulk junction")
|
||||
`MPRco(MEFFTATSTI ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component for source-bulk junction")
|
||||
`MPRco(MEFFTATGAT ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component for source-bulk junction")
|
||||
`MPRco(CBBTBOT ,1.0e-12 ,"AV^-3" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of bottom component for source-bulk junction")
|
||||
`MPRco(CBBTSTI ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of STI-edge component for source-bulk junction")
|
||||
`MPRco(CBBTGAT ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of gate-edge component for source-bulk junction")
|
||||
`MPRnb(FBBTRBOT ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of bottom component for source-bulk junction")
|
||||
`MPRnb(FBBTRSTI ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of STI-edge component for source-bulk junction")
|
||||
`MPRnb(FBBTRGAT ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of gate-edge component for source-bulk junction")
|
||||
`MPRnb(STFBBTBOT ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of bottom component for source-bulk junction")
|
||||
`MPRnb(STFBBTSTI ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of STI-edge component for source-bulk junction")
|
||||
`MPRnb(STFBBTGAT ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of gate-edge component for source-bulk junction")
|
||||
`MPRco(VBRBOT ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of bottom component for source-bulk junction")
|
||||
`MPRco(VBRSTI ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of STI-edge component for source-bulk junction")
|
||||
`MPRco(VBRGAT ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of gate-edge component for source-bulk junction")
|
||||
`MPRco(PBRBOT ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of bottom component for source-bulk junction")
|
||||
`MPRco(PBRSTI ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of STI-edge component for source-bulk junction")
|
||||
`MPRco(PBRGAT ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of gate-edge component for source-bulk junction")
|
||||
`endif // JUNCAP_StandAlone
|
||||
|
||||
// Parameters for drain-bulk junction
|
||||
`ifdef JUNCAP_StandAlone
|
||||
// do nothing
|
||||
`else // JUNCAP_StandAlone
|
||||
`MPRco(CJORBOTD ,1.0e-3 ,"Fm^-2" ,`CJORBOT_cliplow ,inf ,"Zero-bias capacitance per unit-of-area of bottom component for drain-bulk junction")
|
||||
`MPRco(CJORSTID ,1.0e-9 ,"Fm^-1" ,`CJORSTI_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of STI-edge component for drain-bulk junction")
|
||||
`MPRco(CJORGATD ,1.0e-9 ,"Fm^-1" ,`CJORGAT_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of gate-edge component for drain-bulk junction")
|
||||
`MPRco(VBIRBOTD ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of bottom component for drain-bulk junction")
|
||||
`MPRco(VBIRSTID ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of STI-edge component for drain-bulk junction")
|
||||
`MPRco(VBIRGATD ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of gate-edge component for drain-bulk junction")
|
||||
`MPRcc(PBOTD ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of bottom component for drain-bulk junction")
|
||||
`MPRcc(PSTID ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of STI-edge component for drain-bulk junction")
|
||||
`MPRcc(PGATD ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of gate-edge component for drain-bulk junction")
|
||||
`MPRnb(PHIGBOTD ,1.16 ,"V" ,"Zero-temperature bandgap voltage of bottom component for drain-bulk junction")
|
||||
`MPRnb(PHIGSTID ,1.16 ,"V" ,"Zero-temperature bandgap voltage of STI-edge component for drain-bulk junction")
|
||||
`MPRnb(PHIGGATD ,1.16 ,"V" ,"Zero-temperature bandgap voltage of gate-edge component for drain-bulk junction")
|
||||
`MPRco(IDSATRBOTD ,1.0e-12 ,"Am^-2" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of bottom component for drain-bulk junction")
|
||||
`MPRco(IDSATRSTID ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of STI-edge component for drain-bulk junction")
|
||||
`MPRco(IDSATRGATD ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of gate-edge component for drain-bulk junction")
|
||||
`MPRco(CSRHBOTD ,1.0e2 ,"Am^-3" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of bottom component for drain-bulk junction")
|
||||
`MPRco(CSRHSTID ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of STI-edge component for drain-bulk junction")
|
||||
`MPRco(CSRHGATD ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of gate-edge component for drain-bulk junction")
|
||||
`MPRco(XJUNSTID ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of STI-edge component for drain-bulk junction")
|
||||
`MPRco(XJUNGATD ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of gate-edge component for drain-bulk junction")
|
||||
`MPRco(CTATBOTD ,1.0e2 ,"Am^-3" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of bottom component for drain-bulk junction")
|
||||
`MPRco(CTATSTID ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of STI-edge component for drain-bulk junction")
|
||||
`MPRco(CTATGATD ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of gate-edge component for drain-bulk junction")
|
||||
`MPRco(MEFFTATBOTD ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of bottom component for drain-bulk junction")
|
||||
`MPRco(MEFFTATSTID ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component for drain-bulk junction")
|
||||
`MPRco(MEFFTATGATD ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component for drain-bulk junction")
|
||||
`MPRco(CBBTBOTD ,1.0e-12 ,"AV^-3" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of bottom component for drain-bulk junction")
|
||||
`MPRco(CBBTSTID ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of STI-edge component for drain-bulk junction")
|
||||
`MPRco(CBBTGATD ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of gate-edge component for drain-bulk junction")
|
||||
`MPRnb(FBBTRBOTD ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of bottom component for drain-bulk junction")
|
||||
`MPRnb(FBBTRSTID ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of STI-edge component for drain-bulk junction")
|
||||
`MPRnb(FBBTRGATD ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of gate-edge component for drain-bulk junction")
|
||||
`MPRnb(STFBBTBOTD ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of bottom component for drain-bulk junction")
|
||||
`MPRnb(STFBBTSTID ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of STI-edge component for drain-bulk junction")
|
||||
`MPRnb(STFBBTGATD ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of gate-edge component for drain-bulk junction")
|
||||
`MPRco(VBRBOTD ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of bottom component for drain-bulk junction")
|
||||
`MPRco(VBRSTID ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of STI-edge component for drain-bulk junction")
|
||||
`MPRco(VBRGATD ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of gate-edge component for drain-bulk junction")
|
||||
`MPRco(PBRBOTD ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of bottom component for drain-bulk junction")
|
||||
`MPRco(PBRSTID ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of STI-edge component for drain-bulk junction")
|
||||
`MPRco(PBRGATD ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of gate-edge component for drain-bulk junction")
|
||||
`endif // JUNCAP_StandAlone
|
||||
|
||||
// JUNCAP2-express parameters
|
||||
`MPRcc(SWJUNEXP ,0.0 ,"" ,0.0 ,1.0 ,"Flag for JUNCAP-express; 0=full model, 1=express model")
|
||||
`ifdef JUNCAP_StandAlone
|
||||
`MPRco(VJUNREF ,2.5 ,"V" ,`VJUNREF_cliplow ,inf ,"Typical maximum junction voltage; usually about 2*VSUP")
|
||||
`MPRco(FJUNQ ,0.03 ,"" ,`FJUNQ_cliplow ,inf ,"Fraction below which junction capacitance components are considered negligible")
|
||||
`else // JUNCAP_StandAlone
|
||||
`MPRco(VJUNREF ,2.5 ,"V" ,`VJUNREF_cliplow ,inf ,"Typical maximum source-bulk junction voltage; usually about 2*VSUP")
|
||||
`MPRco(FJUNQ ,0.03 ,"" ,`FJUNQ_cliplow ,inf ,"Fraction below which source-bulk junction capacitance components are considered negligible")
|
||||
`MPRco(VJUNREFD ,2.5 ,"V" ,`VJUNREF_cliplow ,inf ,"Typical maximum drain-bulk junction voltage; usually about 2*VSUP")
|
||||
`MPRco(FJUNQD ,0.03 ,"" ,`FJUNQ_cliplow ,inf ,"Fraction below which drain-bulk junction capacitance components are considered negligible")
|
||||
`endif // JUNCAP_StandAlone
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: JUNCAP200_varlist.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 200.6.0, April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
// declaration of clipped parameters
|
||||
real TRJ_i, IMAX_i, FREV_i, IFACTOR_i, CFACTOR_i;
|
||||
real CJORBOT_i, CJORSTI_i, CJORGAT_i, VBIRBOT_i, VBIRSTI_i, VBIRGAT_i;
|
||||
real PBOT_i, PSTI_i, PGAT_i, PHIGBOT_i, PHIGSTI_i, PHIGGAT_i;
|
||||
real IDSATRBOT_i, IDSATRSTI_i, IDSATRGAT_i, XJUNSTI_i, XJUNGAT_i;
|
||||
real CSRHBOT_i, CSRHSTI_i, CSRHGAT_i, CTATBOT_i, CTATSTI_i, CTATGAT_i;
|
||||
real MEFFTATBOT_i, MEFFTATSTI_i, MEFFTATGAT_i;
|
||||
real CBBTBOT_i, CBBTSTI_i, CBBTGAT_i, FBBTRBOT_i, FBBTRSTI_i, FBBTRGAT_i;
|
||||
real STFBBTBOT_i, STFBBTSTI_i, STFBBTGAT_i;
|
||||
real VBRBOT_i, VBRSTI_i, VBRGAT_i, PBRBOT_i, PBRSTI_i, PBRGAT_i;
|
||||
|
||||
real SWJUNEXP_i, VJUNREF_i, FJUNQ_i;
|
||||
|
||||
// declaration of variables calculated outside macro "juncapfunction", voltage-independent part
|
||||
real tkr, tkd, auxt, KBOL_over_QELE, phitr, phitrinv, phitd, phitdinv;
|
||||
real perfc, berfc, cerfc;
|
||||
real deltaphigr, deltaphigd, pmax;
|
||||
|
||||
real phigrbot, phigrsti, phigrgat, phigdbot, phigdsti, phigdgat;
|
||||
real ftdbot, ftdsti, ftdgat, idsatbot, idsatsti, idsatgat;
|
||||
real ubibot, ubisti, ubigat, vbibot, vbisti, vbigat;
|
||||
real vbibot2, vbisti2, vbigat2, pbot2, psti2, pgat2, vbibot2r, vbisti2r, vbigat2r;
|
||||
real vbiinvbot, vbiinvsti, vbiinvgat;
|
||||
real one_minus_PBOT, one_minus_PSTI, one_minus_PGAT;
|
||||
real one_over_one_minus_PBOT, one_over_one_minus_PSTI, one_over_one_minus_PGAT;
|
||||
real cjobot, cjosti, cjogat;
|
||||
real qprefbot, qprefsti, qprefgat, qpref2bot, qpref2sti, qpref2gat;
|
||||
real wdepnulrbot, wdepnulrsti, wdepnulrgat, wdepnulrinvbot, wdepnulrinvsti, wdepnulrinvgat;
|
||||
real VBIRBOTinv, VBIRSTIinv, VBIRGATinv;
|
||||
real deltaEbot, deltaEsti, deltaEgat, atatbot, atatsti, atatgat;
|
||||
real btatpartbot, btatpartsti, btatpartgat;
|
||||
real fbbtbot, fbbtsti, fbbtgat;
|
||||
real alphaav, fstopbot, fstopsti, fstopgat, VBRinvbot, VBRinvsti, VBRinvgat;
|
||||
real slopebot, slopesti, slopegat;
|
||||
real vmaxbot, vmaxsti, vmaxgat;
|
||||
|
||||
// JUNCAP-Express variables
|
||||
real I1, I2, I3, I4, I5;
|
||||
real I1_cor, I2_cor, I3_cor, I4_cor, I5_cor;
|
||||
real V1, V2, V3, V4, V5;
|
||||
real alphaje, m0_rev, mcor_rev;
|
||||
real tt0, tt1, tt2, tm0, tm1;
|
||||
real FRACNA, FRACNB, FRACI;
|
||||
real zfrac;
|
||||
real ijunfor1, ijunfor2, ijunrev;
|
||||
|
||||
`ifdef JUNCAP_StandAlone
|
||||
// do nothing
|
||||
`else // JUNCAP_StandAlone
|
||||
real CJORBOTD_i, CJORSTID_i, CJORGATD_i, VBIRBOTD_i, VBIRSTID_i, VBIRGATD_i;
|
||||
real PBOTD_i, PSTID_i, PGATD_i, PHIGBOTD_i, PHIGSTID_i, PHIGGATD_i;
|
||||
real IDSATRBOTD_i, IDSATRSTID_i, IDSATRGATD_i, XJUNSTID_i, XJUNGATD_i;
|
||||
real CSRHBOTD_i, CSRHSTID_i, CSRHGATD_i, CTATBOTD_i, CTATSTID_i, CTATGATD_i;
|
||||
real MEFFTATBOTD_i, MEFFTATSTID_i, MEFFTATGATD_i;
|
||||
real CBBTBOTD_i, CBBTSTID_i, CBBTGATD_i, FBBTRBOTD_i, FBBTRSTID_i, FBBTRGATD_i;
|
||||
real STFBBTBOTD_i, STFBBTSTID_i, STFBBTGATD_i;
|
||||
real VBRBOTD_i, VBRSTID_i, VBRGATD_i, PBRBOTD_i, PBRSTID_i, PBRGATD_i;
|
||||
|
||||
real VJUNREFD_i, FJUNQD_i;
|
||||
|
||||
real phigrbot_d, phigrsti_d, phigrgat_d, phigdbot_d, phigdsti_d, phigdgat_d;
|
||||
real ftdbot_d, ftdsti_d, ftdgat_d, idsatbot_d, idsatsti_d, idsatgat_d;
|
||||
real ubibot_d, ubisti_d, ubigat_d, vbibot_d, vbisti_d, vbigat_d;
|
||||
real vbiinvbot_d, vbiinvsti_d, vbiinvgat_d;
|
||||
real one_minus_PBOT_d, one_minus_PSTI_d, one_minus_PGAT_d;
|
||||
real one_over_one_minus_PBOT_d, one_over_one_minus_PSTI_d, one_over_one_minus_PGAT_d;
|
||||
real cjobot_d, cjosti_d, cjogat_d;
|
||||
real qprefbot_d, qprefsti_d, qprefgat_d, qpref2bot_d, qpref2sti_d, qpref2gat_d;
|
||||
real wdepnulrbot_d, wdepnulrsti_d, wdepnulrgat_d, wdepnulrinvbot_d, wdepnulrinvsti_d, wdepnulrinvgat_d;
|
||||
real VBIRBOTinv_d, VBIRSTIinv_d, VBIRGATinv_d;
|
||||
real deltaEbot_d, deltaEsti_d, deltaEgat_d, atatbot_d, atatsti_d, atatgat_d;
|
||||
real btatpartbot_d, btatpartsti_d, btatpartgat_d;
|
||||
real fbbtbot_d, fbbtsti_d, fbbtgat_d;
|
||||
real fstopbot_d, fstopsti_d, fstopgat_d, VBRinvbot_d, VBRinvsti_d, VBRinvgat_d;
|
||||
real slopebot_d, slopesti_d, slopegat_d;
|
||||
`endif // JUNCAP_StandAlone
|
||||
|
||||
//`LocalGlobalVars
|
||||
|
||||
//================================================================
|
||||
// Variables that are different for source and drain side junction
|
||||
// and have a scope larger than a single macro-call
|
||||
//================================================================
|
||||
|
||||
`ifdef JUNCAP_StandAlone
|
||||
real AB_i, LS_i, LG_i;
|
||||
real zflagbot, zflagsti, zflaggat;
|
||||
real VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim;
|
||||
|
||||
// JUNCAP-express variables
|
||||
real xhighf1, expxhf1, xhighf2, expxhf2, xhighr, expxhr;
|
||||
|
||||
// JUNCAP2-express intermediate parameters
|
||||
real ISATFOR1, MFOR1, ISATFOR2, MFOR2, ISATREV, MREV, m0flag;
|
||||
`else // JUNCAP_StandAlone
|
||||
real ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, AS_i, PS_i;
|
||||
real zflagbot_s, zflagsti_s, zflaggat_s;
|
||||
real VMAX_s, exp_VMAX_over_phitd_s, vbimin_s, vch_s, vfmin_s, vbbtlim_s;
|
||||
|
||||
// JUNCAP-express variables
|
||||
real xhighf1_s, expxhf1_s, xhighf2_s, expxhf2_s, xhighr_s, expxhr_s, m0flag_s;
|
||||
|
||||
// JUNCAP2-express intermediate parameters
|
||||
real ISATFOR1_s, MFOR1_s, ISATFOR2_s, MFOR2_s, ISATREV_s, MREV_s;
|
||||
|
||||
real ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, AD_i, PD_i;
|
||||
real zflagbot_d, zflagsti_d, zflaggat_d;
|
||||
real VMAX_d, exp_VMAX_over_phitd_d, vbimin_d, vch_d, vfmin_d, vbbtlim_d;
|
||||
|
||||
// JUNCAP-express variables
|
||||
real xhighf1_d, expxhf1_d, xhighf2_d, expxhf2_d, xhighr_d, expxhr_d, m0flag_d;
|
||||
|
||||
// JUNCAP2-express intermediate parameters
|
||||
real ISATFOR1_d, MFOR1_d, ISATFOR2_d, MFOR2_d, ISATREV_d, MREV_d;
|
||||
`endif // JUNCAP_StandAlone
|
||||
|
|
@ -0,0 +1,314 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: PSP103_ChargesNQS.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// Calculate NQS-charge contributions
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Qp1 = vnorm * V(SPLINE1);
|
||||
Qp2 = vnorm * V(SPLINE2);
|
||||
Qp3 = vnorm * V(SPLINE3);
|
||||
Qp4 = vnorm * V(SPLINE4);
|
||||
Qp5 = vnorm * V(SPLINE5);
|
||||
Qp6 = vnorm * V(SPLINE6);
|
||||
Qp7 = vnorm * V(SPLINE7);
|
||||
Qp8 = vnorm * V(SPLINE8);
|
||||
Qp9 = vnorm * V(SPLINE9);
|
||||
|
||||
Tnorm = 0.0;
|
||||
|
||||
if (SWNQS_i != 0) begin
|
||||
// Dimension and mobility information is included in Tnorm
|
||||
Tnorm = MUNQS_i * phit1 * BET_i / (COX_qm * Gmob_dL_ac);
|
||||
thesat2 = thesat1_ac * thesat1_ac * phit1 * phit1;
|
||||
|
||||
if (SWNQS_i == 1) begin
|
||||
dQy = QpN - Qp0;
|
||||
d2Qy = 6.0 * (Qp0 + QpN) - 12.0 * Qp1;
|
||||
end else if (SWNQS_i == 2) begin
|
||||
dQy = (-7.0 * Qp0 - 3.0 * Qp1 + 12.0 * Qp2 - 2.0 * QpN) / 5.0;
|
||||
d2Qy = -18.0 / 5.0 * (-4.0 * Qp0 + 9.0 * Qp1 - 6.0 * Qp2 + QpN);
|
||||
end else if (SWNQS_i == 3) begin
|
||||
dQy = (-13.0 * Qp0 - 6.0 * Qp1 + 24.0 * Qp2 - 6.0 * Qp3 + QpN) / 7.0;
|
||||
d2Qy = (180.0 * Qp0 - 408.0 * Qp1 + 288.0 * Qp2 - 72.0 * Qp3 + 12.0 * QpN) / 7.0;
|
||||
end else if (SWNQS_i == 5) begin
|
||||
dQy = (-181.0 * Qp0 - 84.0 * Qp1 + 24.0 * Qp4 - 6.0 * Qp5 - 90.0 * Qp3 + QpN
|
||||
+ 336.0 * Qp2) / 65.0;
|
||||
d2Qy = (432.0 * Qp4 - 108.0 * Qp5 - 1620.0 * Qp3 + 18.0 * QpN + 3762.0 * Qp0
|
||||
- 8532.0 * Qp1 + 6048.0 * Qp2) / 65.0;
|
||||
end else if (SWNQS_i == 9) begin
|
||||
dQy = (1680.0 * Qp6 + 23400.0 * Qp4 + 5.0 * QpN - 87330.0 * Qp3 + 120.0 * Qp8
|
||||
- 450.0 * Qp7 - 81480.0 * Qp1 + 325920.0 * Qp2
|
||||
-175565.0 * Qp0 - 30.0 * Qp9) / 37829.0 - 30.0 / 181.0 * Qp5;
|
||||
d2Qy = (-13500.0 * Qp7 + 702000.0 * Qp4 - 2619900 * Qp3 - 13793100.0 * Qp1
|
||||
+ 9777600.0 * Qp2 + 6081750.0 * Qp0 + 150.0 * QpN + 3600.0 * Qp8
|
||||
- 900.0 * Qp9 + 50400.0 * Qp6) / 37829.0 - 900.0 / 181.0 * Qp5;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp1, xg_ac, dQy, d2Qy, fk1)
|
||||
end else begin
|
||||
thesat2 = 0.0;
|
||||
end
|
||||
|
||||
if (SWNQS_i >= 2) begin
|
||||
if (SWNQS_i == 2) begin
|
||||
dQy = (2.0 * Qp0 - 12.0 * Qp1 + 3.0 * Qp2 + 7.0 * QpN) / 5.0;
|
||||
d2Qy = -18.0 / 5.0 * (-4.0 * QpN + 9.0 * Qp2 - 6.0 * Qp1 + Qp0);
|
||||
end else if (SWNQS_i == 3) begin
|
||||
dQy = 0.5 * Qp0 - 3.0 * Qp1 + 3.0 * Qp3 - 0.5 * QpN;
|
||||
d2Qy = (-48.0 * Qp0 + 288.0 * Qp1 - 480.0 * Qp2 + 288.0 * Qp3 - 48.0 * QpN) / 7.0;
|
||||
end else if (SWNQS_i == 5) begin
|
||||
dQy = (-291.0 * Qp1 - 6.0 * Qp2 - 84.0 * Qp4 + 21.0 * Qp5) / 65.0
|
||||
+ (630.0 * Qp3 - 7.0 * QpN + 97.0 * Qp0) / 130.0;
|
||||
d2Qy = (-1728.0 * Qp4 + 432.0 * Qp5 + 6480.0 * Qp3 - 72.0 * QpN - 1008.0 * Qp0
|
||||
+ 6048.0 * Qp1 - 10152.0 * Qp2) / 65.0;
|
||||
end else if (SWNQS_i == 9) begin
|
||||
dQy = (-5880.0 * Qp6 - 81900.0 * Qp4 + 305655.0 * Qp3 - 420.0 * Qp8
|
||||
+ 105.0 * Qp9 - 282255.0 * Qp1 + 1575.0 * Qp7 - 5850.0 * Qp2) / 37829.0
|
||||
+ 105.0 / 181.0 * Qp5 + (94085.0 * Qp0 - 35.0 * QpN) / 75658.0;
|
||||
d2Qy = (9777600.0 * Qp1 + 54000.0 * Qp7 - 2808000.0 * Qp4 + 10479600.0 * Qp3
|
||||
- 16413000.0 * Qp2 - 1629600.0 * Qp0 - 600.0 * QpN - 14400.0 * Qp8
|
||||
+ 3600.0 * Qp9 - 201600.0 * Qp6) / 37829.0 + 3600.0 * Qp5 / 181.0;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp2, xg_ac, dQy, d2Qy, fk2)
|
||||
end
|
||||
|
||||
if (SWNQS_i >= 3) begin
|
||||
if (SWNQS_i == 3) begin
|
||||
dQy = (13.0 * QpN + 6.0 * Qp3 - 24.0 * Qp2 + 6.0 * Qp1 - Qp0) / 7.0;
|
||||
d2Qy = (180.0 * QpN - 408.0 * Qp3 + 288.0 * Qp2 - 72.0 * Qp1 + 12.0 * Qp0) / 7.0;
|
||||
end else if (SWNQS_i == 5) begin
|
||||
dQy = (QpN - 6.0 * Qp5 + 24.0 * Qp4 - 24.0 * Qp2 + 6.0 * Qp1 - Qp0) / 5.0;
|
||||
d2Qy = (1296.0 * (Qp4 + Qp2) - 324.0 * (Qp5 + Qp1) - 2052.0 * Qp3
|
||||
+ 54.0 * (QpN + Qp0)) / 13.0;
|
||||
end else if (SWNQS_i == 9) begin
|
||||
dQy = (21840.0 * Qp6 + 304200.0 * Qp4 + 65.0 * QpN - 420.0 * Qp3 + 1560.0 * Qp8
|
||||
- 12605.0 * Qp0 - 390.0 * Qp9 + 75630.0 * Qp1 - 5850.0 * Qp7
|
||||
- 302520.0 * Qp2) / 37829.0 - 390.0 / 181.0 * Qp5;
|
||||
d2Qy = (-2619900.0 * Qp1 - 202500.0 * Qp7 + 10530000.0 * Qp4 - 16601100.0 * Qp3
|
||||
+ 10479600.0 * Qp2 + 436650.0 * Qp0 + 2250.0 * QpN + 54000.0 * Qp8
|
||||
- 13500.0 * Qp9 + 756000.0 * Qp6) / 37829.0 - 13500.0 * Qp5 / 181.0;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp3, xg_ac, dQy, d2Qy, fk3)
|
||||
end
|
||||
|
||||
if (SWNQS_i >= 4) begin
|
||||
if (SWNQS_i == 5) begin
|
||||
dQy = (-630.0 * Qp3 + 12.0 * Qp4 + 582.0 * Qp5 - 97.0 * QpN + 7.0 * Qp0
|
||||
- 42.0 * Qp1 + 168.0 * Qp2) / 130.0;
|
||||
d2Qy = (-10152.0 * Qp4 + 6048.0 * Qp5 + 6480.0 * Qp3 - 1008.0 * QpN
|
||||
- 72.0 * Qp0 + 432.0 * Qp1 - 1728.0 * Qp2) / 65.0;
|
||||
end
|
||||
else if (SWNQS_i == 9) begin
|
||||
dQy = (-81480.0 * Qp6 - 30.0 * Qp4 - 303975.0 * Qp3 - 5820.0 * Qp8
|
||||
+ 1455.0 * Qp9 - 20265.0 * Qp1 + 21825.0 * Qp7 + 81060.0 * Qp2) / 37829.0
|
||||
- 485.0 / 75658.0 * QpN + 1455.0 * Qp5 / 181.0 + 6755.0 * Qp0 / 75658.0;
|
||||
d2Qy = (702000.0 * Qp1 + 756000.0 * Qp7 - 16614600.0 * Qp4 + 10530000.0 * Qp3
|
||||
- 2808000.0 * Qp2 - 117000.0 * Qp0 - 8400.0 * QpN - 201600.0 * Qp8
|
||||
+ 50400.0 * Qp9 - 2822400.0 * Qp6) / 37829.0 + 50400.0 * Qp5 / 181.0;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp4, xg_ac, dQy, d2Qy, fk4)
|
||||
end
|
||||
|
||||
if (SWNQS_i >= 5) begin
|
||||
if (SWNQS_i == 5) begin
|
||||
dQy = (-336.0 * Qp4 + 84.0 * Qp5 + 90.0 * Qp3 + 181.0 * QpN - Qp0 + 6.0 * Qp1
|
||||
- 24.0 * Qp2) / 65.0;
|
||||
d2Qy = (18.0 * Qp0 + 3762.0 * QpN + 6048.0 * Qp4 + 432.0 * Qp2 - 1620.0 * Qp3
|
||||
- 108.0 * Qp1 - 8532.0 * Qp5) / 65.0;
|
||||
end else if (SWNQS_i == 9) begin
|
||||
dQy = (1680.0 * (Qp6 - Qp4) + 5.0 * (QpN - Qp0) + 450.0 * (Qp3 - Qp7)
|
||||
+ 120.0 * (Qp8 - Qp2) - 30.0 * (Qp9 - Qp1)) / 209.0;
|
||||
d2Qy = (-900.0 * (Qp1 + Qp9) - 13500.0 * (Qp7 + Qp3) - 79500.0 * Qp5
|
||||
+ 50400.0 * (Qp4 + Qp6) + 3600.0 * (Qp2 + Qp8) + 150.0 * (Qp0 + QpN)) / 181.0;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp5, xg_ac, dQy, d2Qy, fk5)
|
||||
end
|
||||
|
||||
if (SWNQS_i >= 6) begin
|
||||
if (SWNQS_i == 9) begin
|
||||
dQy = (30.0 * Qp6 + 81480.0 * Qp4 - 21825.0 * Qp3 - 81060.0 * Qp8 + 20265.0 * Qp9
|
||||
- 1455.0 * Qp1 + 303975.0 * Qp7 + 5820.0 * Qp2) / 37829.0
|
||||
-(6755.0 * QpN - 485.0 * Qp0) / 75658.0 - 1455.0 / 181.0 * Qp5;
|
||||
d2Qy = (50400.0 * Qp1 + 10530000.0 * Qp7 - 2822400.0 * Qp4 + 756000.0 * Qp3
|
||||
- 201600.0 * Qp2 - 8400.0 * Qp0 - 117000.0 * QpN - 2808000.0 * Qp8
|
||||
+ 702000.0 * Qp9 - 16614600.0 * Qp6) / 37829.0 + 50400.0 * Qp5 / 181.0;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp6, xg_ac, dQy, d2Qy, fk6)
|
||||
end
|
||||
|
||||
if (SWNQS_i >= 7) begin
|
||||
if (SWNQS_i == 9) begin
|
||||
dQy = (-304200.0 * Qp6 - 21840.0 * Qp4 + 12605.0 * QpN + 5850.0 * Qp3
|
||||
+ 302520.0 * Qp8 - 65.0 * Qp0 - 75630.0 * Qp9 + 390.0 * Qp1 + 420.0 * Qp7
|
||||
- 1560.0 * Qp2) / 37829.0 + 390.0 / 181.0 * Qp5;
|
||||
d2Qy = (-13500.0 * Qp1 - 16601100.0 * Qp7 + 756000.0 * Qp4 - 202500.0 * Qp3
|
||||
+ 54000.0 * Qp2 + 2250.0 * Qp0 + 436650.0 * QpN + 10479600.0 * Qp8
|
||||
- 2619900.0 * Qp9 + 10530000.0 * Qp6) / 37829.0 - 13500.0 * Qp5 / 181.0;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp7, xg_ac, dQy, d2Qy, fk7)
|
||||
end
|
||||
|
||||
if (SWNQS_i >= 8) begin
|
||||
if (SWNQS_i == 9) begin
|
||||
dQy = (81900.0 * Qp6 + 5880.0 * Qp4 - 1575.0 * Qp3 + 5850.0 * Qp8 + 282255.0 * Qp9
|
||||
- 105.0 * Qp1 - 305655.0 * Qp7 + 420.0 * Qp2) / 37829.0 + (35.0 * Qp0
|
||||
- 94085.0 * QpN) / 75658.0 - 105.0 / 181.0 * Qp5;
|
||||
d2Qy = (3600.0 * Qp1 + 10479600.0 * Qp7 - 201600.0 * Qp4 + 54000.0 * Qp3
|
||||
- 14400.0 * Qp2 - 600.0 * Qp0 - 1629600.0 * QpN - 16413000.0 * Qp8
|
||||
+ 9777600.0 * Qp9 - 2808000.0 * Qp6) / 37829.0 + 3600.0 * Qp5 / 181.0;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp8, xg_ac, dQy, d2Qy, fk8)
|
||||
end
|
||||
|
||||
if (SWNQS_i >= 9) begin
|
||||
if (SWNQS_i == 9) begin
|
||||
dQy = (-23400.0 * Qp6 - 1680.0 * Qp4 + 175565.0 * QpN + 450.0 * Qp3
|
||||
- 325920.0 * Qp8 - 5.0 * Qp0 + 81480.0 * Qp9 + 30.0 * Qp1
|
||||
+ 87330.0 * Qp7 - 120.0 * Qp2) / 37829.0 + 30.0 * Qp5 / 181.0;
|
||||
d2Qy = (-900.0 * Qp1 - 2619900.0 * Qp7 + 50400.0 * Qp4 - 13500.0 * Qp3
|
||||
+ 3600.0 * Qp2 + 150.0 * Qp0 + 6081750.0 * QpN + 9777600.0 * Qp8
|
||||
- 13793100.0 * Qp9 + 702000.0 * Qp6) / 37829.0 - 900.0 * Qp5 / 181.0;
|
||||
end else begin
|
||||
dQy = 0.0;
|
||||
d2Qy = 0.0;
|
||||
end
|
||||
`fq(Qp9, xg_ac, dQy, d2Qy, fk9)
|
||||
end
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
// Terminal charges for NQS
|
||||
QS_NQS = 0.0;
|
||||
QD_NQS = 0.0;
|
||||
QG_NQS = 0.0;
|
||||
if (SWNQS_i != 0) begin
|
||||
if (SWNQS_i == 1) begin
|
||||
QS_NQS = (17.0 * Qp0 + 30.0 * Qp1 + QpN) / 96.0;
|
||||
QD_NQS = (Qp0 + 30.0 * Qp1 + 17.0 * QpN) / 96.0;
|
||||
`QiToPhi(Qp1,xg_ac, temp1)
|
||||
QG_NQS = xg_ac - (x_sp + 4.0 * temp1 + x_dp) * `oneSixth;
|
||||
end else if (SWNQS_i == 2) begin
|
||||
QS_NQS = (11.0 * Qp0 + 24.0 * Qp1 + 9.0 * Qp2 + QpN) / 90.0;
|
||||
QD_NQS = (11.0 * QpN + 24.0 * Qp2 + 9.0 * Qp1 + Qp0) / 90.0;
|
||||
`QiToPhi(Qp1, xg_ac, temp1)
|
||||
`QiToPhi(Qp2, xg_ac, temp2)
|
||||
QG_NQS = xg_ac - (x_sp + 3.0 * (temp1 + temp2) + x_dp) * 0.125;
|
||||
end else if (SWNQS_i == 3) begin
|
||||
QS_NQS = (251.0 * Qp0 + 594.0 * Qp1 + 312.0 * Qp2 + 174.0 * Qp3 + 13.0 * QpN) / 2688.0;
|
||||
QD_NQS = (251.0 * QpN + 594.0 * Qp3 + 312.0 * Qp2 + 174.0 * Qp1 + 13.0 * Qp0) / 2688.0;
|
||||
`QiToPhi(Qp1, xg_ac, temp1)
|
||||
`QiToPhi(Qp2, xg_ac, temp2)
|
||||
`QiToPhi(Qp3, xg_ac, temp3)
|
||||
QG_NQS = xg_ac - (x_sp + 4.0 * temp1 + 2.0 * temp2 + 4.0 * temp3 + x_dp) / 12.0;
|
||||
end else if (SWNQS_i == 5) begin
|
||||
QS_NQS = (1187.0 * Qp0 + 43.0 * QpN) / 18720.0 + (503.0 * Qp1 + 172.0 * Qp4
|
||||
+ 87.0 * Qp5 + 265.0 * Qp3 + 328.0 * Qp2) / 3120.0;
|
||||
QD_NQS = (1187.0 * QpN + 43.0 * Qp0) / 18720.0 + (503.0 * Qp5 + 172.0 * Qp2
|
||||
+ 87.0 * Qp1 + 265.0 * Qp3 + 328.0 * Qp4) / 3120.0;
|
||||
`QiToPhi(Qp1, xg_ac, temp1)
|
||||
`QiToPhi(Qp2, xg_ac, temp2)
|
||||
`QiToPhi(Qp3, xg_ac, temp3)
|
||||
`QiToPhi(Qp4, xg_ac, temp4)
|
||||
`QiToPhi(Qp5, xg_ac, temp5)
|
||||
QG_NQS = xg_ac - (x_sp + 4.0 * (temp1 + temp3 + temp5) + 2.0 * (temp2 + temp4) + x_dp) / 18.0;
|
||||
end else if (SWNQS_i == 9) begin
|
||||
QS_NQS = (75653.0 * Qp8 + 225999.0 * Qp4) / 3782900.0 + (151321.0 * Qp9
|
||||
+ 454023.0 * Qp7 + 1073767.0 * Qp3 + 1564569.0 * Qp1) / 15131600.0
|
||||
+ 75623.0 * Qp6 / 1891450.0 + 145.0 * Qp5 / 2896.0 + 72263.0 * Qp2 / 945725.0
|
||||
+ (3504517.0 * Qp0 + 75653.0 * QpN) / 90789600.0;
|
||||
QD_NQS = (75653.0 * Qp2 + 225999.0 * Qp6) / 3782900.0 + (151321.0 * Qp1
|
||||
+ 454023.0 * Qp3 + 1073767.0 * Qp7 + 1564569.0 * Qp9) / 15131600.0
|
||||
+ 75623.0 * Qp4 / 1891450.0 + 145.0 * Qp5 / 2896.0 + 72263.0 * Qp8 / 945725.0
|
||||
+ (3504517.0 * QpN + 75653.0 * Qp0) / 90789600.0;
|
||||
`QiToPhi(Qp1, xg_ac, temp1)
|
||||
`QiToPhi(Qp2, xg_ac, temp2)
|
||||
`QiToPhi(Qp3, xg_ac, temp3)
|
||||
`QiToPhi(Qp4, xg_ac, temp4)
|
||||
`QiToPhi(Qp5, xg_ac, temp5)
|
||||
`QiToPhi(Qp6, xg_ac, temp6)
|
||||
`QiToPhi(Qp7, xg_ac, temp7)
|
||||
`QiToPhi(Qp8, xg_ac, temp8)
|
||||
`QiToPhi(Qp9, xg_ac, temp9)
|
||||
QG_NQS = xg_ac - (x_sp + 4.0 * (temp1 + temp3 + temp5 + temp7 + temp9)
|
||||
+ 2.0 * (temp2 + temp4 + temp6 + temp8) + x_dp) / 30.0;
|
||||
end
|
||||
QG_NQS = pd * QG_NQS;
|
||||
|
||||
if (sigVds > 0) begin
|
||||
Qs = COX_qm * phit1 * QS_NQS;
|
||||
Qd = COX_qm * phit1 * QD_NQS;
|
||||
end else begin
|
||||
Qs = COX_qm * phit1 * QD_NQS;
|
||||
Qd = COX_qm * phit1 * QS_NQS;
|
||||
end
|
||||
Qg = COX_qm * phit1 * QG_NQS;
|
||||
Qb = -Qg - Qs - Qd;
|
||||
end
|
||||
|
||||
// Update internal nodes
|
||||
V(RES1) <+ vnorm_inv * I(RES1) * r_nqs;
|
||||
V(SPLINE1) <+ vnorm_inv * idt(-Tnorm * fk1, Qp1_0);
|
||||
V(RES2) <+ vnorm_inv * I(RES2) * r_nqs;
|
||||
V(SPLINE2) <+ vnorm_inv * idt(-Tnorm * fk2, Qp2_0);
|
||||
V(RES3) <+ vnorm_inv * I(RES3) * r_nqs;
|
||||
V(SPLINE3) <+ vnorm_inv * idt(-Tnorm * fk3, Qp3_0);
|
||||
V(RES4) <+ vnorm_inv * I(RES4) * r_nqs;
|
||||
V(SPLINE4) <+ vnorm_inv * idt(-Tnorm * fk4, Qp4_0);
|
||||
V(RES5) <+ vnorm_inv * I(RES5) * r_nqs;
|
||||
V(SPLINE5) <+ vnorm_inv * idt(-Tnorm * fk5, Qp5_0);
|
||||
V(RES6) <+ vnorm_inv * I(RES6) * r_nqs;
|
||||
V(SPLINE6) <+ vnorm_inv * idt(-Tnorm * fk6, Qp6_0);
|
||||
V(RES7) <+ vnorm_inv * I(RES7) * r_nqs;
|
||||
V(SPLINE7) <+ vnorm_inv * idt(-Tnorm * fk7, Qp7_0);
|
||||
V(RES8) <+ vnorm_inv * I(RES8) * r_nqs;
|
||||
V(SPLINE8) <+ vnorm_inv * idt(-Tnorm * fk8, Qp8_0);
|
||||
V(RES9) <+ vnorm_inv * I(RES9) * r_nqs;
|
||||
V(SPLINE9) <+ vnorm_inv * idt(-Tnorm * fk9, Qp9_0);
|
||||
|
||||
|
|
@ -0,0 +1,205 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: PSP103_InitNQS.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Computing initial (dc) values for internal nodes.
|
||||
// This code is independent of internal-node voltages
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Qp1_0 = 0.0;
|
||||
Qp2_0 = 0.0;
|
||||
Qp3_0 = 0.0;
|
||||
Qp4_0 = 0.0;
|
||||
Qp5_0 = 0.0;
|
||||
Qp6_0 = 0.0;
|
||||
Qp7_0 = 0.0;
|
||||
Qp8_0 = 0.0;
|
||||
Qp9_0 = 0.0;
|
||||
fk1 = 0.0;
|
||||
fk2 = 0.0;
|
||||
fk3 = 0.0;
|
||||
fk4 = 0.0;
|
||||
fk5 = 0.0;
|
||||
fk6 = 0.0;
|
||||
fk7 = 0.0;
|
||||
fk8 = 0.0;
|
||||
fk9 = 0.0;
|
||||
if (SWNQS_i != 0) begin
|
||||
dQis = 0.0;
|
||||
dQy = 0.0;
|
||||
dfQi = 0.0;
|
||||
fQi = 0.0;
|
||||
d2Qy = 0.0;
|
||||
|
||||
Qp1 = 0.0;
|
||||
Qp2 = 0.0;
|
||||
Qp3 = 0.0;
|
||||
Qp4 = 0.0;
|
||||
Qp5 = 0.0;
|
||||
Qp6 = 0.0;
|
||||
Qp7 = 0.0;
|
||||
Qp8 = 0.0;
|
||||
Qp9 = 0.0;
|
||||
|
||||
phi_p1 = 0.0;
|
||||
phi_p2 = 0.0;
|
||||
phi_p3 = 0.0;
|
||||
phi_p4 = 0.0;
|
||||
phi_p5 = 0.0;
|
||||
phi_p6 = 0.0;
|
||||
phi_p7 = 0.0;
|
||||
phi_p8 = 0.0;
|
||||
phi_p9 = 0.0;
|
||||
|
||||
// Setting initial values for charge along the channel
|
||||
// from interpolated DC-solution
|
||||
if (xg_ac > 0) begin
|
||||
if (SWNQS_i == 1) begin
|
||||
|
||||
phi_p1 = `Phiy(0.5);
|
||||
`PhiToQb(phi_p1,Qb_tmp)
|
||||
Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp;
|
||||
|
||||
end else if (SWNQS_i == 2) begin
|
||||
phi_p1 = `Phiy(`oneThird);
|
||||
`PhiToQb(phi_p1,Qb_tmp)
|
||||
Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp;
|
||||
|
||||
phi_p2 = `Phiy(`twoThirds);
|
||||
`PhiToQb(phi_p2,Qb_tmp)
|
||||
Qp2_0 = -pd * (xg_ac - phi_p2) - Qb_tmp;
|
||||
|
||||
if (sigVds < 0) begin
|
||||
`swap(Qp1_0, Qp2_0)
|
||||
end
|
||||
end else if (SWNQS_i == 3) begin
|
||||
phi_p1 = `Phiy(0.25);
|
||||
`PhiToQb(phi_p1,Qb_tmp)
|
||||
Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp;
|
||||
|
||||
phi_p2 = `Phiy(0.5);
|
||||
`PhiToQb(phi_p2,Qb_tmp)
|
||||
Qp2_0 = -pd * (xg_ac - phi_p2) - Qb_tmp;
|
||||
|
||||
phi_p3 = `Phiy(0.75);
|
||||
`PhiToQb(phi_p3,Qb_tmp)
|
||||
Qp3_0 = -pd * (xg_ac - phi_p3) - Qb_tmp;
|
||||
|
||||
if (sigVds < 0) begin
|
||||
`swap(Qp1_0, Qp3_0)
|
||||
end
|
||||
end else if (SWNQS_i == 5) begin
|
||||
phi_p1 = `Phiy(`oneSixth);
|
||||
`PhiToQb(phi_p1,Qb_tmp)
|
||||
Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp;
|
||||
|
||||
phi_p2 = `Phiy(`oneThird);
|
||||
`PhiToQb(phi_p2,Qb_tmp)
|
||||
Qp2_0 = -pd * (xg_ac - phi_p2) - Qb_tmp;
|
||||
|
||||
phi_p3 = `Phiy(0.5);
|
||||
`PhiToQb(phi_p3,Qb_tmp)
|
||||
Qp3_0 = -pd * (xg_ac - phi_p3) - Qb_tmp;
|
||||
|
||||
phi_p4 = `Phiy(`twoThirds);
|
||||
`PhiToQb(phi_p4,Qb_tmp)
|
||||
Qp4_0 = -pd * (xg_ac - phi_p4) - Qb_tmp;
|
||||
|
||||
phi_p5 = `Phiy(0.8333333333333333);
|
||||
`PhiToQb(phi_p5,Qb_tmp)
|
||||
Qp5_0 = -pd * (xg_ac - phi_p5) - Qb_tmp;
|
||||
|
||||
if (sigVds < 0) begin
|
||||
`swap(Qp1_0, Qp5_0)
|
||||
`swap(Qp2_0, Qp4_0)
|
||||
end
|
||||
end else if (SWNQS_i == 9) begin
|
||||
phi_p1 = `Phiy(0.1);
|
||||
`PhiToQb(phi_p1,Qb_tmp)
|
||||
Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp;
|
||||
|
||||
phi_p2 = `Phiy(0.2);
|
||||
`PhiToQb(phi_p2,Qb_tmp)
|
||||
Qp2_0 = -pd * (xg_ac - phi_p2) - Qb_tmp;
|
||||
|
||||
phi_p3 = `Phiy(0.3);
|
||||
`PhiToQb(phi_p3,Qb_tmp)
|
||||
Qp3_0 = -pd * (xg_ac - phi_p3) - Qb_tmp;
|
||||
|
||||
phi_p4 = `Phiy(0.4);
|
||||
`PhiToQb(phi_p4,Qb_tmp)
|
||||
Qp4_0 = -pd * (xg_ac - phi_p4) - Qb_tmp;
|
||||
|
||||
phi_p5 = `Phiy(0.5);
|
||||
`PhiToQb(phi_p5,Qb_tmp)
|
||||
Qp5_0 = -pd * (xg_ac - phi_p5) - Qb_tmp;
|
||||
|
||||
phi_p6 = `Phiy(0.6);
|
||||
`PhiToQb(phi_p6,Qb_tmp)
|
||||
Qp6_0 = -pd * (xg_ac - phi_p6) - Qb_tmp;
|
||||
|
||||
phi_p7 = `Phiy(0.7);
|
||||
`PhiToQb(phi_p7,Qb_tmp)
|
||||
Qp7_0 = -pd * (xg_ac - phi_p7) - Qb_tmp;
|
||||
|
||||
phi_p8 = `Phiy(0.8);
|
||||
`PhiToQb(phi_p8,Qb_tmp)
|
||||
Qp8_0 = -pd * (xg_ac - phi_p8) - Qb_tmp;
|
||||
|
||||
phi_p9 = `Phiy(0.9);
|
||||
`PhiToQb(phi_p9,Qb_tmp)
|
||||
Qp9_0 = -pd * (xg_ac - phi_p9) - Qb_tmp;
|
||||
|
||||
if (sigVds < 0) begin
|
||||
`swap(Qp1_0, Qp9_0)
|
||||
`swap(Qp2_0, Qp8_0)
|
||||
`swap(Qp3_0, Qp7_0)
|
||||
`swap(Qp4_0, Qp6_0)
|
||||
end
|
||||
end
|
||||
end // (x_g >0)
|
||||
end // (SWNQS_i != 0)
|
||||
|
||||
x_sp = 0.0;
|
||||
x_dp = 0.0;
|
||||
Qp0 = 0.0;
|
||||
QpN = 0.0;
|
||||
if (SWNQS_i != 0.0) begin
|
||||
x_sp = x_m_ac - sigVds * 0.5 * dps_ac * inv_phit1;
|
||||
x_dp = x_m_ac + sigVds * 0.5 * dps_ac * inv_phit1;
|
||||
Qp0 = 0.0;
|
||||
QpN = 0.0;
|
||||
if (x_sp > 0) begin
|
||||
`PhiToQb(x_sp, QbSIGN)
|
||||
Qp0 = -pd * (xg_ac - x_sp) - QbSIGN;
|
||||
end
|
||||
if (x_dp > 0) begin
|
||||
`PhiToQb(x_dp, QbSIGN)
|
||||
QpN = -pd * (xg_ac - x_dp) - QbSIGN;
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,762 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: PSP103_macrodefs.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
/////////////////////////////////////////////
|
||||
//
|
||||
// Macros and constants used in PSP
|
||||
//
|
||||
/////////////////////////////////////////////
|
||||
|
||||
// Explicit Gmin
|
||||
`define GMIN $simparam("gmin",1e-15)
|
||||
|
||||
`define PMOS -1
|
||||
`define NMOS +1
|
||||
|
||||
// Some functions
|
||||
`define MINA(x,y,a) 0.5*((x)+(y)-sqrt(((x)-(y))*((x)-(y))+(a)))
|
||||
`define MAXA(x,y,a) 0.5*((x)+(y)+sqrt(((x)-(y))*((x)-(y))+(a)))
|
||||
|
||||
`define MNE(x,y,a,mne) \
|
||||
tme1 = 4.0 - (a); \
|
||||
tme2 = (x) + (y); \
|
||||
mne = 2.0 / tme1 * (tme2 - sqrt(tme2 * tme2 - tme1 * (x) * (y)));
|
||||
|
||||
`define MXE(x,y,a,mxe) \
|
||||
tme1 = 4.0 - (a); \
|
||||
tme2 = (x) + (y); \
|
||||
mxe = 2.0 / tme1 * (tme2 + sqrt(tme2 * tme2 - tme1 * (x) * (y)));
|
||||
|
||||
// Physical constants
|
||||
`define QMN 5.951993
|
||||
`define QMP 7.448711
|
||||
|
||||
// Other constants (PSP-mos)
|
||||
`define DELTA1 0.02
|
||||
`define invSqrt2 7.0710678118654746e-01
|
||||
`define oneSixth 1.6666666666666667e-01
|
||||
`define LEN 1.0e-6
|
||||
`define WEN 1.0e-6
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Macro definitions.
|
||||
//
|
||||
// Note that because at present locally scoped variables
|
||||
// can only be in named blocks, the intermediate variables
|
||||
// used in the macros below must be explicitly declared
|
||||
// as variables in the main code.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Function for parameter definition in the case of separate calculation of charge model in saturation
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define DefACparam(param_i,param_dc,param_ac) \
|
||||
param_i = (param_dc); \
|
||||
if ($param_given(param_ac) == 1) \
|
||||
param_i = (param_ac);
|
||||
|
||||
// sigma function used in surface potential and other calculations
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// Note: one call uses expressions for arguments so parentheses around the arguments in the expressions are necessary
|
||||
`define sigma(a,c,tau,eta,y) \
|
||||
nu = (a) + (c); \
|
||||
mutau = nu * nu + (tau) * (0.5 * ((c) * (c)) - (a)); \
|
||||
y = (eta) + (a) * nu * (tau) / (mutau + (nu / mutau) * (tau) * (tau) * (c) * ((c) * (c) * `oneThird - (a)));
|
||||
|
||||
// modified version of sigma function, which takes 4 arguments
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define sigma2(a,b,c,tau,eta,y) \
|
||||
nu = (a) + (c); \
|
||||
mutau = (nu) * (nu) + (tau) * (0.5 * ((c) * (c)) - (a) * (b)); \
|
||||
y = (eta) + (a) * nu * (tau) / (mutau + (nu / mutau) * (tau) * (tau) * (c) * ((c) * (c) * `oneThird - (a) * (b)));
|
||||
|
||||
// sp_s function: surface potential calculation
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define sp_s(sp,xg,xn,delta) \
|
||||
if (abs(xg) <= margin) begin \
|
||||
SP_S_temp1 = inv_xi * inv_xi * `oneSixth * `invSqrt2; \
|
||||
sp = xg * inv_xi * (1.0 + xg * (1.0 - (delta)) * Gf * SP_S_temp1); \
|
||||
end else begin \
|
||||
if (xg < -margin) begin \
|
||||
SP_S_yg = -xg; \
|
||||
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);\
|
||||
SP_S_c = 2.0 * SP_S_temp - Gf2; \
|
||||
SP_S_tau = -SP_S_eta + ln(SP_S_a * inv_Gf2); \
|
||||
`sigma(SP_S_a, SP_S_c, SP_S_tau, SP_S_eta, SP_S_y0) \
|
||||
`expl_high(SP_S_y0, SP_S_delta0) \
|
||||
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_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))); \
|
||||
end else begin \
|
||||
SP_xg1 = 1.0 / (1.25 + Gf * 7.324648775608221e-001); \
|
||||
SP_S_A_fac= (xi * 1.25 * SP_xg1 - 1.0) * SP_xg1; \
|
||||
SP_S_xbar = xg * inv_xi * (1.0 + SP_S_A_fac * xg); \
|
||||
`expl_low(-SP_S_xbar, SP_S_temp) \
|
||||
SP_S_w = 1.0 - SP_S_temp; \
|
||||
SP_S_x1 = xg + Gf2 * 0.5 - Gf * sqrt(xg + Gf2 * 0.25 - SP_S_w); \
|
||||
SP_S_bx = (xn) + 3.0; \
|
||||
SP_S_eta = `MINA(SP_S_x1, SP_S_bx, 5.0) - 0.5 * (SP_S_bx - sqrt(SP_S_bx * SP_S_bx + 5.0)); \
|
||||
SP_S_temp = xg - SP_S_eta; \
|
||||
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_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_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) \
|
||||
if (SP_S_x0 < `se05) begin \
|
||||
SP_S_delta0 = exp(SP_S_x0); \
|
||||
SP_S_delta1 = 1.0 / SP_S_delta0; \
|
||||
SP_S_delta0 = (delta) * SP_S_delta0; \
|
||||
end else begin \
|
||||
if (SP_S_x0 > (xn) - `se05) begin \
|
||||
SP_S_delta0 = exp(SP_S_x0 - (xn)); \
|
||||
SP_S_delta1 = (delta) / SP_S_delta0; \
|
||||
end else begin \
|
||||
SP_S_delta0 = `ke05 / `P3((xn) - SP_S_x0 - `se05); \
|
||||
SP_S_delta1 = `ke05 / `P3(SP_S_x0 - `se05); \
|
||||
end \
|
||||
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_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))); \
|
||||
end \
|
||||
end
|
||||
|
||||
// sp_s_d function: surface potential calculation at drain (subset of function sp_s)
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define sp_s_d(sp,xg,xn,delta) \
|
||||
if (abs(xg) <= margin) begin \
|
||||
SP_S_temp1 = inv_xi * inv_xi * `oneSixth * `invSqrt2; \
|
||||
sp = xg * inv_xi * (1.0 + xg * (1.0 - (delta)) * Gf * SP_S_temp1); \
|
||||
end else begin \
|
||||
SP_S_bx = (xn) + 3; \
|
||||
SP_S_eta = `MINA(SP_S_x1, SP_S_bx, 5.0) - 0.5 * (SP_S_bx - sqrt(SP_S_bx * SP_S_bx + 5.0)); \
|
||||
SP_S_temp = xg - SP_S_eta; \
|
||||
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_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_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) \
|
||||
if (SP_S_x0 < `se05) begin \
|
||||
SP_S_delta0 = exp(SP_S_x0); \
|
||||
SP_S_delta1 = 1.0 / SP_S_delta0; \
|
||||
SP_S_delta0 = (delta) * SP_S_delta0; \
|
||||
end else begin \
|
||||
if (SP_S_x0 > (xn) - `se05) begin \
|
||||
SP_S_delta0 = exp(SP_S_x0 - (xn)); \
|
||||
SP_S_delta1 = (delta) / SP_S_delta0; \
|
||||
end else begin \
|
||||
SP_S_delta0 = `ke05 / `P3((xn) - SP_S_x0 - `se05); \
|
||||
SP_S_delta1 = `ke05 / `P3(SP_S_x0 - `se05); \
|
||||
end \
|
||||
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_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)));\
|
||||
end
|
||||
|
||||
// sp_ovInit function: surface potential calculation for the overlap regions initialization
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define sp_ovInit(GOV, GOV2, SP_OV_eps2, SP_OV_a, SP_OV_delta1) \
|
||||
inv_GOV = 1.0 / GOV; \
|
||||
SP_OV_eps = 3.1 * GOV + 8.5; \
|
||||
SP_OV_eps2 = SP_OV_eps * SP_OV_eps; \
|
||||
SP_OV_delta = 0.5 * SP_OV_eps; \
|
||||
if (inv_GOV < 0.06) begin \
|
||||
SP_OV_a = 64.0 * inv_GOV; \
|
||||
end else begin \
|
||||
if (inv_GOV <= 0.45) begin \
|
||||
SP_OV_a = 22.0 * inv_GOV + 3.0; \
|
||||
end else begin \
|
||||
if (inv_GOV <= 1.6) begin \
|
||||
SP_OV_a = -7.2 * inv_GOV + 15.5; \
|
||||
end else begin \
|
||||
SP_OV_a = GOV; \
|
||||
end \
|
||||
end \
|
||||
end \
|
||||
SP_OV_delta1 = SP_OV_delta + GOV2 * 0.5 - GOV * sqrt(SP_OV_delta + GOV2 * 0.25 + SP_OV_a);
|
||||
|
||||
// qi_edge charge calculation for the edge transistor
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define qi_edge(qieff_edge,xg_edge,xn_edge) \
|
||||
Q_EDGE_xsth = xbedge + xn_edge; \
|
||||
Q_EDGE_xth0 = Q_EDGE_xsth + Gfedge * sqrt(Q_EDGE_xsth); \
|
||||
Q_EDGE_xth = Q_EDGE_xth0 + dxthedge; \
|
||||
Q_EDGE_n = 1.0 + Gfedge / (2.0 * sqrt(Q_EDGE_xsth)); \
|
||||
Q_EDGE_n_inv = 1.0 / Q_EDGE_n; \
|
||||
Q_EDGE_xgt = xg_edge - Q_EDGE_xth; \
|
||||
if (Q_EDGE_xgt > -12.0) begin \
|
||||
Q_EDGE_xgt0 = Q_EDGE_xgt + lnGfedge2 - 1.0; \
|
||||
Q_EDGE_xgt0e = 0.5 * (Q_EDGE_xgt0 + sqrt(Q_EDGE_xgt0 * Q_EDGE_xgt0 + 10.0)); \
|
||||
Q_EDGE_qi0si = Q_EDGE_xgt - Q_EDGE_n * ln(Q_EDGE_xgt0e) + lnGfedge2; \
|
||||
Q_EDGE_qi0 = 0.5 * (Q_EDGE_qi0si + sqrt(Q_EDGE_qi0si * Q_EDGE_qi0si + 2.0)); \
|
||||
`expl_high((Q_EDGE_xgt - Q_EDGE_qi0), Q_EDGE_exp_x) \
|
||||
Q_EDGE_d0 = Gfedge2 * Q_EDGE_exp_x; \
|
||||
Q_EDGE_d0p = pow(Q_EDGE_d0, Q_EDGE_n_inv); \
|
||||
Q_EDGE_sqerr = Q_EDGE_n * Q_EDGE_n + (2.0 * (Q_EDGE_qi0 + Q_EDGE_n) - Q_EDGE_d0p) * Q_EDGE_d0p; \
|
||||
Q_EDGE_errq = Q_EDGE_n * ((sqrt(Q_EDGE_sqerr) - Q_EDGE_n) / Q_EDGE_d0p - 1.0); \
|
||||
qieff_edge = Q_EDGE_qi0 - Q_EDGE_errq; \
|
||||
end else begin \
|
||||
`expl_low((Q_EDGE_n_inv * (Q_EDGE_xgt + lnGfedge2)), qieff_edge) \
|
||||
end
|
||||
|
||||
// CollapsableR macro: used for parasitic resistances
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// Note: if R=0, the Verilog-A compiler should recognize that the corresponding nodes can be collapsed
|
||||
`define CollapsableR(G, R, SN, N1, N2, Rname) \
|
||||
if ((R) > 0.0) begin \
|
||||
I(N1, N2) <+ MULT_i * (G) * V(N1, N2); \
|
||||
/* line below can be removed if compiler issue occurs */ \
|
||||
I(N1, N2) <+ white_noise(MULT_i * SN, Rname); \
|
||||
end else begin \
|
||||
V(N1, N2) <+ 0.0; \
|
||||
end
|
||||
|
||||
//ngspice-adms: can't node collapse
|
||||
`define NonCollapsableR(G, R, SN, N1, N2, Rname) \
|
||||
I(N1, N2) <+ MULT_i * (G) * V(N1, N2); \
|
||||
I(N1, N2) <+ white_noise(MULT_i * SN, Rname);
|
||||
|
||||
// Local variable declaration (used in SPcalc_dc/SPcalc_ac sections, PSP103_SPCalculation.include and SP macro)
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
//`define SPcalcLocalVarDecl \
|
||||
// real phib, G_0, Vsbstar, cfloc, thesatloc, axloc, alploc; \
|
||||
// real Vsbx, xg, Dnsub, Gf, Gf2, inv_Gf2, xi, inv_xi, Ux, xn_s, delta_ns, margin, x_s, delta_1s, xi0s, xi1s; \
|
||||
// real xi2s, Es, Ds, Ps, Rxcor, xgs, qis, qbs, rhob, GR, Eeffm, Mutmp, Gmob, xitsb, wsat, thesat1, phi_inf; \
|
||||
// real ysat, za, Phi_0, asat, Phi_2, Phi_0_2, Phi0_Phi2, Phi_sat, Vdse, Udse, xn_d, k_ds, delta_nd, x_d, x_ds; \
|
||||
// real pC, qC, dps, xi0d, Ed, Dd, x_m, Em, D_bar, Dm, Pm, xgm, eta_p, sqm, alpha, d0, x_pm, p_pd, q_pd, xi_pd; \
|
||||
// real u_pd, km, km0, qim, qim1, qbm, qeff, qeff1, s1, dL, GdL, Gmob_dL, zsat, Gvsat, Gvsatinv, Voxm, alpha1, H; \
|
||||
// real SP_S_temp, SP_S_temp1, SP_S_temp2; \
|
||||
// real SP_S_yg, SP_S_ysub, SP_S_eta, SP_S_a, SP_S_c, SP_S_tau, SP_S_y0, SP_S_delta0, SP_S_delta1, SP_S_xi0; \
|
||||
// real SP_S_xi1, SP_S_xi2, SP_S_pC, SP_S_qC, SP_xg1, SP_S_A_fac, SP_S_xbar, SP_S_w, SP_S_x1, SP_S_bx, SP_S_b; \
|
||||
// real SP_S_x0;
|
||||
|
||||
// TempInitialize macro: initialize the temperature dependent variables
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define TempInitialize \
|
||||
TKD_sq = TKD * TKD; \
|
||||
delT = TKD - TKR; \
|
||||
rTn = TKR / TKD; \
|
||||
ln_rTn = ln(rTn); \
|
||||
phit = TKD * `KBOL / `QELE; \
|
||||
inv_phit = 1.0 / phit; \
|
||||
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; \
|
||||
phibFac = `MAX(phibFac, 1.0E-3); \
|
||||
\
|
||||
/* parameter for white noise of parasitic resistances */ \
|
||||
nt0 = 4.0 * `KBOL * TKD;
|
||||
|
||||
// TempScaling macro: calculation of temperature dependent variables
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define TempScaling \
|
||||
phib_dc = Eg + DPHIB_i + 2.0 * phit * ln(NEFF_i * pow(phibFac, -0.75) * 4.0e-26); \
|
||||
phib_dc = `MAX(phib_dc, 5.0E-2); \
|
||||
G_0_dc = sqrt(2.0 * `QELE * NEFF_i * EPSSI * inv_phit) / CoxPrime; \
|
||||
\
|
||||
/* Poly-silicon depletion */ \
|
||||
kp = 0.0; \
|
||||
np = 0.0; \
|
||||
if (NP_i > 0.0) begin \
|
||||
arg2max = 8.0e7 / tox_sq; \
|
||||
np = `MAX(NP_i, arg2max); \
|
||||
np = `MAX(5.0e24, np); \
|
||||
kp = 2.0 * CoxPrime * CoxPrime * phit / (`QELE * np * EPSSI); \
|
||||
end \
|
||||
\
|
||||
/* QM corrections */ \
|
||||
qlim2 = 100.0 * phit * phit; \
|
||||
if (QMC_i > 0.0) begin \
|
||||
qb0 = sqrt(phit * G_0_dc * G_0_dc * phib_dc); \
|
||||
dphibq = 0.75 * qq * pow(qb0, `twoThirds); \
|
||||
phib_dc = phib_dc + dphibq; \
|
||||
G_0_dc = G_0_dc * (1.0 + 2.0 * `twoThirds * dphibq / qb0); \
|
||||
end \
|
||||
sqrt_phib_dc = sqrt(phib_dc); \
|
||||
phix_dc = 0.95 * phib_dc; \
|
||||
aphi_dc = 0.0025 * phib_dc * phib_dc; \
|
||||
bphi_dc = aphi_dc; \
|
||||
phix2 = 0.5 * sqrt(bphi_dc); \
|
||||
phix1_dc = `MINA(phix_dc - phix2, 0.0, aphi_dc); \
|
||||
alpha_b = 0.5 * (phib_dc + Eg); \
|
||||
us1 = sqrt(VSBNUD_i + phib_dc) - sqrt_phib_dc; \
|
||||
us21 = sqrt(VSBNUD_i + DVSBNUD_i + phib_dc) - sqrt_phib_dc - us1; \
|
||||
\
|
||||
/* Additional variables for separate surface potential calculation for CV */ \
|
||||
phib_ac = Eg + DPHIB_i + DELVTAC_i + 2.0 * phit * ln(NEFFAC_i * pow(phibFac, -0.75) * 4.0e-26); \
|
||||
phib_ac = `MAX(phib_ac, 5.0E-2); \
|
||||
G_0_ac = sqrt(2.0 * `QELE * NEFFAC_i * EPSSI * inv_phit) / CoxPrime; \
|
||||
\
|
||||
if (QMC_i > 0.0) begin \
|
||||
qb0 = sqrt(phit * G_0_ac * G_0_ac * phib_ac); \
|
||||
dphibq = 0.75 * qq * pow(qb0, `twoThirds); \
|
||||
phib_ac = phib_ac + dphibq; \
|
||||
G_0_ac = G_0_ac * (1.0 + 2.0 * `twoThirds * dphibq / qb0); \
|
||||
end \
|
||||
\
|
||||
phix_ac = 0.95 * phib_ac; \
|
||||
aphi_ac = 0.0025 * phib_ac * phib_ac; \
|
||||
bphi_ac = aphi_ac; \
|
||||
phix2 = 0.5 * sqrt(bphi_ac); \
|
||||
phix1_ac = `MINA(phix_ac - phix2, 0.0, aphi_ac); \
|
||||
\
|
||||
/* Temperature scaling of parameters*/ \
|
||||
VFB_T = VFB_i + STVFB_i * delT * (1.0 + ST2VFB_i * delT)+ DELVTO_i; \
|
||||
\
|
||||
/* Interface states parameters*/ \
|
||||
tf_ct = exp(STCT_i * ln_rTn); \
|
||||
CT_T = CT_i * tf_ct; \
|
||||
CTG_T = CTG_i / rTn; \
|
||||
\
|
||||
/* Mobility parameters */ \
|
||||
tf_bet = exp(STBET_i * ln_rTn); \
|
||||
BETN_T = BETN_i * tf_bet; \
|
||||
BET_i = FACTUO_i * BETN_T * CoxPrime; \
|
||||
THEMU_T = THEMU_i * exp(STTHEMU_i * ln_rTn); \
|
||||
tf_mue = exp(STMUE_i * ln_rTn); \
|
||||
MUE_T = MUE_i * tf_mue; \
|
||||
THECS_T = THECS_i * exp(STTHECS_i * ln_rTn); \
|
||||
tf_cs = exp(STCS_i * ln_rTn); \
|
||||
CS_T = CS_i * tf_cs; \
|
||||
tf_xcor = exp(STXCOR_i * ln_rTn); \
|
||||
XCOR_T = XCOR_i * tf_xcor; \
|
||||
\
|
||||
/* Series resistance */ \
|
||||
tf_ther = exp(STRS_i * ln_rTn); \
|
||||
RS_T = RS_i * tf_ther; \
|
||||
THER_i = 2.0 * BET_i * RS_T; \
|
||||
\
|
||||
/* Velocity saturation */ \
|
||||
tf_thesat = exp(STTHESAT_i * ln_rTn); \
|
||||
THESAT_T = THESAT_i * tf_thesat; \
|
||||
THESATAC_T = THESATAC_i * tf_thesat; \
|
||||
\
|
||||
/* Impact ionization */ \
|
||||
A2_T = A2_i * exp(-STA2_i * ln_rTn); \
|
||||
\
|
||||
/* Noise */ \
|
||||
nt = FNT_i * 4.0 * `KBOL * TKD; \
|
||||
Sfl_prefac = phit * phit * BET_i / Cox_over_q; \
|
||||
\
|
||||
/* Edge transistor */ \
|
||||
if ((SWEDGE_i != 0.0) && (BETNEDGE_i > 0.0)) begin \
|
||||
VFBEDGE_T = VFBEDGE_i + STVFBEDGE_i * delT + DELVTOEDGE_i; \
|
||||
tf_betedge = exp(STBETEDGE_i * ln_rTn); \
|
||||
BETNEDGE_T = BETNEDGE_i * tf_betedge; \
|
||||
BETEDGE_i = FACTUOEDGE_i * BETNEDGE_T * CoxPrime; \
|
||||
phit0edge = phit * (1.0 + CTEDGE_i * rTn); \
|
||||
phibedge = Eg + DPHIBEDGE_i + 2.0 * phit0edge * ln(NEFFEDGE_i * pow(phibFac, -0.75) * 4.0e-26); \
|
||||
phibedge = `MAX(phibedge, 5.0E-2); \
|
||||
Gfedge = sqrt(2.0 * `QELE * NEFFEDGE_i * EPSSI * inv_phit) / CoxPrime; \
|
||||
Gfedge2 = Gfedge * Gfedge; \
|
||||
lnGfedge2 = ln(Gfedge2); \
|
||||
phixedge = 0.95 * phibedge; \
|
||||
aphiedge = 0.0025 * phibedge * phibedge; \
|
||||
bphiedge = aphiedge; \
|
||||
phix2edge = 0.5 * sqrt(bphiedge); \
|
||||
phix1edge = `MINA(phixedge - phix2edge, 0.0, aphiedge); \
|
||||
Sfl_prefac_edge = phit * phit * BETEDGE_i / Cox_over_q; \
|
||||
ntedge = FNTEDGE_i * 4.0 * `KBOL * TKD; \
|
||||
end else begin \
|
||||
VFBEDGE_T = 0.0; \
|
||||
tf_betedge = 1.0; \
|
||||
BETNEDGE_T = 0.0; \
|
||||
BETEDGE_i = 0.0; \
|
||||
phit0edge = phit; \
|
||||
phibedge = 0.0; \
|
||||
Gfedge = 1.0; \
|
||||
Gfedge2 = 1.0; \
|
||||
lnGfedge2 = 0.0; \
|
||||
phixedge = 0.0; \
|
||||
aphiedge = 0.0; \
|
||||
bphiedge = 0.0; \
|
||||
phix2edge = 0.0; \
|
||||
phix1edge = 0.0; \
|
||||
Sfl_prefac_edge = 0.0; \
|
||||
ntedge = 1.0; \
|
||||
end
|
||||
|
||||
// Model's core for currents and charges calculation (initially into PSP103_SPCalculation.include)
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`define SPCalculation \
|
||||
\
|
||||
/* Initialisation of some variables */ \
|
||||
alpha = 0.0; \
|
||||
GdL = 1.0; \
|
||||
dL = 0.0; \
|
||||
qbm = 0.0; \
|
||||
dps = 0.0; \
|
||||
qim = 0.0; \
|
||||
qim1 = 0.0; \
|
||||
H = 1.0; \
|
||||
s1 = 0.0; \
|
||||
eta_p = 1.0; \
|
||||
Gvsat = 1.0; \
|
||||
Gvsatinv = 1.0; \
|
||||
SP_S_x1 = 0.0; \
|
||||
x_s = 0.0; \
|
||||
sqm = 0.0; \
|
||||
xitsb = 0.0; \
|
||||
rhob = 0.0; \
|
||||
Gmob = 1.0; \
|
||||
Gmob_dL = 1.0; \
|
||||
Udse = 0.0; \
|
||||
thesat1 = 0.0; \
|
||||
xgm = 0.0; \
|
||||
\
|
||||
/* Bias definition */ \
|
||||
Vgb1 = Vgs + Vsbstar - VFB_T; \
|
||||
Vsbx = Vsbstar + 0.5 * (Vds - Vdsx); \
|
||||
Vdsp = 2.0 * Vdsx / (1.0 + sqrt(1.0 + CFD_i * Vdsx)); \
|
||||
delVg = cfloc * Vdsp * (1.0 + CFB_i * Vsbx); \
|
||||
dphit1 = PSCE_i * (1.0 + PSCED_i * Vdsx) * (1.0 + PSCEB_i * Vsbx); \
|
||||
Vgb1 = Vgb1 + delVg; \
|
||||
\
|
||||
/* Bias dependent body factor */ \
|
||||
if (DNSUB_i > 0.0) begin \
|
||||
Dnsub = DNSUB_i * `MAXA(0.0, Vgs + Vsb - VNSUB_i, NSLP_i); \
|
||||
Gf = G_0 * sqrt(1.0 + Dnsub); \
|
||||
end else begin \
|
||||
Gf = G_0; \
|
||||
end \
|
||||
Gf2 = Gf * Gf; \
|
||||
inv_Gf2 = 1.0 / Gf2; \
|
||||
\
|
||||
/* Bias dependence of interface states */ \
|
||||
dCTG = 1.0; \
|
||||
if (CTG_i > 0.0) begin \
|
||||
xgct = 2.0 * Vgb1 * inv_phit; \
|
||||
temp1 = Gf2 + xgct; \
|
||||
temp2 = `MAXA((temp1 + xgct), 0.0, 5.0); \
|
||||
xsct0 = 0.5 * (temp1 - Gf * sqrt(temp2)); \
|
||||
xbct = phib * inv_phit; \
|
||||
xsbstar = Vsbx * inv_phit; \
|
||||
temp1 = xbct + xsbstar + 2.0; \
|
||||
xsct = `MINA(xsct0, temp1, 5.0); \
|
||||
temp2 = CTG_T * (xsct - (1.0 + CTB_i) * (0.5 * xbct + xsbstar)); \
|
||||
`expl_low(temp2, dCTG) \
|
||||
end \
|
||||
ct_fact = 1.0 + CT_T * dCTG; \
|
||||
phit1 = phit * ct_fact * (1.0 + dphit1); \
|
||||
inv_phit1 = 1.0 / phit1; \
|
||||
xg = Vgb1 * inv_phit1; \
|
||||
\
|
||||
/* Surface potential at source side */ \
|
||||
xi = 1.0 + Gf * `invSqrt2; \
|
||||
inv_xi = 1.0 / xi; \
|
||||
Ux = Vsbstar * inv_phit1; \
|
||||
xn_s = phib * inv_phit1 + Ux; \
|
||||
if (xn_s < `se) \
|
||||
delta_ns = exp(-xn_s); \
|
||||
else \
|
||||
delta_ns = `ke / `P3(xn_s - `se); \
|
||||
margin = 1.0e-5 * xi; \
|
||||
\
|
||||
`sp_s(x_s, xg, xn_s, delta_ns) \
|
||||
x_d = x_s; \
|
||||
x_m = x_s; \
|
||||
x_ds = 0.0; \
|
||||
\
|
||||
/* Core PSP current calculation */ \
|
||||
Vdsat_lim = 3.912023005 * phit1; \
|
||||
if (xg <= 0.0) begin \
|
||||
qis = 0.0; \
|
||||
xgm = xg - x_s; \
|
||||
Voxm = xgm * phit1; \
|
||||
qeff1 = Voxm; \
|
||||
Vdsat = Vdsat_lim; \
|
||||
Vdse = Vds; \
|
||||
end else begin /* (xg > 0) */ \
|
||||
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); \
|
||||
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; \
|
||||
end else if (x_s > (xn_s - `se05)) begin \
|
||||
delta_1s = exp(x_s - xn_s); \
|
||||
Es = delta_ns / delta_1s; \
|
||||
end else begin \
|
||||
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); \
|
||||
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; \
|
||||
end else begin \
|
||||
Ps = x_s - 1.0 + Es; \
|
||||
sqm = sqrt(Ps); \
|
||||
alpha = 1.0 + 0.5 * (Gf * (1.0 - Es) / sqm); \
|
||||
end \
|
||||
Em = Es; \
|
||||
Ed = Em; \
|
||||
Dm = Ds; \
|
||||
Dd = Dm; \
|
||||
\
|
||||
/* Drain saturation voltage */ \
|
||||
Rxcor = (1.0 + 0.2 * XCOR_T * Vsbx) / (1.0 + XCOR_T * Vsbx); \
|
||||
if (Ds > `ke05) begin \
|
||||
xgs = Gf * sqrt(Ps + Ds); \
|
||||
qis = Gf2 * Ds * phit1 / (xgs + Gf * sqm); \
|
||||
qbs = sqm * Gf * phit1; \
|
||||
if (RSB_i < 0.0) begin \
|
||||
rhob = 1.0 / (1.0 - RSB_i * Vsbx); \
|
||||
end else begin \
|
||||
rhob = 1.0 + RSB_i * Vsbx; \
|
||||
end \
|
||||
if (RSG_i < 0.0) begin \
|
||||
temp = 1.0 - RSG_i * qis; \
|
||||
end else begin \
|
||||
temp = 1.0 / (1.0 + RSG_i * qis); \
|
||||
end \
|
||||
GR = THER_i * (rhob * temp * qis); \
|
||||
Eeffm = E_eff0 * (qbs + eta_mu * qis); \
|
||||
temp1 = ln(Ps / (Ps + Ds + 1.0e-14)); \
|
||||
Mutmp = pow(Eeffm * MUE_T, THEMU_T) + CS_T * exp(0.5 * THECS_T * temp1); \
|
||||
Gmob = (1.0 + Mutmp + GR) * Rxcor; \
|
||||
if (THESATB_i < 0.0) begin \
|
||||
xitsb = 1.0 / (1.0 - THESATB_i * Vsbx); \
|
||||
end else begin \
|
||||
xitsb = 1.0 + THESATB_i * Vsbx; \
|
||||
end \
|
||||
temp2 = qis * xitsb; \
|
||||
wsat = 100.0 * (temp2 / (100.0 + temp2)); \
|
||||
if (THESATG_i < 0.0) begin \
|
||||
temp = 1.0 / (1.0 - THESATG_i * wsat); \
|
||||
end else begin \
|
||||
temp = 1.0 + THESATG_i * wsat; \
|
||||
end \
|
||||
thesat1 = thesatloc * (temp / Gmob); \
|
||||
phi_inf = qis / alpha + phit1; \
|
||||
ysat = thesat1 * phi_inf * `invSqrt2; \
|
||||
if (CHNL_TYPE==`PMOS) begin \
|
||||
ysat = ysat / sqrt(1.0 + ysat); \
|
||||
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)))); \
|
||||
asat = xgs + 0.5 * Gf2; \
|
||||
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); \
|
||||
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; \
|
||||
end \
|
||||
temp = pow(Vds / Vdsat, axloc); \
|
||||
temp1 = -1.0 / axloc; \
|
||||
Vdse = Vds * pow(1.0 + temp, temp1); \
|
||||
\
|
||||
/* Surface potential at drain side */ \
|
||||
Udse = Vdse * inv_phit1; \
|
||||
xn_d = xn_s + Udse; \
|
||||
if (Udse < `se) begin \
|
||||
k_ds = exp(-Udse); \
|
||||
end else begin \
|
||||
k_ds = `ke / `P3(Udse - `se); \
|
||||
end \
|
||||
delta_nd = delta_ns * k_ds; \
|
||||
\
|
||||
`sp_s_d(x_d, xg, xn_d, delta_nd) \
|
||||
x_ds = x_d - x_s; \
|
||||
\
|
||||
/* Approximations for extremely small x_ds: capacitance calculation */ \
|
||||
if (x_ds < 1.0e-10) begin \
|
||||
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))); \
|
||||
x_d = x_s + x_ds; \
|
||||
end \
|
||||
dps = x_ds * phit1; \
|
||||
\
|
||||
xi0d = x_d * x_d / (2.0 + x_d * x_d); \
|
||||
if (x_d < `se05) begin \
|
||||
Ed = exp(-x_d); \
|
||||
if (x_d < 1.0e-5) begin \
|
||||
Dd = `oneSixth * delta_nd * x_d * x_d * x_d * (1.0 + 1.75 * x_d); \
|
||||
end else begin \
|
||||
Dd = delta_nd * (1.0 / Ed - x_d - 1.0 - xi0d); \
|
||||
end \
|
||||
end else begin \
|
||||
if (x_d > (xn_d - `se05)) begin \
|
||||
temp = exp(x_d - xn_d); \
|
||||
Ed = delta_nd / temp; \
|
||||
Dd = temp - delta_nd * (x_d + 1.0 + xi0d); \
|
||||
end else begin \
|
||||
Ed = `ke05 / `P3(x_d - `se05); \
|
||||
temp = `ke05 / `P3(xn_d - x_d - `se05); \
|
||||
Dd = temp - delta_nd * (x_d + 1.0 + xi0d); \
|
||||
end \
|
||||
end \
|
||||
\
|
||||
/* Mid-point surface potential */ \
|
||||
x_m = 0.5 * (x_s + x_d); \
|
||||
Em = 0.0; \
|
||||
temp = Ed * Es; \
|
||||
if (temp > 0.0) begin \
|
||||
Em = sqrt(temp); \
|
||||
end \
|
||||
D_bar = 0.5 * (Ds + Dd); \
|
||||
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)))); \
|
||||
xgm = Gf * sqrt(Dm + Pm); \
|
||||
\
|
||||
/* 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); \
|
||||
end else begin \
|
||||
Pm = x_m - 1.0 + Em; \
|
||||
xgm = Gf * sqrt(Dm + Pm); \
|
||||
\
|
||||
/* Polysilicon depletion */ \
|
||||
if (kp > 0.0) begin \
|
||||
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); \
|
||||
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)); \
|
||||
u_pd = q_pd * p_pd / (p_pd * p_pd - xi_pd * q_pd); \
|
||||
x_m = x_m + u_pd; \
|
||||
km = exp(u_pd); \
|
||||
Em = Em / km; \
|
||||
Dm = Dm * km; \
|
||||
Pm = x_m - 1.0 + Em; \
|
||||
xgm = Gf * sqrt(Dm + Pm); \
|
||||
km0 = 1.0 - Em + 2.0 * (xgm * eta_p * inv_Gf2); \
|
||||
x_ds = x_ds * km * (d0 + D_bar) / (km0 + km * D_bar); \
|
||||
dps = x_ds * phit1; \
|
||||
end /* (kp > 0.0) */ \
|
||||
sqm = sqrt(Pm); \
|
||||
alpha = eta_p + 0.5 * (Gf * (1.0 - Em) / sqm); \
|
||||
end \
|
||||
\
|
||||
/* Potential midpoint inversion charge */ \
|
||||
qim = phit1 * (Gf2 * Dm / (xgm + Gf * sqm)); \
|
||||
qim1 = qim + phit1 * alpha; \
|
||||
qbm = sqm * Gf * phit1; \
|
||||
\
|
||||
/* Series resistance */ \
|
||||
if (RSG_i < 0.0) begin \
|
||||
temp = 1.0 - RSG_i * qim; \
|
||||
end else begin \
|
||||
temp = 1.0 / (1.0 + RSG_i * qim); \
|
||||
end \
|
||||
GR = THER_i * (rhob * temp * qim); \
|
||||
\
|
||||
/* Mobility reduction */ \
|
||||
qeff = qbm + eta_mu * qim; \
|
||||
qeff1 = qbm + eta_mu1 * qim; \
|
||||
Eeffm = E_eff0 * qeff; \
|
||||
temp1 = ln(Pm / (Pm + Dm + 1.0e-14)); \
|
||||
Mutmp = pow(Eeffm * MUE_T, THEMU_T) + CS_T * exp(0.5 * THECS_T * temp1); \
|
||||
Gmob = (1.0 + Mutmp + GR) * Rxcor; \
|
||||
\
|
||||
/* Channel length modulation */ \
|
||||
s1 = ln((1.0 + (Vds - dps) * inv_VP) / (1.0 + (Vdse - dps) * inv_VP)); \
|
||||
dL = alploc * s1; \
|
||||
GdL = 1.0 / (1.0 + dL + dL * dL); \
|
||||
\
|
||||
/* Velocity saturation */ \
|
||||
temp2 = qim * xitsb; \
|
||||
wsat = 100.0 * (temp2 / (100.0 + temp2)); \
|
||||
Gmob_dL = Gmob * GdL; \
|
||||
if (THESATG_i < 0.0) begin \
|
||||
temp = 1.0 / (1.0 - THESATG_i * wsat); \
|
||||
end else begin \
|
||||
temp = 1.0 + THESATG_i * wsat; \
|
||||
end \
|
||||
thesat1 = thesatloc * (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))); \
|
||||
Gvsatinv = 1.0 / Gvsat; \
|
||||
\
|
||||
/* Variables for calculation of intrinsic charges and gate current */ \
|
||||
Voxm = xgm * phit1; \
|
||||
temp = Gmob_dL * Gvsatinv; \
|
||||
alpha1 = alpha * (1.0 + 0.5 * (zsat * temp * temp)); \
|
||||
H = temp * qim1 / alpha1; \
|
||||
\
|
||||
end /* (xg > 0) */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,123 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: PSP103_nqs_macrodefs.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
//////////////////////////////////////////
|
||||
//
|
||||
// Macros used in PSP-NQS
|
||||
//
|
||||
//////////////////////////////////////////
|
||||
|
||||
// Function to calculate bulk charge from surface potential
|
||||
`define PhiToQb(phi,Qb_tmp) \
|
||||
if (abs(phi) <= margin_ac) \
|
||||
Qb_tmp = -0.70710678 * phi * Gf_ac * (1.0 - `oneSixth * phi * (1.0 - `oneSixth * phi)); \
|
||||
else begin \
|
||||
`expl((-phi), temp) \
|
||||
Qb_tmp = Gf_ac * sqrt(temp + phi - 1.0); \
|
||||
if (phi > margin_ac) \
|
||||
Qb_tmp = -Qb_tmp; \
|
||||
end
|
||||
|
||||
// Function used in fq-macro
|
||||
`define PhiTod2Qis(xphi,d2Qis) \
|
||||
if (abs(xphi) <= margin_ac) begin \
|
||||
Qb_tmp = -0.70710678 * xphi * Gf_ac * (1.0 - `oneSixth * xphi * (1.0 - `oneSixth * xphi)); \
|
||||
dQbs = -0.70710678 * Gf_ac * (1.0 - `oneThird * xphi * (1.0 - 0.25 * xphi)); \
|
||||
d2Qis = -0.235702 * Gf_ac * (1.0 - 0.5 * xphi); \
|
||||
end else begin \
|
||||
`expl((-xphi),temp) \
|
||||
Qb_tmp = Gf_ac * sqrt(temp + xphi - 1.0); \
|
||||
if (xphi > margin_ac) \
|
||||
Qb_tmp = -Qb_tmp; \
|
||||
dQbs = 0.5 * Gf_ac * Gf_ac * (1.0 - temp) / Qb_tmp; \
|
||||
d2Qis = (dQbs * dQbs - 0.5 * Gf_ac * Gf_ac) / Qb_tmp + dQbs; \
|
||||
end
|
||||
|
||||
|
||||
// Function used in QiToPhi
|
||||
`define sps(sp, xg) \
|
||||
if (abs(xg) <= marginp) begin \
|
||||
sp = xg / a_factrp; \
|
||||
end else begin \
|
||||
if (xg < -marginp) begin \
|
||||
NQS_yg = -xg; \
|
||||
NQS_z = 1.25 * NQS_yg / a_factrp; \
|
||||
NQS_eta = (NQS_z + 10.0 - sqrt((NQS_z - 6.0) * (NQS_z - 6.0) + 64.0)) * 0.5; \
|
||||
NQS_a = (NQS_yg - NQS_eta) * (NQS_yg - NQS_eta) + Gp2 * (NQS_eta + 1.0); \
|
||||
NQS_c = 2.0 * (NQS_yg - NQS_eta) - Gp2; \
|
||||
NQS_tau = ln(NQS_a / Gp2) - NQS_eta; \
|
||||
`sigma(NQS_a, NQS_c, NQS_tau, NQS_eta, NQS_y0) \
|
||||
`expl(NQS_y0, NQS_D0) \
|
||||
NQS_xi = 1.0 - Gp2 * NQS_D0 * 0.5; \
|
||||
NQS_p = 2.0 * (NQS_yg - NQS_y0) + Gp2 * (NQS_D0 - 1.0); \
|
||||
NQS_q = (NQS_yg - NQS_y0) * (NQS_yg - NQS_y0) + Gp2 * (NQS_y0 + 1.0 - NQS_D0); \
|
||||
NQS_temp = NQS_p * NQS_p - 4.0 * NQS_xi * NQS_q; \
|
||||
NQS_w = 2.0 * NQS_q / (NQS_p + sqrt(NQS_temp)); \
|
||||
sp = -(NQS_y0 + NQS_w); \
|
||||
end else begin \
|
||||
NQS_xg1 = 1.0 / ( 1.25 + 7.32464877560822e-01 * Gp); \
|
||||
NQS_A_fac = (1.25 * a_factrp * NQS_xg1 - 1.0) * NQS_xg1; \
|
||||
NQS_xbar = xg / a_factrp * (1.0 + NQS_A_fac * xg); \
|
||||
`expl(-NQS_xbar, NQS_temp) \
|
||||
NQS_w = 1.0 - NQS_temp; \
|
||||
NQS_x0 = xg + Gp2 * 0.5 - Gp * sqrt(xg + Gp2 * 0.25 - NQS_w); \
|
||||
`expl((-NQS_x0), NQS_D0) \
|
||||
NQS_xi = 1.0 - Gp2 * 0.5 * NQS_D0; \
|
||||
NQS_p = 2.0 * (xg - NQS_x0) + Gp2 * (1.0 - NQS_D0); \
|
||||
NQS_q = (xg - NQS_x0) * (xg - NQS_x0) - Gp2 * (NQS_x0 - 1.0 + NQS_D0); \
|
||||
NQS_temp = NQS_p * NQS_p - 4.0 * NQS_xi * NQS_q; \
|
||||
NQS_u = 2.0 * NQS_q / (NQS_p + sqrt(NQS_temp)); \
|
||||
sp = NQS_x0 + NQS_u; \
|
||||
end \
|
||||
end
|
||||
|
||||
|
||||
// Function to calculate surface potential from inversion charge
|
||||
`define QiToPhi(Qi,xg,xphi) \
|
||||
temp = Qi / pd + xg; \
|
||||
`sps(xphi,temp)
|
||||
|
||||
// Calculation of fk
|
||||
`define fq(Qi,xg,dQy,d2Qy,fk) \
|
||||
`QiToPhi(Qi, xg, xphi) \
|
||||
`PhiTod2Qis(xphi, d2Qis) \
|
||||
dQis = pd - dQbs; \
|
||||
dQis_1 = 1.0 / dQis; \
|
||||
fQi = Qi * dQis_1 - 1.0; \
|
||||
dfQi = (1.0 - Qi * d2Qis * dQis_1 * dQis_1) * dQis_1; \
|
||||
fk0 = dfQi * dQy * dQy + fQi * d2Qy; \
|
||||
dpsy2 = dQy * dQy * dQis_1 * dQis_1; \
|
||||
zsat_nqs = thesat2 * dpsy2; \
|
||||
if (CHNL_TYPE == `PMOS) \
|
||||
zsat_nqs = zsat_nqs / (1.0 + thesat1_ac * dps_ac); \
|
||||
temp = sqrt(1.0 + 2.0 * zsat_nqs); \
|
||||
Fvsat = 2.0 / (1.0 + temp); \
|
||||
temp1 = d2Qy - dpsy2 * d2Qis; \
|
||||
fk = Fvsat * (fk0 - zsat_nqs * fQi * temp1 * Fvsat / temp);
|
||||
|
||||
// Interpolation of surface potential along channel
|
||||
`define Phiy(y) \
|
||||
x_m_ac + H_ac * (1.0 - sqrt(1.0 - 2.0 * dps_ac / H_ac * ((y) - ym))) * inv_phit1
|
||||
|
|
@ -0,0 +1,913 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: PSP103_parlist.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// Special model parameters and switch parameters
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// Special model parameters, some are also simulator global variables
|
||||
`MPInb(LEVEL ,103 ,"" ,"Model level")
|
||||
`MPIty(TYPE ,1 ,"" ,"Channel type parameter, +1=NMOS -1=PMOS")
|
||||
`MPRco(TR ,21.0 ,"degC" ,-273.0 ,inf ,"nominal (reference) temperature")
|
||||
|
||||
// Switch parameters that turn models or effects on or off
|
||||
`MPIcc(SWGEO ,1 ,"" ,0 ,2 ,"Flag for geometrical model, 0=local, 1=global, 2=binning")
|
||||
`MPIcc(SWIGATE ,0 ,"" ,0 ,2 ,"Flag for gate current: 0=off, 1=on, 2=on+overlaps-parameters")
|
||||
`MPIcc(SWIMPACT ,0 ,"" ,0 ,1 ,"Flag for impact ionization current, 0=turn off II")
|
||||
`MPIcc(SWGIDL ,0 ,"" ,0 ,1 ,"Flag for GIDL current, 0=turn off IGIDL")
|
||||
`MPIcc(SWJUNCAP ,0 ,"" ,0 ,3 ,"Flag for juncap, 0=turn off juncap")
|
||||
`MPIcc(SWJUNASYM ,0 ,"" ,0 ,1 ,"Flag for asymmetric junctions; 0=symmetric, 1=asymmetric")
|
||||
`MPIcc(SWNUD ,0 ,"" ,0 ,2 ,"Flag for NUD-effect; 0=off, 1=on, 2=on+CV-correction")
|
||||
`MPIcc(SWEDGE ,0 ,"" ,0 ,1 ,"Flag for drain current of edge transistors; 0=off, 1=on")
|
||||
`MPIcc(SWDELVTAC ,0 ,"" ,0 ,1 ,"Flag for separate capacitance calculation; 0=off, 1=on")
|
||||
`MPIcc(SWQSAT ,0 ,"" ,0 ,1 ,"Flag for separate capacitance calculation in saturation only: 0=off, 1=on")
|
||||
`MPIcc(SWQPART ,0 ,"" ,0 ,1 ,"Flag for drain/source charge partitioning; 0=linear distribution, 1=source")
|
||||
`MPIcc(SWIGN ,1 ,"" ,0 ,1 ,"Flag for induced gate noise; 0=off, 1=on")
|
||||
`ifdef NQSmodel
|
||||
`MPIcc(SWNQS ,0 ,"" ,0 ,9 ,"Flag for NQS, 0=off, 1, 2, 3, 5, or 9=number of collocation points")
|
||||
`endif // NQSmodel
|
||||
`MPRcz(QMC ,1.0 ,"" ,"Quantum-mechanical correction factor")
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// PSP local model parameters
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// Process parameters
|
||||
`MPRnb(VFB ,-1.0 ,"V" ,"Flat band voltage at TR")
|
||||
`MPRnb(STVFB ,5.0e-4 ,"V/K" ,"Temperature dependence of VFB")
|
||||
`MPRnb(ST2VFB ,0.0 ,"K^-1" ,"Quadratic temperature dependence of VFB")
|
||||
`MPRco(TOX ,2.0e-09 ,"m" ,1.0e-10 ,inf ,"Gate oxide thickness")
|
||||
`MPRco(EPSROX ,3.9 ,"" ,1.0 ,inf ,"Relative permittivity of gate dielectric")
|
||||
`MPRcc(NEFF ,5.0e23 ,"m^-3" ,1.0e20 ,1.0e26 ,"Effective substrate doping")
|
||||
`MPRcz(FACNEFFAC ,1.0 ,"" ,"Pre-factor for effective substrate doping in separate charge calculation")
|
||||
`MPRco(GFACNUD ,1.0 ,"" ,0.01 ,inf ,"Body-factor change due to NUD-effect")
|
||||
`MPRcz(VSBNUD ,0.0 ,"V" ,"Lower Vsb value for NUD-effect")
|
||||
`MPRco(DVSBNUD ,1.0 ,"V" ,0.1 ,inf ,"Vsb-range for NUD-effect")
|
||||
`MPRnb(VNSUB ,0.0 ,"V" ,"Effective doping bias-dependence parameter")
|
||||
`MPRco(NSLP ,0.05 ,"V" ,1.0e-3 ,inf ,"Effective doping bias-dependence parameter")
|
||||
`MPRcc(DNSUB ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Effective doping bias-dependence parameter")
|
||||
`MPRnb(DPHIB ,0.0 ,"V" ,"Offset parameter for PHIB")
|
||||
`MPRnb(DELVTAC ,0.0 ,"V" ,"Offset parameter for PHIB in separate charge calculation")
|
||||
`MPRcz(NP ,1.0e26 ,"m^-3" ,"Gate poly-silicon doping")
|
||||
`MPRco(TOXOV ,2.0e-09 ,"m" ,1.0e-10 ,inf ,"Overlap oxide thickness")
|
||||
`MPRco(TOXOVD ,2.0e-09 ,"m" ,1.0e-10 ,inf ,"Overlap oxide thickness for drain side")
|
||||
`MPRcc(NOV ,5.0e25 ,"m^-3" ,1.0e23 ,1.0e27 ,"Effective doping of overlap region")
|
||||
`MPRcc(NOVD ,5.0e25 ,"m^-3" ,1.0e23 ,1.0e27 ,"Effective doping of overlap region for drain side")
|
||||
|
||||
// Interface states parameters: PSP 103.6
|
||||
`MPRcz(CT ,0.0 ,"" ,"Interface states factor")
|
||||
`MPRcz(CTG ,0.0 ,"" ,"Gate voltage dependence of interface states factor")
|
||||
`MPRnb(CTB ,0.0 ,"" ,"Bulk voltage dependence of interface states factor")
|
||||
`MPRnb(STCT ,1.0 ,"" ,"Geometry-independent temperature dependence of CT")
|
||||
|
||||
// DIBL parameters
|
||||
`MPRcz(CF ,0.0 ,"" ,"DIBL-parameter")
|
||||
`MPRcz(CFAC ,0.0 ,"" ,"DIBL-parameter of charge model when SWQSAT=1")
|
||||
`MPRcz(CFD ,0.0 ,"V^-1" ,"Drain voltage dependence of CF")
|
||||
`MPRcc(CFB ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Back bias dependence of CF")
|
||||
|
||||
// Subthreshold slope parameters of short channel transistor
|
||||
`MPRcz(PSCE ,0.0 ,"" ,"Subthreshold slope coefficient for short channel transistor")
|
||||
`MPRcc(PSCEB ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of subthreshold slope coefficient for short channel transistor")
|
||||
`MPRcz(PSCED ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of subthreshold slope coefficient for short channel transistor")
|
||||
|
||||
// Mobility parameters
|
||||
`MPRcz(BETN ,7.0e-2 ,"m^2/V/s" ,"Channel aspect ratio times zero-field mobility")
|
||||
`MPRnb(STBET ,1.0 ,"" ,"Temperature dependence of BETN")
|
||||
`MPRcz(MUE ,0.5 ,"m/V" ,"Mobility reduction coefficient at TR")
|
||||
`MPRnb(STMUE ,0.0 ,"" ,"Temperature dependence of MUE")
|
||||
`MPRcz(THEMU ,1.5 ,"" ,"Mobility reduction exponent at TR")
|
||||
`MPRnb(STTHEMU ,1.5 ,"" ,"Temperature dependence of THEMU")
|
||||
`MPRcz(CS ,0.0 ,"" ,"Coulomb scattering parameter at TR")
|
||||
`MPRnb(STCS ,0.0 ,"" ,"Temperature dependence of CS")
|
||||
`MPRcz(THECS ,2.0 ,"" ,"Coulomb scattering exponent at TR")
|
||||
`MPRnb(STTHECS ,0.0 ,"" ,"Temperature dependence of THECS")
|
||||
`MPRcz(XCOR ,0.0 ,"V^-1" ,"Non-universality factor")
|
||||
`MPRnb(STXCOR ,0.0 ,"" ,"Temperature dependence of XCOR")
|
||||
`MPRcz(FETA ,1.0 ,"" ,"Effective field parameter")
|
||||
|
||||
// Series-resistance parameters (for resistance modeling as part of intrinsic mobility reduction)
|
||||
`MPRcz(RS ,30.0 ,"Ohm" ,"Series resistance at TR")
|
||||
`MPRnb(STRS ,1.0 ,"" ,"Temperature dependence of RS")
|
||||
`MPRcc(RSB ,0.0 ,"V^-1" ,-0.5 ,1.0 ,"Back-bias dependence of series resistance")
|
||||
`MPRco(RSG ,0.0 ,"V^-1" ,-0.5 ,inf ,"Gate-bias dependence of series resistance")
|
||||
|
||||
// Velocity saturation parameters
|
||||
`MPRcz(THESAT ,1.0 ,"V^-1" ,"Velocity saturation parameter at TR")
|
||||
`MPRcz(THESATAC ,1.0 ,"V^-1" ,"Velocity saturation parameter at TR of charge model when SWQSAT=1")
|
||||
`MPRnb(STTHESAT ,1.0 ,"" ,"Temperature dependence of THESAT")
|
||||
`MPRcc(THESATB ,0.0 ,"V^-1" ,-0.5 ,1.0 ,"Back-bias dependence of velocity saturation")
|
||||
`MPRco(THESATG ,0.0 ,"V^-1" ,-0.5 ,inf ,"Gate-bias dependence of velocity saturation")
|
||||
|
||||
// Saturation voltage parameters
|
||||
`MPRco(AX ,3.0 ,"" ,2.0 ,inf ,"Linear/saturation transition factor")
|
||||
`MPRco(AXAC ,3.0 ,"" ,2.0 ,inf ,"Linear/saturation transition factor of charge model when SWQSAT=1")
|
||||
|
||||
// Channel length modulation (CLM) parameters
|
||||
`MPRcz(ALP ,0.01 ,"" ,"CLM pre-factor")
|
||||
`MPRcz(ALPAC ,0.01 ,"" ,"CLM pre-factor of charge model when SWQSAT=1")
|
||||
`MPRcz(ALP1 ,0.0 ,"V" ,"CLM enhancement factor above threshold")
|
||||
`MPRcz(ALP2 ,0.0 ,"V^-1" ,"CLM enhancement factor below threshold")
|
||||
`MPRco(VP ,0.05 ,"V" ,1.0e-10 ,inf ,"CLM logarithm dependence factor")
|
||||
|
||||
// Impact ionization (II) parameters
|
||||
`MPRcz(A1 ,1.0 ,"" ,"Impact-ionization pre-factor")
|
||||
`MPRcz(A2 ,10.0 ,"V" ,"Impact-ionization exponent at TR")
|
||||
`MPRnb(STA2 ,0.0 ,"V" ,"Temperature dependence of A2")
|
||||
`MPRcz(A3 ,1.0 ,"" ,"Saturation-voltage dependence of impact-ionization")
|
||||
`MPRcz(A4 ,0.0 ,"V^-0.5" ,"Back-bias dependence of impact-ionization")
|
||||
|
||||
// Gate current parameters
|
||||
`MPRcc(GCO ,0.0 ,"" ,-10.0 ,10.0 ,"Gate tunnelling energy adjustment")
|
||||
`MPRcz(IGINV ,0.0 ,"A" ,"Gate channel current pre-factor")
|
||||
`MPRcz(IGOV ,0.0 ,"A" ,"Gate overlap current pre-factor")
|
||||
`MPRcz(IGOVD ,0.0 ,"A" ,"Gate overlap current pre-factor for drain side")
|
||||
`MPRnb(STIG ,2.0 ,"" ,"Temperature dependence of IGINV and IGOV")
|
||||
`MPRcc(GC2 ,0.375 ,"" ,0.0 ,10.0 ,"Gate current slope factor")
|
||||
`MPRcc(GC3 ,0.063 ,"" ,-2.0 ,2.0 ,"Gate current curvature factor")
|
||||
`MPRcc(GC2OV ,0.375 ,"" ,0.0 ,10.0 ,"Gate overlap current slope factor, used only when SWIGATE=2")
|
||||
`MPRcc(GC3OV ,0.063 ,"" ,-2.0 ,2.0 ,"Gate overlap current curvature factor, used only when SWIGATE=2")
|
||||
`MPRco(CHIB ,3.1 ,"V" ,1.0 ,inf ,"Tunnelling barrier height")
|
||||
|
||||
// Gate Induced Drain/Source Leakage (GIDL) parameters
|
||||
`MPRcz(AGIDL ,0.0 ,"A/V^3" ,"GIDL pre-factor")
|
||||
`MPRcz(AGIDLD ,0.0 ,"A/V^3" ,"GIDL pre-factor for drain side")
|
||||
`MPRcz(BGIDL ,41.0 ,"V" ,"GIDL probability factor at TR")
|
||||
`MPRcz(BGIDLD ,41.0 ,"V" ,"GIDL probability factor at TR for drain side")
|
||||
`MPRnb(STBGIDL ,0.0 ,"V/K" ,"Temperature dependence of BGIDL")
|
||||
`MPRnb(STBGIDLD ,0.0 ,"V/K" ,"Temperature dependence of BGIDL for drain side")
|
||||
`MPRnb(CGIDL ,0.0 ,"" ,"Back-bias dependence of GIDL")
|
||||
`MPRnb(CGIDLD ,0.0 ,"" ,"Back-bias dependence of GIDL for drain side")
|
||||
|
||||
// Charge model parameters
|
||||
`MPRcz(COX ,1.0e-14 ,"F" ,"Oxide capacitance for intrinsic channel")
|
||||
`MPRcz(CGOV ,1.0e-15 ,"F" ,"Oxide capacitance for gate-drain/source overlap")
|
||||
`MPRcz(CGOVD ,1.0e-15 ,"F" ,"Oxide capacitance for gate-drain overlap")
|
||||
`MPRcz(CGBOV ,0.0 ,"F" ,"Oxide capacitance for gate-bulk overlap")
|
||||
`MPRcz(CFR ,0.0 ,"F" ,"Outer fringe capacitance")
|
||||
`MPRcz(CFRD ,0.0 ,"F" ,"Outer fringe capacitance for drain side")
|
||||
|
||||
// Noise parameters
|
||||
`MPRcz(FNT ,1.0 ,"" ,"Thermal noise coefficient")
|
||||
`MPRcz(FNTEXC ,0.0 ,"" ,"Excess noise coefficient")
|
||||
`MPRcz(NFA ,8.0e22 ,"V^-1/m^4" ,"First coefficient of flicker noise")
|
||||
`MPRcz(NFB ,3.0e07 ,"V^-1/m^2" ,"Second coefficient of flicker noise")
|
||||
`MPRcz(NFC ,0.0 ,"V^-1" ,"Third coefficient of flicker noise")
|
||||
`MPRcz(EF ,1.0 ,"" ,"Flicker noise frequency exponent")
|
||||
|
||||
// Edge transistor parameters: PSP 103.4
|
||||
`MPRnb(VFBEDGE ,-1.0 ,"V" ,"Flat band voltage of edge transistors at TR")
|
||||
`MPRnb(STVFBEDGE ,5.0e-4 ,"V/K" ,"Temperature dependence of VFBEDGE")
|
||||
`MPRnb(DPHIBEDGE ,0.0 ,"V" ,"Offset parameter for PHIB of edge transistors")
|
||||
`MPRcc(NEFFEDGE ,5.0e23 ,"m^-3" ,1.0e20 ,1.0e26 ,"Effective substrate doping of edge transistors")
|
||||
`MPRcz(CTEDGE ,0.0 ,"" ,"Interface states factor of edge transistors")
|
||||
`MPRcz(BETNEDGE ,5.0e-4 ,"m^2/V/s" ,"Channel aspect ratio times zero-field mobility of edge transistor")
|
||||
`MPRnb(STBETEDGE ,1.0 ,"" ,"Temperature dependence of BETNEDGE")
|
||||
`MPRcz(PSCEEDGE ,0.0 ,"" ,"Subthreshold slope coefficient for short channel edge transistors")
|
||||
`MPRcc(PSCEBEDGE ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of subthreshold slope coefficient for short channel edge transistors")
|
||||
`MPRcz(PSCEDEDGE ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of subthreshold slope coefficient for short channel edge transistors")
|
||||
`MPRcz(CFEDGE ,0.0 ,"" ,"DIBL parameter of edge transistors")
|
||||
`MPRcz(CFDEDGE ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of DIBL-parameter of edge transistors")
|
||||
`MPRcc(CFBEDGE ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of DIBL-parameter of edge transistors")
|
||||
`MPRcz(FNTEDGE ,1.0 ,"" ,"Thermal noise coefficient of edge transistors")
|
||||
`MPRcz(NFAEDGE ,8.0e22 ,"V^-1/m^4" ,"First coefficient of flicker noise of edge transistors")
|
||||
`MPRcz(NFBEDGE ,3.0e07 ,"V^-1/m^2" ,"Second coefficient of flicker noise of edge transistors")
|
||||
`MPRcz(NFCEDGE ,0.0 ,"V^-1" ,"Third coefficient of flicker noise of edge transistors")
|
||||
`MPRcz(EFEDGE ,1.0 ,"" ,"Flicker noise frequency exponent of edge transistors")
|
||||
|
||||
// NQS parameters
|
||||
`ifdef NQSmodel
|
||||
`MPRcz(MUNQS ,1.0 ,"" ,"Relative mobility for NQS modelling")
|
||||
`endif // NQSmodel
|
||||
|
||||
// Parasitic resistance parameters
|
||||
`MPRcz(RG ,0.0 ,"Ohm" ,"Gate resistance")
|
||||
`MPRcz(RSE ,0.0 ,"Ohm" ,"External source resistance")
|
||||
`MPRcz(RDE ,0.0 ,"Ohm" ,"External drain resistance")
|
||||
`MPRcz(RBULK ,0.0 ,"Ohm" ,"Bulk resistance between node BP and BI")
|
||||
`MPRcz(RWELL ,0.0 ,"Ohm" ,"Well resistance between node BI and B")
|
||||
`MPRcz(RJUNS ,0.0 ,"Ohm" ,"Source-side bulk resistance between node BI and BS")
|
||||
`MPRcz(RJUND ,0.0 ,"Ohm" ,"Drain-side bulk resistance between node BI and BD")
|
||||
|
||||
// Self heating effect parameters
|
||||
`ifdef SelfHeating
|
||||
`MPRcz(RTH ,0.0 ,"K/W" ,"Thermal resistance")
|
||||
`MPRcz(CTH ,0.0 ,"J/K" ,"Thermal capacitance")
|
||||
`MPRnb(STRTH ,0.0 ,"" ,"Temperature sensitivity of RTH")
|
||||
`endif // SelfHeating
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// PSP global model parameters
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// Process Parameters
|
||||
`MPRnb(LVARO ,0.0 ,"m" ,"Geom. independent difference between actual and programmed gate length")
|
||||
`MPRnb(LVARL ,0.0 ,"" ,"Length dependence of LVAR")
|
||||
`MPRnb(LVARW ,0.0 ,"" ,"Width dependence of LVAR")
|
||||
`MPRnb(LAP ,0.0 ,"m" ,"Effective channel length reduction per side")
|
||||
`MPRnb(WVARO ,0.0 ,"m" ,"Geom. independent difference between actual and programmed field-oxide opening")
|
||||
`MPRnb(WVARL ,0.0 ,"" ,"Length dependence of WVAR")
|
||||
`MPRnb(WVARW ,0.0 ,"" ,"Width dependence of WVAR")
|
||||
`MPRnb(WOT ,0.0 ,"m" ,"Effective channel width reduction per side")
|
||||
`MPRnb(DLQ ,0.0 ,"m" ,"Effective channel length reduction for CV")
|
||||
`MPRnb(DWQ ,0.0 ,"m" ,"Effective channel width reduction for CV")
|
||||
`MPRnb(VFBO ,-1.0 ,"V" ,"Geometry-independent flat-band voltage at TR")
|
||||
`MPRnb(VFBL ,0.0 ,"V" ,"Length dependence of flat-band voltage")
|
||||
`MPRnb(VFBW ,0.0 ,"V" ,"Width dependence of flat-band voltage")
|
||||
`MPRnb(VFBLW ,0.0 ,"V" ,"Area dependence of flat-band voltage")
|
||||
`MPRnb(STVFBO ,5.0e-4 ,"V/K" ,"Geometry-independent temperature dependence of VFB")
|
||||
`MPRnb(STVFBL ,0.0 ,"V/K" ,"Length dependence of temperature dependence of VFB")
|
||||
`MPRnb(STVFBW ,0.0 ,"V/K" ,"Width dependence of temperature dependence of VFB")
|
||||
`MPRnb(STVFBLW ,0.0 ,"V/K" ,"Area dependence of temperature dependence of VFB")
|
||||
`MPRnb(ST2VFBO ,0.0 ,"K^-1" ,"Quadratic temperature dependence of VFB")
|
||||
`MPRco(TOXO ,2.0e-9 ,"m" ,1.0e-10 ,inf ,"Gate oxide thickness")
|
||||
`MPRco(EPSROXO ,3.9 ,"" ,1.0 ,inf ,"Relative permittivity of gate dielectric")
|
||||
`MPRco(NSUBO ,3.0e23 ,"m^-3" ,1.0e20 ,inf ,"Geometry independent substrate doping")
|
||||
`MPRnb(NSUBW ,0.0 ,"" ,"Width dependence of background doping NSUBO due to segregation")
|
||||
`MPRco(WSEG ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Char. length of segregation of background doping NSUBO")
|
||||
`MPRcz(NPCK ,1.0e24 ,"m^-3" ,"Pocket doping level")
|
||||
`MPRnb(NPCKW ,0.0 ,"" ,"Width dependence of pocket doping NPCK due to segregation")
|
||||
`MPRco(WSEGP ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Char. length of segregation of pocket doping NPCK")
|
||||
`MPRco(LPCK ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Char. length of lateral doping profile")
|
||||
`MPRnb(LPCKW ,0.0 ,"" ,"Width dependence of char. length of lateral doping profile")
|
||||
`MPRnb(FOL1 ,0.0 ,"" ,"First length dependence coefficient for short channel body effect")
|
||||
`MPRnb(FOL2 ,0.0 ,"" ,"Second length dependence coefficient for short channel body effect")
|
||||
`MPRnb(FACNEFFACO ,1.0 ,"" ,"Geom. independent pre-factor for effective substrate doping in separate charge calculation")
|
||||
`MPRnb(FACNEFFACL ,0.0 ,"" ,"Length dependence of FACNEFFAC")
|
||||
`MPRnb(FACNEFFACW ,0.0 ,"" ,"Width dependence of FACNEFFAC")
|
||||
`MPRnb(FACNEFFACLW ,0.0 ,"" ,"Area dependence of FACNEFFAC")
|
||||
`MPRnb(GFACNUDO ,1.0 ,"" ,"Geom. independent body-factor change due to NUD-effect")
|
||||
`MPRnb(GFACNUDL ,0.0 ,"" ,"Length dependence of GFACNUD")
|
||||
`MPRnb(GFACNUDLEXP ,1.0 ,"" ,"Exponent for length dependence of GFACNUD")
|
||||
`MPRnb(GFACNUDW ,0.0 ,"" ,"Width dependence of GFACNUD")
|
||||
`MPRnb(GFACNUDLW ,0.0 ,"" ,"Area dependence of GFACNUD")
|
||||
`MPRnb(VSBNUDO ,0.0 ,"V" ,"Lower Vsb value for NUD-effect")
|
||||
`MPRnb(DVSBNUDO ,1.0 ,"V" ,"Vsb range for NUD-effect")
|
||||
`MPRnb(VNSUBO ,0.0 ,"V" ,"Effective doping bias-dependence parameter")
|
||||
`MPRnb(NSLPO ,0.05 ,"V" ,"Effective doping bias-dependence parameter")
|
||||
`MPRnb(DNSUBO ,0.0 ,"V^-1" ,"Effective doping bias-dependence parameter")
|
||||
`MPRnb(DPHIBO ,0.0 ,"V" ,"Geometry independent offset of PHIB")
|
||||
`MPRnb(DPHIBL ,0.0 ,"V" ,"Length dependence offset of PHIB")
|
||||
`MPRnb(DPHIBLEXP ,1.0 ,"" ,"Exponent for length dependence of offset of PHIB")
|
||||
`MPRnb(DPHIBW ,0.0 ,"V" ,"Width dependence of offset of PHIB")
|
||||
`MPRnb(DPHIBLW ,0.0 ,"V" ,"Area dependence of offset of PHIB")
|
||||
`MPRnb(DELVTACO ,0.0 ,"V" ,"Geom. independent offset parameter for PHIB in separate charge calculation")
|
||||
`MPRnb(DELVTACL ,0.0 ,"V" ,"Length dependence of DELVTAC")
|
||||
`MPRnb(DELVTACLEXP ,1.0 ,"" ,"Exponent for length dependence of offset of DELVTAC")
|
||||
`MPRnb(DELVTACW ,0.0 ,"V" ,"Width dependence of DELVTAC")
|
||||
`MPRnb(DELVTACLW ,0.0 ,"V" ,"Area dependence of DELVTAC")
|
||||
`MPRnb(NPO ,1.0e26 ,"m^-3" ,"Geometry-independent gate poly-silicon doping")
|
||||
`MPRnb(NPL ,0.0 ,"" ,"Length dependence of gate poly-silicon doping")
|
||||
`MPRco(TOXOVO ,2.0e-9 ,"m" ,1.0e-10 ,inf ,"Overlap oxide thickness")
|
||||
`MPRco(TOXOVDO ,2.0e-9 ,"m" ,1.0e-10 ,inf ,"Overlap oxide thickness for drain side")
|
||||
`MPRcz(LOV ,0.0 ,"m" ,"Overlap length for gate/drain and gate/source overlap capacitance")
|
||||
`MPRcz(LOVD ,0.0 ,"m" ,"Overlap length for gate/drain overlap capacitance")
|
||||
`MPRnb(NOVO ,5.0e25 ,"m^-3" ,"Effective doping of overlap region")
|
||||
`MPRnb(NOVDO ,5.0e25 ,"m^-3" ,"Effective doping of overlap region for drain side")
|
||||
|
||||
// Interface states parameters: PSP 103.6
|
||||
`MPRnb(CTO ,0.0 ,"" ,"Geometry-independent interface states factor")
|
||||
`MPRnb(CTL ,0.0 ,"" ,"Length dependence of interface states factor")
|
||||
`MPRnb(CTLEXP ,1.0 ,"" ,"Exponent for length dependence of interface states factor")
|
||||
`MPRnb(CTW ,0.0 ,"" ,"Width dependence of interface states factor")
|
||||
`MPRnb(CTLW ,0.0 ,"" ,"Area dependence of interface states factor")
|
||||
`MPRcz(CTGO ,0.0 ,"" ,"Gate voltage dependence of interface states factor")
|
||||
`MPRnb(CTBO ,0.0 ,"" ,"Bulk voltage dependence of interface states factor")
|
||||
`MPRnb(STCTO ,1.0 ,"" ,"Geometry-independent temperature dependence of CT")
|
||||
|
||||
// DIBL Parameters
|
||||
`MPRnb(CFL ,0.0 ,"" ,"Length dependence of DIBL-parameter")
|
||||
`MPRnb(CFLEXP ,2.0 ,"" ,"Exponent for length dependence of CF")
|
||||
`MPRnb(CFW ,0.0 ,"" ,"Width dependence of CF")
|
||||
`MPRnb(CFACL ,0.0 ,"" ,"Length dependence of DIBL-parameter of charge model when SWQSAT=1")
|
||||
`MPRnb(CFACLEXP ,2.0 ,"" ,"Exponent for length dependence of CF")
|
||||
`MPRnb(CFACW ,0.0 ,"" ,"Width dependence of CF")
|
||||
`MPRcz(CFDO ,0.0 ,"V^-1" ,"Drain voltage dependence of CF")
|
||||
`MPRnb(CFBO ,0.0 ,"V^-1" ,"Back-bias dependence of CF")
|
||||
|
||||
// Subthreshold slope parameters of short channel transistor
|
||||
`MPRnb(PSCEL ,0.0 ,"" ,"Length dependence of subthreshold slope coefficient for short channel transistor")
|
||||
`MPRnb(PSCELEXP ,2.0 ,"" ,"Exponent for length dependence of subthreshold slope coefficient for short channel transistor")
|
||||
`MPRnb(PSCEW ,0.0 ,"" ,"Exponent for length dependence of subthreshold slope coefficient for short channel transistor")
|
||||
`MPRcc(PSCEBO ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of subthreshold slope coefficient for short channel transistor")
|
||||
`MPRcz(PSCEDO ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of subthreshold slope coefficient for short channel transistor")
|
||||
|
||||
// Mobility Parameters
|
||||
`MPRcz(UO ,5.0e-2 ,"m^2/V/s" ,"Zero-field mobility at TR")
|
||||
`MPRnb(FBET1 ,0.0 ,"" ,"Relative mobility decrease due to first lateral profile")
|
||||
`MPRnb(FBET1W ,0.0 ,"" ,"Width dependence of relative mobility decrease due to first lateral profile")
|
||||
`MPRco(LP1 ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Mobility-related characteristic length of first lateral profile")
|
||||
`MPRnb(LP1W ,0.0 ,"" ,"Width dependence of mobility-related characteristic length of first lateral profile")
|
||||
`MPRnb(FBET2 ,0.0 ,"" ,"Relative mobility decrease due to second lateral profile")
|
||||
`MPRco(LP2 ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Mobility-related characteristic length of second lateral profile")
|
||||
`MPRnb(BETW1 ,0.0 ,"" ,"First higher-order width scaling coefficient of BETN")
|
||||
`MPRnb(BETW2 ,0.0 ,"" ,"Second higher-order width scaling coefficient of BETN")
|
||||
`MPRco(WBET ,1.0e-9 ,"m" ,1.0e-10 ,inf ,"Characteristic width for width scaling of BETN")
|
||||
`MPRnb(STBETO ,1.0 ,"" ,"Geometry independent temperature dependence of BETN")
|
||||
`MPRnb(STBETL ,0.0 ,"" ,"Length dependence of temperature dependence of BETN")
|
||||
`MPRnb(STBETW ,0.0 ,"" ,"Width dependence of temperature dependence of BETN")
|
||||
`MPRnb(STBETLW ,0.0 ,"" ,"Area dependence of temperature dependence of BETN")
|
||||
`MPRnb(MUEO ,0.5 ,"m/V" ,"Geometry independent mobility reduction coefficient at TR")
|
||||
`MPRnb(MUEW ,0.0 ,"" ,"Width dependence of mobility reduction coefficient at TR")
|
||||
`MPRnb(STMUEO ,0.0 ,"" ,"Temperature dependence of MUE")
|
||||
`MPRnb(THEMUO ,1.5 ,"" ,"Mobility reduction exponent at TR")
|
||||
`MPRnb(STTHEMUO ,1.5 ,"" ,"Temperature dependence of THEMU")
|
||||
`MPRnb(CSO ,0.0 ,"" ,"Geometry independent coulomb scattering parameter at TR")
|
||||
`MPRnb(CSL ,0.0 ,"" ,"Length dependence of CS")
|
||||
`MPRnb(CSLEXP ,1.0 ,"" ,"Exponent for length dependence of CS")
|
||||
`MPRnb(CSW ,0.0 ,"" ,"Width dependence of CS")
|
||||
`MPRnb(CSLW ,0.0 ,"" ,"Area dependence of CS")
|
||||
`MPRnb(STCSO ,0.0 ,"" ,"Temperature dependence of CS")
|
||||
`MPRcz(THECSO ,2.0 ,"" ,"Coulomb scattering exponent at TR")
|
||||
`MPRnb(STTHECSO ,0.0 ,"" ,"Temperature dependence of THECS")
|
||||
`MPRnb(XCORO ,0.0 ,"V^-1" ,"Geometry independent non-universality parameter")
|
||||
`MPRnb(XCORL ,0.0 ,"" ,"Length dependence of non-universality parameter")
|
||||
`MPRnb(XCORW ,0.0 ,"" ,"Width dependence of non-universality parameter")
|
||||
`MPRnb(XCORLW ,0.0 ,"" ,"Area dependence of non-universality parameter")
|
||||
`MPRnb(STXCORO ,0.0 ,"" ,"Temperature dependence of XCOR")
|
||||
`MPRnb(FETAO ,1.0 ,"" ,"Effective field parameter")
|
||||
|
||||
// Series Resistance
|
||||
`MPRnb(RSW1 ,50.0 ,"Ohm" ,"Source/drain series resistance for 1 um wide channel at TR")
|
||||
`MPRnb(RSW2 ,0.0 ,"" ,"Higher-order width scaling of RS")
|
||||
`MPRnb(STRSO ,1.0 ,"" ,"Temperature dependence of RS")
|
||||
`MPRnb(RSBO ,0.0 ,"V^-1" ,"Back-bias dependence of series resistance")
|
||||
`MPRnb(RSGO ,0.0 ,"V^-1" ,"Gate-bias dependence of series resistance")
|
||||
|
||||
// Velocity Saturation
|
||||
`MPRnb(THESATO ,0.0 ,"V^-1" ,"Geometry independent velocity saturation parameter at TR")
|
||||
`MPRnb(THESATL ,0.05 ,"V^-1" ,"Length dependence of THESAT")
|
||||
`MPRnb(THESATLEXP ,1.0 ,"" ,"Exponent for length dependence of THESAT")
|
||||
`MPRnb(THESATW ,0.0 ,"" ,"Width dependence of THESAT")
|
||||
`MPRnb(THESATLW ,0.0 ,"" ,"Area dependence of THESAT")
|
||||
`MPRnb(THESATACO ,0.0 ,"V^-1" ,"Geometry independent velocity saturation parameter at TR of charge model when SWQSAT=1")
|
||||
`MPRnb(THESATACL ,0.05 ,"V^-1" ,"Length dependence of THESATAC")
|
||||
`MPRnb(THESATACLEXP ,1.0 ,"" ,"Exponent for length dependence of THESATAC")
|
||||
`MPRnb(THESATACW ,0.0 ,"" ,"Width dependence of THESATAC")
|
||||
`MPRnb(THESATACLW ,0.0 ,"" ,"Area dependence of THESATAC")
|
||||
`MPRnb(STTHESATO ,1.0 ,"" ,"Geometry independent temperature dependence of THESAT")
|
||||
`MPRnb(STTHESATL ,0.0 ,"" ,"Length dependence of temperature dependence of THESAT")
|
||||
`MPRnb(STTHESATW ,0.0 ,"" ,"Width dependence of temperature dependence of THESAT")
|
||||
`MPRnb(STTHESATLW ,0.0 ,"" ,"Area dependence of temperature dependence of THESAT")
|
||||
`MPRnb(THESATBO ,0.0 ,"V^-1" ,"Back-bias dependence of velocity saturation")
|
||||
`MPRnb(THESATGO ,0.0 ,"V^-1" ,"Gate-bias dependence of velocity saturation")
|
||||
|
||||
// Saturation Voltage
|
||||
`MPRnb(AXO ,18.0 ,"" ,"Geometry independent linear/saturation transition factor")
|
||||
`MPRcz(AXL ,0.4 ,"" ,"Length dependence of AX")
|
||||
`MPRnb(AXACO ,18.0 ,"" ,"Geometry independent linear/saturation transition factor of charge model when SWQSAT=1")
|
||||
`MPRcz(AXACL ,0.4 ,"" ,"Length dependence of AXAC")
|
||||
|
||||
// Channel Length Modulation
|
||||
`MPRnb(ALPL ,5.0e-4 ,"" ,"Length dependence of ALP")
|
||||
`MPRnb(ALPLEXP ,1.0 ,"" ,"Exponent for length dependence of ALP")
|
||||
`MPRnb(ALPW ,0.0 ,"" ,"Width dependence of ALP")
|
||||
`MPRnb(ALPACL ,5.0e-4 ,"" ,"Length dependence of ALPAC")
|
||||
`MPRnb(ALPACLEXP ,1.0 ,"" ,"Exponent for length dependence of ALPAC")
|
||||
`MPRnb(ALPACW ,0.0 ,"" ,"Width dependence of ALPAC")
|
||||
`MPRnb(ALP1L1 ,0.0 ,"V" ,"Length dependence of CLM enhancement factor above threshold")
|
||||
`MPRnb(ALP1LEXP ,0.5 ,"" ,"Exponent for length dependence of ALP1")
|
||||
`MPRcz(ALP1L2 ,0.0 ,"" ,"Second_order length dependence of ALP1")
|
||||
`MPRnb(ALP1W ,0.0 ,"" ,"Width dependence of ALP1")
|
||||
`MPRnb(ALP2L1 ,0.0 ,"V^-1" ,"Length dependence of CLM enhancement factor below threshold")
|
||||
`MPRnb(ALP2LEXP ,0.5 ,"" ,"Exponent for length dependence of ALP2")
|
||||
`MPRcz(ALP2L2 ,0.0 ,"" ,"Second_order length dependence of ALP2")
|
||||
`MPRnb(ALP2W ,0.0 ,"" ,"Width dependence of ALP2")
|
||||
`MPRnb(VPO ,0.05 ,"V" ,"CLM logarithmic dependence parameter")
|
||||
|
||||
// Weak-avalanche parameters
|
||||
`MPRnb(A1O ,1.0 ,"" ,"Geometry independent impact-ionization pre-factor")
|
||||
`MPRnb(A1L ,0.0 ,"" ,"Length dependence of A1")
|
||||
`MPRnb(A1W ,0.0 ,"" ,"Width dependence of A1")
|
||||
`MPRnb(A2O ,10.0 ,"V" ,"Impact-ionization exponent at TR")
|
||||
`MPRnb(STA2O ,0.0 ,"V" ,"Temperature dependence of A2")
|
||||
`MPRnb(A3O ,1.0 ,"" ,"Geometry independent saturation-voltage dependence of II")
|
||||
`MPRnb(A3L ,0.0 ,"" ,"Length dependence of A3")
|
||||
`MPRnb(A3W ,0.0 ,"" ,"Width dependence of A3")
|
||||
`MPRnb(A4O ,0.0 ,"V^-0.5" ,"Geometry independent back-bias dependence of II")
|
||||
`MPRnb(A4L ,0.0 ,"" ,"Length dependence of A4")
|
||||
`MPRnb(A4W ,0.0 ,"" ,"Width dependence of A4")
|
||||
|
||||
// Gate current parameters
|
||||
`MPRnb(GCOO ,0.0 ,"" ,"Gate tunnelling energy adjustment")
|
||||
`MPRnb(IGINVLW ,0.0 ,"A" ,"Gate channel current pre-factor for 1 um^2 channel area")
|
||||
`MPRnb(IGOVW ,0.0 ,"A" ,"Gate overlap current pre-factor for 1 um wide channel")
|
||||
`MPRnb(IGOVDW ,0.0 ,"A" ,"Gate overlap current pre-factor for 1 um wide channel for drain side")
|
||||
`MPRnb(STIGO ,2.0 ,"" ,"Temperature dependence of IGINV and IGOV")
|
||||
`MPRnb(GC2O ,0.375 ,"" ,"Gate current slope factor")
|
||||
`MPRnb(GC3O ,0.063 ,"" ,"Gate current curvature factor")
|
||||
`MPRnb(GC2OVO ,0.375 ,"" ,"Gate overlap current slope factor, used only when SWIGATE=2")
|
||||
`MPRnb(GC3OVO ,0.063 ,"" ,"Gate overlap current curvature factor, used only when SWIGATE=2")
|
||||
`MPRnb(CHIBO ,3.1 ,"V" ,"Tunnelling barrier height")
|
||||
|
||||
// Gate-induced drain leakage parameters
|
||||
`MPRnb(AGIDLW ,0.0 ,"A/V^3" ,"Width dependence of GIDL pre-factor")
|
||||
`MPRnb(AGIDLDW ,0.0 ,"A/V^3" ,"Width dependence of GIDL pre-factor for drain side")
|
||||
`MPRnb(BGIDLO ,41.0 ,"V" ,"GIDL probability factor at TR")
|
||||
`MPRnb(BGIDLDO ,41.0 ,"V" ,"GIDL probability factor at TR for drain side")
|
||||
`MPRnb(STBGIDLO ,0.0 ,"V/K" ,"Temperature dependence of BGIDL")
|
||||
`MPRnb(STBGIDLDO ,0.0 ,"V/K" ,"Temperature dependence of BGIDL for drain side")
|
||||
`MPRnb(CGIDLO ,0.0 ,"" ,"Back-bias dependence of GIDL")
|
||||
`MPRnb(CGIDLDO ,0.0 ,"" ,"Back-bias dependence of GIDL for drain side")
|
||||
|
||||
// Charge Model Parameters
|
||||
`MPRnb(CGBOVL ,0.0 ,"F" ,"Oxide capacitance for gate-bulk overlap for 1 um long channel")
|
||||
`MPRnb(CFRW ,0.0 ,"F" ,"Outer fringe capacitance for 1 um wide channel")
|
||||
`MPRnb(CFRDW ,0.0 ,"F" ,"Outer fringe capacitance for 1 um wide channel for drain side")
|
||||
|
||||
// Noise Model Parameters
|
||||
`MPRnb(FNTO ,1.0 ,"" ,"Thermal noise coefficient")
|
||||
`MPRcz(FNTEXCL ,0.0 ,"" ,"Length dependence coefficient of excess noise")
|
||||
`MPRnb(NFALW ,8.0e22 ,"V^-1/m^4" ,"First coefficient of flicker noise for 1 um^2 channel area")
|
||||
`MPRnb(NFBLW ,3.0e7 ,"V^-1/m^2" ,"Second coefficient of flicker noise for 1 um^2 channel area")
|
||||
`MPRnb(NFCLW ,0.0 ,"V^-1" ,"Third coefficient of flicker noise for 1 um^2 channel area")
|
||||
`MPRnb(EFO ,1.0 ,"" ,"Flicker noise frequency exponent")
|
||||
`MPRnb(LINTNOI ,0.0 ,"m" ,"Length offset for flicker noise")
|
||||
`MPRnb(ALPNOI ,2.0 ,"" ,"Exponent for length offset for flicker noise")
|
||||
|
||||
// Edge transistor parameters: PSP 103.4
|
||||
`MPRcz(WEDGE ,1.0e-8 ,"m" ,"Electrical width of edge transistor per side")
|
||||
`MPRcz(WEDGEW ,0.0 ,"" ,"Width dependence of edge WEDGE")
|
||||
`MPRnb(VFBEDGEO ,-1.0 ,"V" ,"Geometry-independent flat-band voltage of edge transistors at TR")
|
||||
`MPRnb(STVFBEDGEO ,5.0e-4 ,"V/K" ,"Geometry-independent temperature dependence of VFBEDGE")
|
||||
`MPRnb(STVFBEDGEL ,0.0 ,"V/K" ,"Length dependence of temperature dependence of VFBEDGE")
|
||||
`MPRnb(STVFBEDGEW ,0.0 ,"V/K" ,"Width dependence of temperature dependence of VFBEDGE")
|
||||
`MPRnb(STVFBEDGELW ,0.0 ,"V/K" ,"Area dependence of temperature dependence of VFBEDGE")
|
||||
`MPRnb(DPHIBEDGEO ,0.0 ,"V" ,"Geometry independent of edge transistor PHIB offset")
|
||||
`MPRnb(DPHIBEDGEL ,0.0 ,"V" ,"Length dependence of edge transistor PHIB offset")
|
||||
`MPRnb(DPHIBEDGELEXP ,1.0 ,"" ,"Exponent for length dependence of edge transistor PHIB offset")
|
||||
`MPRnb(DPHIBEDGEW ,0.0 ,"V" ,"Width dependence of edge transistor PHIB offset")
|
||||
`MPRnb(DPHIBEDGELW ,0.0 ,"V" ,"Area dependence of edge transistor PHIB offset")
|
||||
`MPRco(NSUBEDGEO ,5.0e23 ,"m^-3" ,1.0e20 ,inf ,"Geometry independent substrate doping of edge transistors")
|
||||
`MPRnb(NSUBEDGEL ,0.0 ,"" ,"Length dependence of edge transistor substrate doping")
|
||||
`MPRnb(NSUBEDGELEXP ,1.0 ,"" ,"Exponent for length dependence of edge transistor substrate doping")
|
||||
`MPRnb(NSUBEDGEW ,0.0 ,"" ,"Width dependence of edge transistor substrate doping")
|
||||
`MPRnb(NSUBEDGELW ,0.0 ,"" ,"Area dependence of edge transistor substrate doping")
|
||||
`MPRnb(CTEDGEO ,0.0 ,"" ,"Geometry-independent interface states factor of edge transistors")
|
||||
`MPRnb(CTEDGEL ,0.0 ,"" ,"Length dependence of interface states factor of edge transistors")
|
||||
`MPRnb(CTEDGELEXP ,1.0 ,"" ,"Exponent for length dependence of interface states factor of edge transistors")
|
||||
`MPRnb(FBETEDGE ,0.0 ,"" ,"Length dependence of edge transistor mobility")
|
||||
`MPRco(LPEDGE ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Exponent for length dependence of edge transistor mobility")
|
||||
`MPRnb(BETEDGEW ,0.0 ,"" ,"Width scaling coefficient of edge transistor mobility")
|
||||
`MPRnb(STBETEDGEO ,1.0 ,"" ,"Geometry independent temperature dependence of BETNEDGE")
|
||||
`MPRnb(STBETEDGEL ,0.0 ,"" ,"Length dependence of temperature dependence of BETNEDGE")
|
||||
`MPRnb(STBETEDGEW ,0.0 ,"" ,"Width dependence of temperature dependence of BETNEDGE")
|
||||
`MPRnb(STBETEDGELW ,0.0 ,"" ,"Area dependence of temperature dependence of BETNEDGE")
|
||||
`MPRnb(PSCEEDGEL ,0.0 ,"" ,"Length dependence of subthreshold slope coefficient for short channel edge transistors")
|
||||
`MPRnb(PSCEEDGELEXP ,2.0 ,"" ,"Exponent for length dependence of subthreshold slope coefficient for short channel edge transistors")
|
||||
`MPRnb(PSCEEDGEW ,0.0 ,"" ,"Exponent for length dependence of subthreshold slope coefficient for short channel edge transistor")
|
||||
`MPRcc(PSCEBEDGEO ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of subthreshold slope coefficient for short channel edge transistors")
|
||||
`MPRcz(PSCEDEDGEO ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of subthreshold slope coefficient for short channel edge transistors")
|
||||
`MPRnb(CFEDGEL ,0.0 ,"" ,"Length dependence of DIBL-parameter of edge transistors")
|
||||
`MPRnb(CFEDGELEXP ,2.0 ,"" ,"Exponent for length dependence of DIBL-parameter of edge transistors")
|
||||
`MPRnb(CFEDGEW ,0.0 ,"" ,"Width dependence of DIBL-parameter of edge transistors")
|
||||
`MPRcz(CFDEDGEO ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of DIBL-parameter of edge transistors")
|
||||
`MPRcc(CFBEDGEO ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of DIBL-parameter of edge transistors")
|
||||
`MPRnb(FNTEDGEO ,1.0 ,"" ,"Thermal noise coefficient")
|
||||
`MPRnb(NFAEDGELW ,8.0e22 ,"V^-1/m^4" ,"First coefficient of flicker noise for 1 um^2 channel area")
|
||||
`MPRnb(NFBEDGELW ,3.0e7 ,"V^-1/m^2" ,"Second coefficient of flicker noise for 1 um^2 channel area")
|
||||
`MPRnb(NFCEDGELW ,0.0 ,"V^-1" ,"Third coefficient of flicker noise for 1 um^2 channel area")
|
||||
`MPRnb(EFEDGEO ,1.0 ,"" ,"Flicker noise frequency exponent")
|
||||
|
||||
// Well proximity effect Parameters
|
||||
`MPRnb(KVTHOWEO ,0.0 ,"" ,"Geometrical independent threshold shift parameter")
|
||||
`MPRnb(KVTHOWEL ,0.0 ,"" ,"Length dependent threshold shift parameter")
|
||||
`MPRnb(KVTHOWEW ,0.0 ,"" ,"Width dependent threshold shift parameter")
|
||||
`MPRnb(KVTHOWELW ,0.0 ,"" ,"Area dependent threshold shift parameter")
|
||||
`MPRnb(KUOWEO ,0.0 ,"" ,"Geometrical independent mobility degradation factor")
|
||||
`MPRnb(KUOWEL ,0.0 ,"" ,"Length dependent mobility degradation factor")
|
||||
`MPRnb(KUOWEW ,0.0 ,"" ,"Width dependent mobility degradation factor")
|
||||
`MPRnb(KUOWELW ,0.0 ,"" ,"Area dependent mobility degradation factor")
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// PSP global model parameters (binning)
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// Process parameters
|
||||
`MPRnb(POVFB ,-1.0 ,"V" ,"Coefficient for the geometry independent part of VFB")
|
||||
`MPRnb(PLVFB ,0.0 ,"V" ,"Coefficient for the length dependence of VFB")
|
||||
`MPRnb(PWVFB ,0.0 ,"V" ,"Coefficient for the width dependence of VFB")
|
||||
`MPRnb(PLWVFB ,0.0 ,"V" ,"Coefficient for the length times width dependence of VFB")
|
||||
`MPRnb(POSTVFB ,5.0e-4 ,"V/K" ,"Coefficient for the geometry independent part of STVFB")
|
||||
`MPRnb(PLSTVFB ,0.0 ,"V/K" ,"Coefficient for the length dependence of STVFB")
|
||||
`MPRnb(PWSTVFB ,0.0 ,"V/K" ,"Coefficient for the width dependence of STVFB")
|
||||
`MPRnb(PLWSTVFB ,0.0 ,"V/K" ,"Coefficient for the length times width dependence of STVFB")
|
||||
`MPRnb(POST2VFB ,0.0 ,"K^-1" ,"Coefficient for the geometry independent part of ST2VFB")
|
||||
`MPRnb(POTOX ,2.0e-9 ,"m" ,"Coefficient for the geometry independent part of TOX")
|
||||
`MPRnb(POEPSROX ,3.9 ,"" ,"Coefficient for the geometry independent part of EPSOX")
|
||||
`MPRnb(PONEFF ,5.0e23 ,"m^-3" ,"Coefficient for the geometry independent part of NEFF")
|
||||
`MPRnb(PLNEFF ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NEFF")
|
||||
`MPRnb(PWNEFF ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NEFF")
|
||||
`MPRnb(PLWNEFF ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NEFF")
|
||||
`MPRnb(POFACNEFFAC ,1.0 ,"" ,"Coefficient for the geometry independent part of FACNEFFAC")
|
||||
`MPRnb(PLFACNEFFAC ,0.0 ,"" ,"Coefficient for the length dependence of FACNEFFAC")
|
||||
`MPRnb(PWFACNEFFAC ,0.0 ,"" ,"Coefficient for the width dependence of FACNEFFAC")
|
||||
`MPRnb(PLWFACNEFFAC ,0.0 ,"" ,"Coefficient for the length times width dependence of FACNEFFAC")
|
||||
`MPRnb(POGFACNUD ,1.0 ,"" ,"Coefficient for the geometry independent part of GFACNUD")
|
||||
`MPRnb(PLGFACNUD ,0.0 ,"" ,"Coefficient for the length dependence of GFACNUD")
|
||||
`MPRnb(PWGFACNUD ,0.0 ,"" ,"Coefficient for the width dependence of GFACNUD")
|
||||
`MPRnb(PLWGFACNUD ,0.0 ,"" ,"Coefficient for the length times width dependence of GFACNUD")
|
||||
`MPRnb(POVSBNUD ,0.0 ,"V" ,"Coefficient for the geometry independent part of VSBNUD")
|
||||
`MPRnb(PODVSBNUD ,1.0 ,"V" ,"Coefficient for the geometry independent part of DVSBNUD")
|
||||
`MPRnb(POVNSUB ,0.0 ,"V" ,"Coefficient for the geometry independent part of VNSUB")
|
||||
`MPRnb(PONSLP ,0.05 ,"V" ,"Coefficient for the geometry independent part of NSLP")
|
||||
`MPRnb(PODNSUB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of DNSUB")
|
||||
`MPRnb(PODPHIB ,0.0 ,"V" ,"Coefficient for the geometry independent part of DPHIB")
|
||||
`MPRnb(PLDPHIB ,0.0 ,"V" ,"Coefficient for the length dependence of DPHIB")
|
||||
`MPRnb(PWDPHIB ,0.0 ,"V" ,"Coefficient for the width dependence of DPHIB")
|
||||
`MPRnb(PLWDPHIB ,0.0 ,"V" ,"Coefficient for the length times width dependence of DPHIB")
|
||||
`MPRnb(PODELVTAC ,0.0 ,"V" ,"Coefficient for the geometry independent part of DELVTAC")
|
||||
`MPRnb(PLDELVTAC ,0.0 ,"V" ,"Coefficient for the length dependence of DELVTAC")
|
||||
`MPRnb(PWDELVTAC ,0.0 ,"V" ,"Coefficient for the width dependence of DELVTAC")
|
||||
`MPRnb(PLWDELVTAC ,0.0 ,"V" ,"Coefficient for the length times width dependence of DELVTAC")
|
||||
`MPRnb(PONP ,1.0e26 ,"m^-3" ,"Coefficient for the geometry independent part of NP")
|
||||
`MPRnb(PLNP ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NP")
|
||||
`MPRnb(PWNP ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NP")
|
||||
`MPRnb(PLWNP ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NP")
|
||||
`MPRnb(POTOXOV ,2.0e-09 ,"m" ,"Coefficient for the geometry independent part of TOXOV")
|
||||
`MPRnb(POTOXOVD ,2.0e-09 ,"m" ,"Coefficient for the geometry independent part of TOXOV for drain side")
|
||||
`MPRnb(PONOV ,5.0e25 ,"m^-3" ,"Coefficient for the geometry independent part of NOV")
|
||||
`MPRnb(PLNOV ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NOV")
|
||||
`MPRnb(PWNOV ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NOV")
|
||||
`MPRnb(PLWNOV ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NOV")
|
||||
`MPRnb(PONOVD ,5.0e25 ,"m^-3" ,"Coefficient for the geometry independent part of NOV for drain side")
|
||||
`MPRnb(PLNOVD ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NOV for drain side")
|
||||
`MPRnb(PWNOVD ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NOV for drain side")
|
||||
`MPRnb(PLWNOVD ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NOV for drain side")
|
||||
|
||||
// Interface states parameters
|
||||
`MPRnb(POCT ,0.0 ,"" ,"Coefficient for the geometry independent part of CT")
|
||||
`MPRnb(PLCT ,0.0 ,"" ,"Coefficient for the length dependence of CT")
|
||||
`MPRnb(PWCT ,0.0 ,"" ,"Coefficient for the width dependence of CT")
|
||||
`MPRnb(PLWCT ,0.0 ,"" ,"Coefficient for the length times width dependence of CT")
|
||||
`MPRnb(POCTG ,0.0 ,"" ,"Coefficient for the geometry independent part of CTG")
|
||||
`MPRnb(POCTB ,0.0 ,"" ,"Coefficient for the geometry independent part of CTB")
|
||||
`MPRnb(POSTCT ,1.0 ,"" ,"Coefficient for the geometry independent part of STCT")
|
||||
|
||||
// DIBL parameters
|
||||
`MPRnb(POCF ,0.0 ,"" ,"Coefficient for the geometry independent part of CF")
|
||||
`MPRnb(PLCF ,0.0 ,"" ,"Coefficient for the length dependence of CF")
|
||||
`MPRnb(PWCF ,0.0 ,"" ,"Coefficient for the width dependence of CF")
|
||||
`MPRnb(PLWCF ,0.0 ,"" ,"Coefficient for the length times width dependence of CF")
|
||||
`MPRnb(POCFAC ,0.0 ,"" ,"Coefficient for the geometry independent part of CFAC")
|
||||
`MPRnb(PLCFAC ,0.0 ,"" ,"Coefficient for the length dependence of CFAC")
|
||||
`MPRnb(PWCFAC ,0.0 ,"" ,"Coefficient for the width dependence of CFAC")
|
||||
`MPRnb(PLWCFAC ,0.0 ,"" ,"Coefficient for the length times width dependence of CFAC")
|
||||
`MPRnb(POCFD ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of CFD")
|
||||
`MPRnb(POCFB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of CFB")
|
||||
|
||||
// Subthreshold slope parameters of short channel transistor
|
||||
`MPRnb(POPSCE ,0.0 ,"" ,"Coefficient for the geometry independent part of PSCE")
|
||||
`MPRnb(PLPSCE ,0.0 ,"" ,"Coefficient for the length dependence of PSCE")
|
||||
`MPRnb(PWPSCE ,0.0 ,"" ,"Coefficient for the width dependence of PSCE")
|
||||
`MPRnb(PLWPSCE ,0.0 ,"" ,"Coefficient for the length times width dependence of PSCE")
|
||||
`MPRnb(POPSCEB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of PSCEB")
|
||||
`MPRnb(POPSCED ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of PSCED")
|
||||
|
||||
// Mobility parameters
|
||||
`MPRnb(POBETN ,7.0e-2 ,"m^2/V/s" ,"Coefficient for the geometry independent part of BETN")
|
||||
`MPRnb(PLBETN ,0.0 ,"m^2/V/s" ,"Coefficient for the length dependence of BETN")
|
||||
`MPRnb(PWBETN ,0.0 ,"m^2/V/s" ,"Coefficient for the width dependence of BETN")
|
||||
`MPRnb(PLWBETN ,0.0 ,"m^2/V/s" ,"Coefficient for the length times width dependence of BETN")
|
||||
`MPRnb(POSTBET ,1.0 ,"" ,"Coefficient for the geometry independent part of STBET")
|
||||
`MPRnb(PLSTBET ,0.0 ,"" ,"Coefficient for the length dependence of STBET")
|
||||
`MPRnb(PWSTBET ,0.0 ,"" ,"Coefficient for the width dependence of STBET")
|
||||
`MPRnb(PLWSTBET ,0.0 ,"" ,"Coefficient for the length times width dependence of STBET")
|
||||
`MPRnb(POMUE ,0.5 ,"m/V" ,"Coefficient for the geometry independent part of MUE")
|
||||
`MPRnb(PLMUE ,0.0 ,"m/V" ,"Coefficient for the length dependence of MUE")
|
||||
`MPRnb(PWMUE ,0.0 ,"m/V" ,"Coefficient for the width dependence of MUE")
|
||||
`MPRnb(PLWMUE ,0.0 ,"m/V" ,"Coefficient for the length times width dependence of MUE")
|
||||
`MPRnb(POSTMUE ,0.0 ,"" ,"Coefficient for the geometry independent part of STMUE")
|
||||
`MPRnb(POTHEMU ,1.5 ,"" ,"Coefficient for the geometry independent part of THEMU")
|
||||
`MPRnb(POSTTHEMU ,1.5 ,"" ,"Coefficient for the geometry independent part of STTHEMU")
|
||||
`MPRnb(POCS ,0.0 ,"" ,"Coefficient for the geometry independent part of CS")
|
||||
`MPRnb(PLCS ,0.0 ,"" ,"Coefficient for the length dependence of CS")
|
||||
`MPRnb(PWCS ,0.0 ,"" ,"Coefficient for the width dependence of CS")
|
||||
`MPRnb(PLWCS ,0.0 ,"" ,"Coefficient for the length times width dependence of CS")
|
||||
`MPRnb(POSTCS ,0.0 ,"" ,"Coefficient for the geometry independent part of STCS")
|
||||
`MPRnb(POTHECS ,2.0 ,"" ,"Coefficient for the geometry independent part of THECS")
|
||||
`MPRnb(POSTTHECS ,0.0 ,"" ,"Coefficient for the geometry independent part of STHTECS")
|
||||
`MPRnb(POXCOR ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of XCOR")
|
||||
`MPRnb(PLXCOR ,0.0 ,"V^-1" ,"Coefficient for the length dependence of XCOR")
|
||||
`MPRnb(PWXCOR ,0.0 ,"V^-1" ,"Coefficient for the width dependence of XCOR")
|
||||
`MPRnb(PLWXCOR ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of XCOR")
|
||||
`MPRnb(POSTXCOR ,0.0 ,"" ,"Coefficient for the geometry independent part of STXCOR")
|
||||
`MPRnb(POFETA ,1.0 ,"" ,"Coefficient for the geometry independent part of FETA")
|
||||
|
||||
// Series resistance parameters
|
||||
`MPRnb(PORS ,30.0 ,"Ohm" ,"Coefficient for the geometry independent part of RS")
|
||||
`MPRnb(PLRS ,0.0 ,"Ohm" ,"Coefficient for the length dependence of RS")
|
||||
`MPRnb(PWRS ,0.0 ,"Ohm" ,"Coefficient for the width dependence of RS")
|
||||
`MPRnb(PLWRS ,0.0 ,"Ohm" ,"Coefficient for the length times width dependence of RS")
|
||||
`MPRnb(POSTRS ,1.0 ,"" ,"Coefficient for the geometry independent part of STRS")
|
||||
`MPRnb(PORSB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of RSB")
|
||||
`MPRnb(PORSG ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of RSG")
|
||||
|
||||
// Velocity saturation parameters
|
||||
`MPRnb(POTHESAT ,1.0 ,"V^-1" ,"Coefficient for the geometry independent part of THESAT")
|
||||
`MPRnb(PLTHESAT ,0.0 ,"V^-1" ,"Coefficient for the length dependence of THESAT")
|
||||
`MPRnb(PWTHESAT ,0.0 ,"V^-1" ,"Coefficient for the width dependence of THESAT")
|
||||
`MPRnb(PLWTHESAT ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of THESAT")
|
||||
`MPRnb(POTHESATAC ,1.0 ,"V^-1" ,"Coefficient for the geometry independent part of THESATAC")
|
||||
`MPRnb(PLTHESATAC ,0.0 ,"V^-1" ,"Coefficient for the length dependence of THESATAC")
|
||||
`MPRnb(PWTHESATAC ,0.0 ,"V^-1" ,"Coefficient for the width dependence of THESATAC")
|
||||
`MPRnb(PLWTHESATAC ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of THESATAC")
|
||||
`MPRnb(POSTTHESAT ,1.0 ,"" ,"Coefficient for the geometry independent part of STTHESAT")
|
||||
`MPRnb(PLSTTHESAT ,0.0 ,"" ,"Coefficient for the length dependence of STTHESAT")
|
||||
`MPRnb(PWSTTHESAT ,0.0 ,"" ,"Coefficient for the width dependence of STTHESAT")
|
||||
`MPRnb(PLWSTTHESAT ,0.0 ,"" ,"Coefficient for the length times width dependence of STTHESAT")
|
||||
`MPRnb(POTHESATB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of THESATB")
|
||||
`MPRnb(PLTHESATB ,0.0 ,"V^-1" ,"Coefficient for the length dependence of THESATB")
|
||||
`MPRnb(PWTHESATB ,0.0 ,"V^-1" ,"Coefficient for the width dependence of THESATB")
|
||||
`MPRnb(PLWTHESATB ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of THESATB")
|
||||
`MPRnb(POTHESATG ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of THESATG")
|
||||
`MPRnb(PLTHESATG ,0.0 ,"V^-1" ,"Coefficient for the length dependence of THESATG")
|
||||
`MPRnb(PWTHESATG ,0.0 ,"V^-1" ,"Coefficient for the width dependence of THESATG")
|
||||
`MPRnb(PLWTHESATG ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of THESATG")
|
||||
|
||||
// Saturation voltage parameters
|
||||
`MPRnb(POAX ,3.0 ,"" ,"Coefficient for the geometry independent part of AX")
|
||||
`MPRnb(PLAX ,0.0 ,"" ,"Coefficient for the length dependence of AX")
|
||||
`MPRnb(PWAX ,0.0 ,"" ,"Coefficient for the width dependence of AX")
|
||||
`MPRnb(PLWAX ,0.0 ,"" ,"Coefficient for the length times width dependence of AX")
|
||||
`MPRnb(POAXAC ,3.0 ,"" ,"Coefficient for the geometry independent part of AXAC")
|
||||
`MPRnb(PLAXAC ,0.0 ,"" ,"Coefficient for the length dependence of AXAC")
|
||||
`MPRnb(PWAXAC ,0.0 ,"" ,"Coefficient for the width dependence of AXAC")
|
||||
`MPRnb(PLWAXAC ,0.0 ,"" ,"Coefficient for the length times width dependence of AXAC")
|
||||
|
||||
// Channel length modulation (CLM) parameters
|
||||
`MPRnb(POALP ,1.0e-2 ,"" ,"Coefficient for the geometry independent part of ALP")
|
||||
`MPRnb(PLALP ,0.0 ,"" ,"Coefficient for the length dependence of ALP")
|
||||
`MPRnb(PWALP ,0.0 ,"" ,"Coefficient for the width dependence of ALP")
|
||||
`MPRnb(PLWALP ,0.0 ,"" ,"Coefficient for the length times width dependence of ALP")
|
||||
`MPRnb(POALPAC ,1.0e-2 ,"" ,"Coefficient for the geometry independent part of ALPAC")
|
||||
`MPRnb(PLALPAC ,0.0 ,"" ,"Coefficient for the length dependence of ALPAC")
|
||||
`MPRnb(PWALPAC ,0.0 ,"" ,"Coefficient for the width dependence of ALPAC")
|
||||
`MPRnb(PLWALPAC ,0.0 ,"" ,"Coefficient for the length times width dependence of ALPAC")
|
||||
`MPRnb(POALP1 ,0.0 ,"V" ,"Coefficient for the geometry independent part of ALP1")
|
||||
`MPRnb(PLALP1 ,0.0 ,"V" ,"Coefficient for the length dependence of ALP1")
|
||||
`MPRnb(PWALP1 ,0.0 ,"V" ,"Coefficient for the width dependence of ALP1")
|
||||
`MPRnb(PLWALP1 ,0.0 ,"V" ,"Coefficient for the length times width dependence of ALP1")
|
||||
`MPRnb(POALP2 ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of ALP2")
|
||||
`MPRnb(PLALP2 ,0.0 ,"V^-1" ,"Coefficient for the length dependence of ALP2")
|
||||
`MPRnb(PWALP2 ,0.0 ,"V^-1" ,"Coefficient for the width dependence of ALP2")
|
||||
`MPRnb(PLWALP2 ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of ALP2")
|
||||
`MPRnb(POVP ,0.05 ,"V" ,"Coefficient for the geometry independent part of VP")
|
||||
|
||||
// Impact ionization parameters
|
||||
`MPRnb(POA1 ,1.0 ,"" ,"Coefficient for the geometry independent part of A1")
|
||||
`MPRnb(PLA1 ,0.0 ,"" ,"Coefficient for the length dependence of A1")
|
||||
`MPRnb(PWA1 ,0.0 ,"" ,"Coefficient for the width dependence of A1")
|
||||
`MPRnb(PLWA1 ,0.0 ,"" ,"Coefficient for the length times width dependence of A1")
|
||||
`MPRnb(POA2 ,10.0 ,"V" ,"Coefficient for the geometry independent part of A2")
|
||||
`MPRnb(POSTA2 ,0.0 ,"V" ,"Coefficient for the geometry independent part of STA2")
|
||||
`MPRnb(POA3 ,1.0 ,"" ,"Coefficient for the geometry independent part of A3")
|
||||
`MPRnb(PLA3 ,0.0 ,"" ,"Coefficient for the length dependence of A3")
|
||||
`MPRnb(PWA3 ,0.0 ,"" ,"Coefficient for the width dependence of A3")
|
||||
`MPRnb(PLWA3 ,0.0 ,"" ,"Coefficient for the length times width dependence of A3")
|
||||
`MPRnb(POA4 ,0.0 ,"V^-0.5" ,"Coefficient for the geometry independent part of A4")
|
||||
`MPRnb(PLA4 ,0.0 ,"V^-0.5" ,"Coefficient for the length dependence of A4")
|
||||
`MPRnb(PWA4 ,0.0 ,"V^-0.5" ,"Coefficient for the width dependence of A4")
|
||||
`MPRnb(PLWA4 ,0.0 ,"V^-0.5" ,"Coefficient for the length times width dependence of A4")
|
||||
`MPRnb(POGCO ,0.0 ,"" ,"Coefficient for the geometry independent part of GCO")
|
||||
|
||||
// Gate current parameters
|
||||
`MPRnb(POIGINV ,0.0 ,"A" ,"Coefficient for the geometry independent part of IGINV")
|
||||
`MPRnb(PLIGINV ,0.0 ,"A" ,"Coefficient for the length dependence of IGINV")
|
||||
`MPRnb(PWIGINV ,0.0 ,"A" ,"Coefficient for the width dependence of IGINV")
|
||||
`MPRnb(PLWIGINV ,0.0 ,"A" ,"Coefficient for the length times width dependence of IGINV")
|
||||
`MPRnb(POIGOV ,0.0 ,"A" ,"Coefficient for the geometry independent part of IGOV")
|
||||
`MPRnb(PLIGOV ,0.0 ,"A" ,"Coefficient for the length dependence of IGOV")
|
||||
`MPRnb(PWIGOV ,0.0 ,"A" ,"Coefficient for the width dependence of IGOV")
|
||||
`MPRnb(PLWIGOV ,0.0 ,"A" ,"Coefficient for the length times width dependence of IGOV")
|
||||
`MPRnb(POIGOVD ,0.0 ,"A" ,"Coefficient for the geometry independent part of IGOV for drain side")
|
||||
`MPRnb(PLIGOVD ,0.0 ,"A" ,"Coefficient for the length dependence of IGOV for drain side")
|
||||
`MPRnb(PWIGOVD ,0.0 ,"A" ,"Coefficient for the width dependence of IGOV for drain side")
|
||||
`MPRnb(PLWIGOVD ,0.0 ,"A" ,"Coefficient for the length times width dependence of IGOV for drain side")
|
||||
`MPRnb(POSTIG ,2.0 ,"" ,"Coefficient for the geometry independent part of STIG")
|
||||
`MPRnb(POGC2 ,0.375 ,"" ,"Coefficient for the geometry independent part of GC2")
|
||||
`MPRnb(POGC3 ,0.063 ,"" ,"Coefficient for the geometry independent part of GC3")
|
||||
`MPRnb(POGC2OV ,0.375 ,"" ,"Coefficient for the geometry independent part of GC2OV, used only when SWIGATE=2")
|
||||
`MPRnb(POGC3OV ,0.063 ,"" ,"Coefficient for the geometry independent part of GC3OV, used only when SWIGATE=2")
|
||||
`MPRnb(POCHIB ,3.1 ,"V" ,"Coefficient for the geometry independent part of CHIB")
|
||||
|
||||
// Gate-induced drain leakage (GIDL) parameters
|
||||
`MPRnb(POAGIDL ,0.0 ,"A/V^3" ,"Coefficient for the geometry independent part of AGIDL")
|
||||
`MPRnb(PLAGIDL ,0.0 ,"A/V^3" ,"Coefficient for the length dependence of AGIDL")
|
||||
`MPRnb(PWAGIDL ,0.0 ,"A/V^3" ,"Coefficient for the width dependence of AGIDL")
|
||||
`MPRnb(PLWAGIDL ,0.0 ,"A/V^3" ,"Coefficient for the length times width dependence of AGIDL")
|
||||
`MPRnb(POAGIDLD ,0.0 ,"A/V^3" ,"Coefficient for the geometry independent part of AGIDL for drain side")
|
||||
`MPRnb(PLAGIDLD ,0.0 ,"A/V^3" ,"Coefficient for the length dependence of AGIDL for drain side")
|
||||
`MPRnb(PWAGIDLD ,0.0 ,"A/V^3" ,"Coefficient for the width dependence of AGIDL for drain side")
|
||||
`MPRnb(PLWAGIDLD ,0.0 ,"A/V^3" ,"Coefficient for the length times width dependence of AGIDL for drain side")
|
||||
`MPRnb(POBGIDL ,41.0 ,"V" ,"Coefficient for the geometry independent part of BGIDL")
|
||||
`MPRnb(POBGIDLD ,41.0 ,"V" ,"Coefficient for the geometry independent part of BGIDL for drain side")
|
||||
`MPRnb(POSTBGIDL ,0.0 ,"V/K" ,"Coefficient for the geometry independent part of STBGIDL")
|
||||
`MPRnb(POSTBGIDLD ,0.0 ,"V/K" ,"Coefficient for the geometry independent part of STBGIDL for drain side")
|
||||
`MPRnb(POCGIDL ,0.0 ,"" ,"Coefficient for the geometry independent part of CGIDL")
|
||||
`MPRnb(POCGIDLD ,0.0 ,"" ,"Coefficient for the geometry independent part of CGIDL for drain side")
|
||||
|
||||
// Charge model parameters
|
||||
`MPRnb(POCOX ,1.0e-14 ,"F" ,"Coefficient for the geometry independent part of COX")
|
||||
`MPRnb(PLCOX ,0.0 ,"F" ,"Coefficient for the length dependence of COX")
|
||||
`MPRnb(PWCOX ,0.0 ,"F" ,"Coefficient for the width dependence of COX")
|
||||
`MPRnb(PLWCOX ,0.0 ,"F" ,"Coefficient for the length times width dependence of COX")
|
||||
`MPRnb(POCGOV ,1.0e-15 ,"F" ,"Coefficient for the geometry independent part of CGOV")
|
||||
`MPRnb(PLCGOV ,0.0 ,"F" ,"Coefficient for the length dependence of CGOV")
|
||||
`MPRnb(PWCGOV ,0.0 ,"F" ,"Coefficient for the width dependence of CGOV")
|
||||
`MPRnb(PLWCGOV ,0.0 ,"F" ,"Coefficient for the length times width dependence of CGOV")
|
||||
`MPRnb(POCGOVD ,1.0e-15 ,"F" ,"Coefficient for the geometry independent part of CGOV for drain side")
|
||||
`MPRnb(PLCGOVD ,0.0 ,"F" ,"Coefficient for the length dependence of CGOV for drain side")
|
||||
`MPRnb(PWCGOVD ,0.0 ,"F" ,"Coefficient for the width dependence of CGOV for drain side")
|
||||
`MPRnb(PLWCGOVD ,0.0 ,"F" ,"Coefficient for the length times width dependence of CGOV for drain side")
|
||||
`MPRnb(POCGBOV ,0.0 ,"F" ,"Coefficient for the geometry independent part of CGBOV")
|
||||
`MPRnb(PLCGBOV ,0.0 ,"F" ,"Coefficient for the length dependence of CGBOV")
|
||||
`MPRnb(PWCGBOV ,0.0 ,"F" ,"Coefficient for the width dependence of CGBOV")
|
||||
`MPRnb(PLWCGBOV ,0.0 ,"F" ,"Coefficient for the length times width dependence of CGBOV")
|
||||
`MPRnb(POCFR ,0.0 ,"F" ,"Coefficient for the geometry independent part of CFR")
|
||||
`MPRnb(PLCFR ,0.0 ,"F" ,"Coefficient for the length dependence of CFR")
|
||||
`MPRnb(PWCFR ,0.0 ,"F" ,"Coefficient for the width dependence of CFR")
|
||||
`MPRnb(PLWCFR ,0.0 ,"F" ,"Coefficient for the length times width dependence of CFR")
|
||||
`MPRnb(POCFRD ,0.0 ,"F" ,"Coefficient for the geometry independent part of CFR for drain side")
|
||||
`MPRnb(PLCFRD ,0.0 ,"F" ,"Coefficient for the length dependence of CFR for drain side")
|
||||
`MPRnb(PWCFRD ,0.0 ,"F" ,"Coefficient for the width dependence of CFR for drain side")
|
||||
`MPRnb(PLWCFRD ,0.0 ,"F" ,"Coefficient for the length times width dependence of CFR for drain side")
|
||||
|
||||
// Noise model parameters
|
||||
`MPRnb(POFNT ,1.0 ,"" ,"Coefficient for the geometry independent part of FNT")
|
||||
`MPRnb(POFNTEXC ,0.0 ,"" ,"Coefficient for the geometry independent part of FNTEXC")
|
||||
`MPRnb(PLFNTEXC ,0.0 ,"" ,"Coefficient for the length dependence of FNTEXC")
|
||||
`MPRnb(PWFNTEXC ,0.0 ,"" ,"Coefficient for the width dependence of FNTEXC")
|
||||
`MPRnb(PLWFNTEXC ,0.0 ,"" ,"Coefficient for the length times width dependence of FNTEXC")
|
||||
`MPRnb(PONFA ,8.0e22 ,"V^-1/m^4" ,"Coefficient for the geometry independent part of NFA")
|
||||
`MPRnb(PLNFA ,0.0 ,"V^-1/m^4" ,"Coefficient for the length dependence of NFA")
|
||||
`MPRnb(PWNFA ,0.0 ,"V^-1/m^4" ,"Coefficient for the width dependence of NFA")
|
||||
`MPRnb(PLWNFA ,0.0 ,"V^-1/m^4" ,"Coefficient for the length times width dependence of NFA")
|
||||
`MPRnb(PONFB ,3.0e7 ,"V^-1/m^2" ,"Coefficient for the geometry independent part of NFB")
|
||||
`MPRnb(PLNFB ,0.0 ,"V^-1/m^2" ,"Coefficient for the length dependence of NFB")
|
||||
`MPRnb(PWNFB ,0.0 ,"V^-1/m^2" ,"Coefficient for the width dependence of NFB")
|
||||
`MPRnb(PLWNFB ,0.0 ,"V^-1/m^2" ,"Coefficient for the length times width dependence of NFB")
|
||||
`MPRnb(PONFC ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of NFC")
|
||||
`MPRnb(PLNFC ,0.0 ,"V^-1" ,"Coefficient for the length dependence of NFC")
|
||||
`MPRnb(PWNFC ,0.0 ,"V^-1" ,"Coefficient for the width dependence of NFC")
|
||||
`MPRnb(PLWNFC ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of NFC")
|
||||
`MPRnb(POEF ,1.0 ,"" ,"Coefficient for the flicker noise frequency exponent")
|
||||
|
||||
// Edge transistor parameters: PSP 103.4
|
||||
`MPRnb(POVFBEDGE ,-1.0 ,"V" ,"Coefficient for the geometry independent part of VFBEDGE")
|
||||
`MPRnb(POSTVFBEDGE ,0.0 ,"V/K" ,"Coefficient for the geometry independent part of STVFBEDGE")
|
||||
`MPRnb(PLSTVFBEDGE ,0.0 ,"V/K" ,"Coefficient for the length dependence of STVFBEDGE")
|
||||
`MPRnb(PWSTVFBEDGE ,0.0 ,"V/K" ,"Coefficient for the width dependence of STVFBEDGE")
|
||||
`MPRnb(PLWSTVFBEDGE ,0.0 ,"V/K" ,"Coefficient for the length times width dependence of STVFBEDGE")
|
||||
`MPRnb(PODPHIBEDGE ,0.0 ,"V" ,"Coefficient for the geometry independent part of DPHIBEDGE")
|
||||
`MPRnb(PLDPHIBEDGE ,0.0 ,"V" ,"Coefficient for the length dependence of DPHIBEDGE")
|
||||
`MPRnb(PWDPHIBEDGE ,0.0 ,"V" ,"Coefficient for the width dependence of DPHIBEDGE")
|
||||
`MPRnb(PLWDPHIBEDGE ,0.0 ,"V" ,"Coefficient for the length times width dependence of DPHIBEDGE")
|
||||
`MPRnb(PONEFFEDGE ,5.0e23 ,"m^-3" ,"Coefficient for the geometry independent part of NEFFEDGE")
|
||||
`MPRnb(PLNEFFEDGE ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NEFFEDGE")
|
||||
`MPRnb(PWNEFFEDGE ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NEFFEDGE")
|
||||
`MPRnb(PLWNEFFEDGE ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NEFFEDGE")
|
||||
`MPRnb(POCTEDGE ,0.0 ,"" ,"Coefficient for the geometry independent part of CTEDGE")
|
||||
`MPRnb(PLCTEDGE ,0.0 ,"" ,"Coefficient for the length dependence of CTEDGE")
|
||||
`MPRnb(PWCTEDGE ,0.0 ,"" ,"Coefficient for the width dependence of CTEDGE")
|
||||
`MPRnb(PLWCTEDGE ,0.0 ,"" ,"Coefficient for the length times width dependence of CTEDGE")
|
||||
`MPRnb(POBETNEDGE ,5.0e-4 ,"m^2/V/s" ,"Coefficient for the geometry independent part of BETNEDGE")
|
||||
`MPRnb(PLBETNEDGE ,0.0 ,"m^2/V/s" ,"Coefficient for the length dependence of BETNEDGE")
|
||||
`MPRnb(PWBETNEDGE ,0.0 ,"m^2/V/s" ,"Coefficient for the width dependence of BETNEDGE")
|
||||
`MPRnb(PLWBETNEDGE ,0.0 ,"m^2/V/s" ,"Coefficient for the length times width dependence of BETNEDGE")
|
||||
`MPRnb(POSTBETEDGE ,1.0 ,"" ,"Coefficient for the geometry independent part of STBETEDGE")
|
||||
`MPRnb(PLSTBETEDGE ,0.0 ,"" ,"Coefficient for the length dependence of STBETEDGE")
|
||||
`MPRnb(PWSTBETEDGE ,0.0 ,"" ,"Coefficient for the width dependence of STBETEDGE")
|
||||
`MPRnb(PLWSTBETEDGE ,0.0 ,"" ,"Coefficient for the length times width dependence of STBETEDGE")
|
||||
`MPRnb(POPSCEEDGE ,0.0 ,"" ,"Coefficient for the geometry independent part of PSCEEDGE")
|
||||
`MPRnb(PLPSCEEDGE ,0.0 ,"" ,"Coefficient for the length dependence of PSCEEDGE")
|
||||
`MPRnb(PWPSCEEDGE ,0.0 ,"" ,"Coefficient for the width dependence of PSCEEDGE")
|
||||
`MPRnb(PLWPSCEEDGE ,0.0 ,"" ,"Coefficient for the length times width dependence of PSCEEDGE")
|
||||
`MPRnb(POPSCEBEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of PSCEBEDGE")
|
||||
`MPRnb(POPSCEDEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of PSCEDEDGE")
|
||||
`MPRnb(POCFEDGE ,0.0 ,"" ,"Coefficient for the geometry independent part of CFEDGE")
|
||||
`MPRnb(PLCFEDGE ,0.0 ,"" ,"Coefficient for the length dependence of CFEDGE")
|
||||
`MPRnb(PWCFEDGE ,0.0 ,"" ,"Coefficient for the width dependence of CFEDGE")
|
||||
`MPRnb(PLWCFEDGE ,0.0 ,"" ,"Coefficient for the length times width dependence of CFEDGE")
|
||||
`MPRnb(POCFDEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of CFDEDGE")
|
||||
`MPRnb(POCFBEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of CFBEDGE")
|
||||
`MPRnb(POFNTEDGE ,1.0 ,"" ,"Coefficient for the geometry independent part of FNTEDGE")
|
||||
`MPRnb(PONFAEDGE ,8.0e22 ,"V^-1/m^4" ,"Coefficient for the geometry independent part of NFAEDGE")
|
||||
`MPRnb(PLNFAEDGE ,0.0 ,"V^-1/m^4" ,"Coefficient for the length dependence of NFAEDGE")
|
||||
`MPRnb(PWNFAEDGE ,0.0 ,"V^-1/m^4" ,"Coefficient for the width dependence of NFAEDGE")
|
||||
`MPRnb(PLWNFAEDGE ,0.0 ,"V^-1/m^4" ,"Coefficient for the length times width dependence of NFAEDGE")
|
||||
`MPRnb(PONFBEDGE ,3.0e7 ,"V^-1/m^2" ,"Coefficient for the geometry independent part of NFBEDGE")
|
||||
`MPRnb(PLNFBEDGE ,0.0 ,"V^-1/m^2" ,"Coefficient for the length dependence of NFBEDGE")
|
||||
`MPRnb(PWNFBEDGE ,0.0 ,"V^-1/m^2" ,"Coefficient for the width dependence of NFBEDGE")
|
||||
`MPRnb(PLWNFBEDGE ,0.0 ,"V^-1/m^2" ,"Coefficient for the length times width dependence of NFBEDGE")
|
||||
`MPRnb(PONFCEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of NFCEDGE")
|
||||
`MPRnb(PLNFCEDGE ,0.0 ,"V^-1" ,"Coefficient for the length dependence of NFCEDGE")
|
||||
`MPRnb(PWNFCEDGE ,0.0 ,"V^-1" ,"Coefficient for the width dependence of NFCEDGE")
|
||||
`MPRnb(PLWNFCEDGE ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of NFCEDGE")
|
||||
`MPRnb(POEFEDGE ,1.0 ,"" ,"Coefficient for the geometry independent part of EFEDGE")
|
||||
|
||||
// Well proximity effect parameters
|
||||
`MPRnb(POKVTHOWE ,0.0 ,"" ,"Coefficient for the geometry independent part of KVTHOWE")
|
||||
`MPRnb(PLKVTHOWE ,0.0 ,"" ,"Coefficient for the length dependence part of KVTHOWE")
|
||||
`MPRnb(PWKVTHOWE ,0.0 ,"" ,"Coefficient for the width dependence part of KVTHOWE")
|
||||
`MPRnb(PLWKVTHOWE ,0.0 ,"" ,"Coefficient for the length times width dependence part of KVTHOWE")
|
||||
`MPRnb(POKUOWE ,0.0 ,"" ,"Coefficient for the geometry independent part of KUOWE")
|
||||
`MPRnb(PLKUOWE ,0.0 ,"" ,"Coefficient for the length dependence part of KUOWE")
|
||||
`MPRnb(PWKUOWE ,0.0 ,"" ,"Coefficient for the width dependence part of KUOWE")
|
||||
`MPRnb(PLWKUOWE ,0.0 ,"" ,"Coefficient for the length times width dependence part of KUOWE")
|
||||
|
||||
// `Dummy' parameters for binning-set labeling
|
||||
`MPRnb(LMIN ,0 ,"m" ,"Dummy parameter to label binning set")
|
||||
`MPRnb(LMAX ,1.0 ,"m" ,"Dummy parameter to label binning set")
|
||||
`MPRnb(WMIN ,0.0 ,"m" ,"Dummy parameter to label binning set")
|
||||
`MPRnb(WMAX ,1.0 ,"m" ,"Dummy parameter to label binning set")
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// Parameters that occur in both global and binning model
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// NQS parameters
|
||||
`ifdef NQSmodel
|
||||
`MPRnb(MUNQSO ,1.0 ,"" ,"Relative mobility for NQS modelling")
|
||||
`endif // NQSmodel
|
||||
|
||||
// Parasitic resistance parameters
|
||||
`MPRnb(RGO ,0.0 ,"Ohm" ,"Gate resistance")
|
||||
`MPRcz(RINT ,0.0 ,"Ohm m^2" ,"Contact resistance between silicide and ploy")
|
||||
`MPRcz(RVPOLY ,0.0 ,"Ohm m^2" ,"Vertical poly resistance")
|
||||
`MPRcz(RSHG ,0.0 ,"Ohm/sq" ,"Gate electrode diffusion sheet resistance")
|
||||
`MPRnb(DLSIL ,0.0 ,"m" ,"Silicide extension over the physical gate length")
|
||||
`MPRnb(RSH ,0.0 ,"Ohm/sq" ,"Sheet resistance of source diffusion")
|
||||
`MPRnb(RSHD ,0.0 ,"Ohm/sq" ,"Sheet resistance of drain diffusion")
|
||||
`MPRnb(RBULKO ,0.0 ,"Ohm" ,"Bulk resistance between node BP and BI")
|
||||
`MPRnb(RWELLO ,0.0 ,"Ohm" ,"Well resistance between node BI and B")
|
||||
`MPRnb(RJUNSO ,0.0 ,"Ohm" ,"Source-side bulk resistance between node BI and BS")
|
||||
`MPRnb(RJUNDO ,0.0 ,"Ohm" ,"Drain-side bulk resistance between node BI and BD")
|
||||
|
||||
// Self heating effect parameters
|
||||
`ifdef SelfHeating
|
||||
`MPRnb(RTHO ,0.0 ,"K/W" ,"Geometry independent part of thermal resistance")
|
||||
`MPRnb(RTHW1 ,0.0 ,"K/W" ,"Width dependence of thermal resistance")
|
||||
`MPRnb(RTHW2 ,0.0 ,"" ,"Offset in width dependence of thermal resistance")
|
||||
`MPRnb(RTHLW ,0.0 ,"" ,"Length-correction to width dependence of thermal resistance")
|
||||
`MPRnb(CTHO ,0.0 ,"J/K" ,"Geometry independent part of thermal capacitance")
|
||||
`MPRnb(CTHW1 ,0.0 ,"J/K" ,"Width dependence of thermal capacitance")
|
||||
`MPRnb(CTHW2 ,0.0 ,"" ,"Offset in width dependence of thermal capacitance")
|
||||
`MPRnb(CTHLW ,0.0 ,"" ,"Length-correction to width dependence of thermal capacitance")
|
||||
`MPRnb(STRTHO ,0.0 ,"" ,"Temperature sensitivity of RTH")
|
||||
`endif // SelfHeating
|
||||
|
||||
// Stress Model Parameters
|
||||
`MPRcc(SAREF ,1.0e-6 ,"m" ,1.0e-9 ,inf ,"Reference distance between OD-edge and poly from one side")
|
||||
`MPRcc(SBREF ,1.0e-6 ,"m" ,1.0e-9 ,inf ,"Reference distance between OD-edge and poly from other side")
|
||||
`MPRnb(WLOD ,0.0 ,"m" ,"Width parameter")
|
||||
`MPRnb(KUO ,0.0 ,"m" ,"Mobility degradation/enhancement coefficient")
|
||||
`MPRcc(KVSAT ,0.0 ,"m" ,-1.0 ,1.0 ,"Saturation velocity degradation/enhancement coefficient")
|
||||
`MPRcc(KVSATAC ,0.0 ,"m" ,-1.0 ,1.0 ,"Saturation velocity degradation/enhancement coefficient of charge model when SWQSAT=1")
|
||||
`MPRnb(TKUO ,0.0 ,"" ,"Temperature dependence of KUO")
|
||||
`MPRnb(LKUO ,0.0 ,"m^LLODKUO" ,"Length dependence of KUO")
|
||||
`MPRnb(WKUO ,0.0 ,"m^WLODKUO" ,"Width dependence of KUO")
|
||||
`MPRnb(PKUO ,0.0 ,"m^(LLODKUO+WLODKUO)" ,"Cross-term dependence of KUO")
|
||||
`MPRcz(LLODKUO ,0.0 ,"" ,"Length parameter for UO stress effect")
|
||||
`MPRcz(WLODKUO ,0.0 ,"" ,"Width parameter for UO stress effect")
|
||||
`MPRnb(KVTHO ,0.0 ,"Vm" ,"Threshold shift parameter")
|
||||
`MPRnb(LKVTHO ,0.0 ,"m^LLODVTH" ,"Length dependence of KVTHO")
|
||||
`MPRnb(WKVTHO ,0.0 ,"m^WLODVTH" ,"Width dependence of KVTHO")
|
||||
`MPRnb(PKVTHO ,0.0 ,"m^(LLODVTH+WLODVTH)" ,"Cross-term dependence of KVTHO")
|
||||
`MPRcz(LLODVTH ,0.0 ,"" ,"Length parameter for VTH-stress effect")
|
||||
`MPRcz(WLODVTH ,0.0 ,"" ,"Width parameter for VTH-stress effect")
|
||||
`MPRnb(STETAO ,0.0 ,"m" ,"Eta0 shift factor related to VTHO change")
|
||||
`MPRcz(LODETAO ,1.0 ,"" ,"Eta0 shift modification factor for stress effect")
|
||||
|
||||
// Well proximity effect Parameters
|
||||
`MPRcz(SCREF ,1.0e-6 ,"m" ,"Distance between OD-edge and well edge of a reference device")
|
||||
`MPRnb(WEB ,0.0 ,"" ,"Coefficient for SCB")
|
||||
`MPRnb(WEC ,0.0 ,"" ,"Coefficient for SCC")
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
// Other Parameters
|
||||
// --------------------------------------------------------------------------------------------------------------
|
||||
`MPRnb(DTA ,0.0 ,"K" ,"Temperature offset w.r.t. ambient temperature")
|
||||
|
||||
|
|
@ -0,0 +1,773 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: PSP103_scaling.include
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
// Transistor geometry
|
||||
iL = `LEN / L_i;
|
||||
iW = `WEN / W_i;
|
||||
delLPS = LVARO * (1.0 + LVARL * iL) * (1.0 + LVARW * iW);
|
||||
delWOD = WVARO * (1.0 + WVARL * iL) * (1.0 + WVARW * iW);
|
||||
if (SWGEO_i == 2) begin
|
||||
delLPS = LVARO * (1.0 + LVARL * iL);
|
||||
delWOD = WVARO * (1.0 + WVARW * iW);
|
||||
end
|
||||
LE = `CLIP_LOW(L_i + delLPS - 2.0 * LAP, 1.0e-9);
|
||||
WE = `CLIP_LOW(W_i + delWOD - 2.0 * WOT, 1.0e-9);
|
||||
LEcv = `CLIP_LOW(L_i + delLPS - 2.0 * LAP + DLQ, 1.0e-9);
|
||||
WEcv = `CLIP_LOW(W_i + delWOD - 2.0 * WOT + DWQ, 1.0e-9);
|
||||
Lcv = `CLIP_LOW(L_i + delLPS + DLQ, 1.0e-9);
|
||||
Wcv = `CLIP_LOW(W_i + delWOD + DWQ, 1.0e-9);
|
||||
iLE = `LEN / LE;
|
||||
iWE = `WEN / WE;
|
||||
|
||||
// Geometry for multi-finger devices
|
||||
L_f = `CLIP_LOW(L_i + delLPS, 1.0e-9);
|
||||
L_slif = `CLIP_LOW(L_f + DLSIL, 1.0e-9);
|
||||
W_f = `CLIP_LOW(W_i + delWOD, 1.0e-9);
|
||||
XGWE = `CLIP_LOW(XGW_i - 0.5 * delWOD, 1.0e-9);
|
||||
|
||||
// Local model parameters
|
||||
VFB_p = VFB;
|
||||
STVFB_p = STVFB;
|
||||
ST2VFB_p = ST2VFB;
|
||||
TOX_p = TOX;
|
||||
EPSROX_p = EPSROX;
|
||||
NEFF_p = NEFF;
|
||||
FACNEFFAC_p = FACNEFFAC;
|
||||
GFACNUD_p = GFACNUD;
|
||||
VSBNUD_p = VSBNUD;
|
||||
DVSBNUD_p = DVSBNUD;
|
||||
VNSUB_p = VNSUB;
|
||||
NSLP_p = NSLP;
|
||||
DNSUB_p = DNSUB;
|
||||
DPHIB_p = DPHIB;
|
||||
DELVTAC_p = DELVTAC;
|
||||
NP_p = NP;
|
||||
TOXOV_p = TOXOV;
|
||||
TOXOVD_p = TOXOVD;
|
||||
NOV_p = NOV;
|
||||
NOVD_p = NOVD;
|
||||
CT_p = CT;
|
||||
CTG_p = CTG;
|
||||
CTB_p = CTB;
|
||||
STCT_p = STCT;
|
||||
PSCE_p = PSCE;
|
||||
PSCED_p = PSCED;
|
||||
PSCEB_p = PSCEB;
|
||||
CF_p = CF;
|
||||
`DefACparam(CFAC_p, CF, CFAC)
|
||||
CFD_p = CFD;
|
||||
CFB_p = CFB;
|
||||
BETN_p = BETN;
|
||||
STBET_p = STBET;
|
||||
MUE_p = MUE;
|
||||
STMUE_p = STMUE;
|
||||
THEMU_p = THEMU;
|
||||
STTHEMU_p = STTHEMU;
|
||||
CS_p = CS;
|
||||
STCS_p = STCS;
|
||||
THECS_p = THECS;
|
||||
STTHECS_p = STTHECS;
|
||||
XCOR_p = XCOR;
|
||||
STXCOR_p = STXCOR;
|
||||
FETA_p = FETA;
|
||||
RS_p = RS;
|
||||
STRS_p = STRS;
|
||||
RSB_p = RSB;
|
||||
RSG_p = RSG;
|
||||
THESAT_p = THESAT;
|
||||
`DefACparam(THESATAC_p, THESAT, THESATAC)
|
||||
STTHESAT_p = STTHESAT;
|
||||
THESATB_p = THESATB;
|
||||
THESATG_p = THESATG;
|
||||
AX_p = AX;
|
||||
`DefACparam(AXAC_p, AX, AXAC)
|
||||
ALP_p = ALP;
|
||||
`DefACparam(ALPAC_p, ALP, ALPAC)
|
||||
ALP1_p = ALP1;
|
||||
ALP2_p = ALP2;
|
||||
VP_p = VP;
|
||||
A1_p = A1;
|
||||
A2_p = A2;
|
||||
STA2_p = STA2;
|
||||
A3_p = A3;
|
||||
A4_p = A4;
|
||||
GCO_p = GCO;
|
||||
IGINV_p = IGINV;
|
||||
IGOV_p = IGOV;
|
||||
IGOVD_p = IGOVD;
|
||||
STIG_p = STIG;
|
||||
GC2_p = GC2;
|
||||
GC3_p = GC3;
|
||||
GC2OV_p = GC2OV;
|
||||
GC3OV_p = GC3OV;
|
||||
CHIB_p = CHIB;
|
||||
AGIDL_p = AGIDL;
|
||||
AGIDLD_p = AGIDLD;
|
||||
BGIDL_p = BGIDL;
|
||||
BGIDLD_p = BGIDLD;
|
||||
STBGIDL_p = STBGIDL;
|
||||
STBGIDLD_p = STBGIDLD;
|
||||
CGIDL_p = CGIDL;
|
||||
CGIDLD_p = CGIDLD;
|
||||
COX_p = COX;
|
||||
CGOV_p = CGOV;
|
||||
CGOVD_p = CGOVD;
|
||||
CGBOV_p = CGBOV;
|
||||
CFR_p = CFR;
|
||||
CFRD_p = CFRD;
|
||||
FNT_p = FNT;
|
||||
FNTEXC_p = FNTEXC;
|
||||
NFA_p = NFA;
|
||||
NFB_p = NFB;
|
||||
NFC_p = NFC;
|
||||
EF_p = EF;
|
||||
VFBEDGE_p = VFBEDGE;
|
||||
STVFBEDGE_p = STVFBEDGE;
|
||||
DPHIBEDGE_p = DPHIBEDGE;
|
||||
NEFFEDGE_p = NEFFEDGE;
|
||||
CTEDGE_p = CTEDGE;
|
||||
BETNEDGE_p = BETNEDGE;
|
||||
STBETEDGE_p = STBETEDGE;
|
||||
PSCEEDGE_p = PSCEEDGE;
|
||||
PSCEBEDGE_p = PSCEBEDGE;
|
||||
PSCEDEDGE_p = PSCEDEDGE;
|
||||
CFEDGE_p = CFEDGE;
|
||||
CFDEDGE_p = CFDEDGE;
|
||||
CFBEDGE_p = CFBEDGE;
|
||||
FNTEDGE_p = FNTEDGE;
|
||||
NFAEDGE_p = NFAEDGE;
|
||||
NFBEDGE_p = NFBEDGE;
|
||||
NFCEDGE_p = NFCEDGE;
|
||||
EFEDGE_p = EFEDGE;
|
||||
RG_p = RG;
|
||||
RSE_p = RSE;
|
||||
RDE_p = RDE;
|
||||
RWELL_p = RWELL;
|
||||
RBULK_p = RBULK;
|
||||
RJUNS_p = RJUNS;
|
||||
RJUND_p = RJUND;
|
||||
`ifdef SelfHeating
|
||||
RTH_p = RTH;
|
||||
CTH_p = CTH;
|
||||
STRTH_p = STRTH;
|
||||
`endif // SelfHeating
|
||||
`ifdef NQSmodel
|
||||
MUNQS_p = MUNQS;
|
||||
`endif // NQSmodel
|
||||
|
||||
// Geometry scaling with physical scaling rules
|
||||
if (SWGEO_i == 1) begin
|
||||
// Process parameters
|
||||
VFB_p = VFBO + VFBL * iLE + VFBW * iWE + VFBLW * iLE * iWE;
|
||||
STVFB_p = STVFBO + STVFBL * iLE + STVFBW * iWE + STVFBLW * iLE * iWE;
|
||||
ST2VFB_p = ST2VFBO;
|
||||
TOX_p = TOXO;
|
||||
EPSROX_p = EPSROXO;
|
||||
NSUB0e = NSUBO_i * `MAX(( 1.0 + NSUBW * iWE * ln( 1.0 + WE / WSEG_i )), 1.0e-03);
|
||||
NPCKe = NPCK_i * `MAX(( 1.0 + NPCKW * iWE * ln( 1.0 + WE / WSEGP_i )), 1.0e-03);
|
||||
LPCKe = LPCK_i * `MAX(( 1.0 + LPCKW * iWE * ln( 1.0 + WE / WSEGP_i )), 1.0e-03);
|
||||
if (LE > (2.0 * LPCKe)) begin
|
||||
AA = 7.5e10;
|
||||
BB = sqrt(NSUB0e + 0.5 * NPCKe) - sqrt(NSUB0e);
|
||||
NSUB = sqrt(NSUB0e) + AA * ln(1.0 + 2.0 * LPCKe / LE * (exp(BB / AA) - 1.0));
|
||||
NSUB = NSUB * NSUB;
|
||||
end else begin
|
||||
if (LE >= LPCKe) begin
|
||||
NSUB = NSUB0e + NPCKe * LPCKe / LE;
|
||||
end else begin // LE < LPCK
|
||||
NSUB = NSUB0e + NPCKe * (2.0 - LE / LPCKe);
|
||||
end
|
||||
end
|
||||
NEFF_p = NSUB * (1.0 - FOL1 * iLE - FOL2 * iLE * iLE);
|
||||
FACNEFFAC_p = FACNEFFACO + FACNEFFACL * iLE + FACNEFFACW * iWE + FACNEFFACLW * iLE * iWE;
|
||||
GFACNUD_p = GFACNUDO + GFACNUDL * pow(iLE, GFACNUDLEXP) + GFACNUDW * iWE + GFACNUDLW * iLE * iWE;
|
||||
VSBNUD_p = VSBNUDO;
|
||||
DVSBNUD_p = DVSBNUDO;
|
||||
VNSUB_p = VNSUBO;
|
||||
NSLP_p = NSLPO;
|
||||
DNSUB_p = DNSUBO;
|
||||
DPHIB_p = DPHIBO + DPHIBL * pow(iLE, DPHIBLEXP) + DPHIBW * iWE + DPHIBLW * iLE * iWE;
|
||||
DELVTAC_p = DELVTACO + DELVTACL * pow(iLE, DELVTACLEXP) + DELVTACW * iWE + DELVTACLW * iLE * iWE;
|
||||
NP_p = NPO * `MAX(1.0e-6, (1.0 + NPL * iLE));
|
||||
TOXOV_p = TOXOVO;
|
||||
TOXOVD_p = TOXOVDO;
|
||||
NOV_p = NOVO;
|
||||
NOVD_p = NOVDO;
|
||||
|
||||
// Interface states parameters
|
||||
CT_p = (CTO + CTL * pow(iLE, CTLEXP)) * (1.0 + CTW * iWE) * (1.0 + CTLW * iLE * iWE);
|
||||
CTG_p = CTGO;
|
||||
CTB_p = CTBO;
|
||||
STCT_p = STCTO;
|
||||
|
||||
// DIBL parameters
|
||||
CF_p = CFL * pow(iLE, CFLEXP) * (1.0 + CFW * iWE);
|
||||
CFAC_p = CFACL_i * pow(iLE, CFACLEXP_i) * (1.0 + CFACW_i * iWE);
|
||||
CFD_p = CFDO;
|
||||
CFB_p = CFBO;
|
||||
|
||||
// Subthreshold slope parameters of short channel transistor
|
||||
PSCE_p = PSCEL * pow(iLE, PSCELEXP) * (1.0 + PSCEW * iWE);
|
||||
PSCED_p = PSCEDO;
|
||||
PSCEB_p = PSCEBO;
|
||||
|
||||
// Mobility parameters
|
||||
FBET1e = FBET1 * (1.0 + FBET1W * iWE);
|
||||
LP1e = LP1_i * `MAX(1.0 + LP1W * iWE, 1.0e-03);
|
||||
GPE = 1.0 + FBET1e * LP1e / LE * (1.0 - exp(-LE / LP1e)) + FBET2 * LP2_i / LE * (1.0 - exp(-LE / LP2_i));
|
||||
GPE = `MAX(GPE, 1.0e-15);
|
||||
GWE = 1.0 + BETW1 * iWE + BETW2 * iWE * ln(1.0 + WE / WBET_i);
|
||||
BETN_p = UO * WE / (GPE * LE) * GWE;
|
||||
STBET_p = STBETO + STBETL * iLE + STBETW * iWE + STBETLW * iLE * iWE;
|
||||
MUE_p = MUEO * (1.0 + MUEW * iWE);
|
||||
STMUE_p = STMUEO;
|
||||
THEMU_p = THEMUO;
|
||||
STTHEMU_p = STTHEMUO;
|
||||
CS_p = (CSO + CSL * pow(iLE, CSLEXP)) * (1.0 + CSW * iWE) * (1.0 + CSLW * iLE * iWE);
|
||||
STCS_p = STCSO;
|
||||
THECS_p = THECSO;
|
||||
STTHECS_p = STTHECSO;
|
||||
XCOR_p = XCORO * (1.0 + XCORL * iLE) * (1.0 + XCORW * iWE) * (1.0 + XCORLW * iLE * iWE);
|
||||
STXCOR_p = STXCORO;
|
||||
FETA_p = FETAO;
|
||||
|
||||
// Series resistance
|
||||
RS_p = RSW1 * iWE * (1.0 + RSW2 * iWE);
|
||||
STRS_p = STRSO;
|
||||
RSB_p = RSBO;
|
||||
RSG_p = RSGO;
|
||||
|
||||
// Velocity saturation
|
||||
THESAT_p = (THESATO + THESATL * GWE / GPE * pow(iLE, THESATLEXP)) * (1.0 + THESATW * iWE) * (1.0 + THESATLW * iLE * iWE);
|
||||
THESATAC_p = (THESATACO_i + THESATACL_i * GWE / GPE * pow(iLE, THESATACLEXP_i)) * (1.0 + THESATACW_i * iWE) * (1.0 + THESATACLW_i * iLE * iWE);
|
||||
STTHESAT_p = STTHESATO + STTHESATL * iLE + STTHESATW * iWE + STTHESATLW * iLE * iWE;
|
||||
THESATB_p = THESATBO;
|
||||
THESATG_p = THESATGO;
|
||||
|
||||
// Saturation voltage
|
||||
AX_p = AXO / (1.0 + AXL_i * iLE);
|
||||
AXAC_p = AXACO_i / (1.0 + AXACL_i * iLE);
|
||||
|
||||
// Channel length modulation
|
||||
ALP_p = ALPL * pow(iLE, ALPLEXP) * (1.0 + ALPW * iWE);
|
||||
ALPAC_p = ALPACL_i * pow(iLE, ALPACLEXP_i) * (1.0 + ALPACW_i * iWE);
|
||||
tmpx = pow(iLE, ALP1LEXP);
|
||||
ALP1_p = ALP1L1 * tmpx * (1.0 + ALP1W * iWE) / (1.0 + ALP1L2_i * iLE * tmpx);
|
||||
tmpx = pow(iLE, ALP2LEXP);
|
||||
ALP2_p = ALP2L1 * tmpx * (1.0 + ALP2W * iWE) / (1.0 + ALP2L2_i * iLE * tmpx);
|
||||
VP_p = VPO;
|
||||
|
||||
// Impact ionization
|
||||
A1_p = A1O * (1.0 + A1L * iLE) * (1.0 + A1W * iWE);
|
||||
A2_p = A2O;
|
||||
STA2_p = STA2O;
|
||||
A3_p = A3O * (1.0 + A3L * iLE) * (1.0 + A3W * iWE);
|
||||
A4_p = A4O * (1.0 + A4L * iLE) * (1.0 + A4W * iWE);
|
||||
|
||||
// Gate current
|
||||
GCO_p = GCOO;
|
||||
IGINV_p = IGINVLW / (iWE * iLE);
|
||||
IGOV_p = IGOVW * LOV_i / (`LEN * iWE);
|
||||
IGOVD_p = IGOVDW * LOVD_i / (`LEN * iWE);
|
||||
STIG_p = STIGO;
|
||||
GC2_p = GC2O;
|
||||
GC3_p = GC3O;
|
||||
GC2OV_p = GC2OVO;
|
||||
GC3OV_p = GC3OVO;
|
||||
CHIB_p = CHIBO;
|
||||
|
||||
// GIDL
|
||||
AGIDL_p = AGIDLW * LOV_i / (`LEN * iWE);
|
||||
AGIDLD_p = AGIDLDW * LOVD_i / (`LEN * iWE);
|
||||
BGIDL_p = BGIDLO;
|
||||
BGIDLD_p = BGIDLDO;
|
||||
STBGIDL_p = STBGIDLO;
|
||||
STBGIDLD_p = STBGIDLDO;
|
||||
CGIDL_p = CGIDLO;
|
||||
CGIDLD_p = CGIDLDO;
|
||||
|
||||
// Charge model parameters
|
||||
COX_p = `EPSO * EPSROXO_i * WEcv * LEcv / TOXO_i;
|
||||
CGOV_p = `EPSO * EPSROXO_i * WEcv * LOV_i / TOXOVO_i;
|
||||
CGOVD_p = `EPSO * EPSROXO_i * WEcv * LOVD_i / TOXOVDO_i;
|
||||
CGBOV_p = CGBOVL * Lcv / `LEN;
|
||||
CFR_p = CFRW * Wcv / `WEN;
|
||||
CFRD_p = CFRDW * Wcv / `WEN;
|
||||
|
||||
// Noise model parameters
|
||||
temp0 = 1.0 - 2.0 * LINTNOI * iLE / `LEN;
|
||||
Lnoi = `MAX(temp0, 1.0e-3);
|
||||
Lred = 1.0 / pow(Lnoi, ALPNOI);
|
||||
FNT_p = FNTO;
|
||||
FNTEXC_p = FNTEXCL * BETN_p * BETN_p * iWE * iWE;
|
||||
NFA_p = Lred * iWE * iLE * NFALW;
|
||||
NFB_p = Lred * iWE * iLE * NFBLW;
|
||||
NFC_p = Lred * iWE * iLE * NFCLW;
|
||||
EF_p = EFO;
|
||||
|
||||
// Edge transistors: PSP 103.4
|
||||
WE_edge = 2.0 * WEDGE + WEDGEW * WE;
|
||||
iWE_edge = `WEN / WE_edge;
|
||||
VFBEDGE_p = VFBEDGEO;
|
||||
STVFBEDGE_p = STVFBEDGEO + STVFBEDGEL * iLE + STVFBEDGEW * iWE + STVFBEDGELW * iLE * iWE;
|
||||
DPHIBEDGE_p = DPHIBEDGEO + DPHIBEDGEL * pow(iLE, DPHIBEDGELEXP) + DPHIBEDGEW * iWE + DPHIBEDGELW * iLE * iWE;
|
||||
NEFFEDGE_p = NSUBEDGEO_i * (1.0 + NSUBEDGEL * pow(iLE, NSUBEDGELEXP)) * ( 1.0 + NSUBEDGEW * iWE) * ( 1.0 + NSUBEDGELW * iLE * iWE);
|
||||
CTEDGE_p = CTEDGEO + CTEDGEL * pow(iLE, CTEDGELEXP);
|
||||
GPE_edge = 1.0 + FBETEDGE * LPEDGE_i / LE * (1.0 - exp(-LE / LPEDGE_i));
|
||||
GPE_edge = `MAX(GPE_edge, 1.0e-15);
|
||||
BETNEDGE_p = UO * WE_edge / (GPE_edge * LE) * (1.0 + BETEDGEW * iWE);
|
||||
STBETEDGE_p = STBETEDGEO + STBETEDGEL * iLE + STBETEDGEW * iWE + STBETEDGELW * iLE * iWE;
|
||||
PSCEEDGE_p = PSCEEDGEL * pow(iLE, PSCEEDGELEXP) * (1.0 + PSCEEDGEW * iWE);
|
||||
PSCEBEDGE_p = PSCEBEDGEO;
|
||||
PSCEDEDGE_p = PSCEDEDGEO;
|
||||
CFEDGE_p = CFEDGEL * pow(iLE, CFEDGELEXP) * (1.0 + CFEDGEW * iWE);
|
||||
CFDEDGE_p = CFDEDGEO;
|
||||
CFBEDGE_p = CFBEDGEO;
|
||||
FNTEDGE_p = FNTEDGEO;
|
||||
NFAEDGE_p = iWE_edge * iLE * NFAEDGELW;
|
||||
NFBEDGE_p = iWE_edge * iLE * NFBEDGELW;
|
||||
NFCEDGE_p = iWE_edge * iLE * NFCEDGELW;
|
||||
EFEDGE_p = EFEDGEO;
|
||||
end
|
||||
|
||||
// Well proximity effect parameters
|
||||
KVTHOWE = KVTHOWEO + KVTHOWEL * iLE + KVTHOWEW * iWE + KVTHOWELW * iLE * iWE;
|
||||
KUOWE = KUOWEO + KUOWEL * iLE + KUOWEW * iWE + KUOWELW * iLE * iWE;
|
||||
|
||||
// Geometry scaling with binning scaling rules
|
||||
if (SWGEO_i == 2) begin
|
||||
|
||||
// auxiliary variables
|
||||
iLEWE = iLE * iWE;
|
||||
iiLE = LE / `LEN;
|
||||
iiWE = WE / `WEN;
|
||||
iiLEWE = iiLE * iiWE;
|
||||
iiiLEWE = iiWE / iiLE;
|
||||
|
||||
// auxiliary variables for COX only
|
||||
iiLEcv = LEcv / `LEN;
|
||||
iiWEcv = WEcv / `WEN;
|
||||
iiLEWEcv = iiLEcv * iiWEcv;
|
||||
|
||||
// auxiliary variables for CGOV only
|
||||
iLEcv = `LEN / LEcv;
|
||||
iiiLEWEcv = iiWEcv / iiLEcv;
|
||||
|
||||
// auxiliary variables for CGBOV only
|
||||
iiLcv = Lcv / `LEN;
|
||||
iiWcv = Wcv / `WEN;
|
||||
iiLWcv = iiLcv * iiWcv;
|
||||
|
||||
// auxiliary variables for CFR only
|
||||
iLcv = `LEN / Lcv;
|
||||
iiiLWcv = iiWcv / iiLcv;
|
||||
|
||||
// Process parameters
|
||||
VFB_p = POVFB + iLE * PLVFB + iWE * PWVFB + iLEWE * PLWVFB;
|
||||
STVFB_p = POSTVFB + iLE * PLSTVFB + iWE * PWSTVFB + iLEWE * PLWSTVFB;
|
||||
ST2VFB_p = POST2VFB;
|
||||
TOX_p = POTOX;
|
||||
EPSROX_p = POEPSROX;
|
||||
NEFF_p = PONEFF + iLE * PLNEFF + iWE * PWNEFF + iLEWE * PLWNEFF;
|
||||
FACNEFFAC_p = POFACNEFFAC + iLE * PLFACNEFFAC + iWE * PWFACNEFFAC + iLEWE * PLWFACNEFFAC;
|
||||
GFACNUD_p = POGFACNUD + PLGFACNUD * iLE + PWGFACNUD * iWE + PLWGFACNUD * iLE * iWE;
|
||||
VSBNUD_p = POVSBNUD;
|
||||
DVSBNUD_p = PODVSBNUD;
|
||||
VNSUB_p = POVNSUB;
|
||||
NSLP_p = PONSLP;
|
||||
DNSUB_p = PODNSUB;
|
||||
DPHIB_p = PODPHIB + iLE * PLDPHIB + iWE * PWDPHIB + iLEWE * PLWDPHIB;
|
||||
DELVTAC_p = PODELVTAC + iLE * PLDELVTAC + iWE * PWDELVTAC + iLEWE * PLWDELVTAC;
|
||||
NP_p = PONP + iLE * PLNP + iWE * PWNP + iLEWE * PLWNP;
|
||||
TOXOV_p = POTOXOV;
|
||||
TOXOVD_p = POTOXOVD;
|
||||
NOV_p = PONOV + iLE * PLNOV + iWE * PWNOV + iLEWE * PLWNOV;
|
||||
NOVD_p = PONOVD + iLE * PLNOVD + iWE * PWNOVD + iLEWE * PLWNOVD;
|
||||
|
||||
// Interface states parameters
|
||||
CT_p = POCT + iLE * PLCT + iWE * PWCT + iLEWE * PLWCT;
|
||||
CTG_p = POCTG;
|
||||
CTB_p = POCTB;
|
||||
STCT_p = POSTCT;
|
||||
|
||||
// DIBL parameters
|
||||
CF_p = POCF + iLE * PLCF + iWE * PWCF + iLEWE * PLWCF;
|
||||
CFAC_p = POCFAC_i + iLE * PLCFAC_i + iWE * PWCFAC_i + iLEWE * PLWCFAC_i;
|
||||
CFD_p = POCFD;
|
||||
CFB_p = POCFB;
|
||||
|
||||
// Subthreshold slope parameters of short channel transistor
|
||||
PSCE_p = POPSCE + iLE * PLPSCE + iWE * PWPSCE + iLEWE * PLWPSCE;
|
||||
PSCEB_p = POPSCEB;
|
||||
PSCED_p = POPSCED;
|
||||
|
||||
// Mobility parameters
|
||||
BETN_p = iiWE * iLE * (POBETN + iLE * PLBETN + iWE * PWBETN + iLEWE * PLWBETN);
|
||||
STBET_p = POSTBET + iLE * PLSTBET + iWE * PWSTBET + iLEWE * PLWSTBET;
|
||||
MUE_p = POMUE + iLE * PLMUE + iWE * PWMUE + iLEWE * PLWMUE;
|
||||
STMUE_p = POSTMUE;
|
||||
THEMU_p = POTHEMU;
|
||||
STTHEMU_p = POSTTHEMU;
|
||||
CS_p = POCS + iLE * PLCS + iWE * PWCS + iLEWE * PLWCS;
|
||||
STCS_p = POSTCS;
|
||||
THECS_p = POTHECS;
|
||||
STTHECS_p = POSTTHECS;
|
||||
XCOR_p = POXCOR + iLE * PLXCOR + iWE * PWXCOR + iLEWE * PLWXCOR;
|
||||
STXCOR_p = POSTXCOR;
|
||||
FETA_p = POFETA;
|
||||
|
||||
// Series resistance parameters
|
||||
RS_p = PORS + iLE * PLRS + iWE * PWRS + iLEWE * PLWRS;
|
||||
STRS_p = POSTRS;
|
||||
RSB_p = PORSB;
|
||||
RSG_p = PORSG;
|
||||
|
||||
// Velocity saturation parameters
|
||||
THESAT_p = POTHESAT + iLE * PLTHESAT + iWE * PWTHESAT + iLEWE * PLWTHESAT;
|
||||
THESATAC_p = POTHESATAC_i + iLE * PLTHESATAC_i + iWE * PWTHESATAC_i + iLEWE * PLWTHESATAC_i;
|
||||
STTHESAT_p = POSTTHESAT + iLE * PLSTTHESAT + iWE * PWSTTHESAT + iLEWE * PLWSTTHESAT;
|
||||
THESATB_p = POTHESATB + iLE * PLTHESATB + iWE * PWTHESATB + iLEWE * PLWTHESATB;
|
||||
THESATG_p = POTHESATG + iLE * PLTHESATG + iWE * PWTHESATG + iLEWE * PLWTHESATG;
|
||||
|
||||
// Saturation voltage parameters
|
||||
AX_p = POAX + iLE * PLAX + iWE * PWAX + iLEWE * PLWAX;
|
||||
AXAC_p = POAXAC_i + iLE * PLAXAC_i + iWE * PWAXAC_i + iLEWE * PLWAXAC_i;
|
||||
|
||||
// Channel length modulation (CLM) parameters
|
||||
ALP_p = POALP + iLE * PLALP + iWE * PWALP + iLEWE * PLWALP;
|
||||
ALPAC_p = POALPAC_i + iLE * PLALPAC_i + iWE * PWALPAC_i + iLEWE * PLWALPAC_i;
|
||||
ALP1_p = POALP1 + iLE * PLALP1 + iWE * PWALP1 + iLEWE * PLWALP1;
|
||||
ALP2_p = POALP2 + iLE * PLALP2 + iWE * PWALP2 + iLEWE * PLWALP2;
|
||||
VP_p = POVP;
|
||||
|
||||
// Impact ionization parameters
|
||||
A1_p = POA1 + iLE * PLA1 + iWE * PWA1 + iLEWE * PLWA1;
|
||||
A2_p = POA2;
|
||||
STA2_p = POSTA2;
|
||||
A3_p = POA3 + iLE * PLA3 + iWE * PWA3 + iLEWE * PLWA3;
|
||||
A4_p = POA4 + iLE * PLA4 + iWE * PWA4 + iLEWE * PLWA4;
|
||||
GCO_p = POGCO;
|
||||
|
||||
// Gate current parameters
|
||||
IGINV_p = POIGINV + iiLE * PLIGINV + iiWE * PWIGINV + iiLEWE * PLWIGINV;
|
||||
IGOV_p = POIGOV + iLE * PLIGOV + iiWE * PWIGOV + iiiLEWE * PLWIGOV;
|
||||
IGOVD_p = POIGOVD + iLE * PLIGOVD + iiWE * PWIGOVD + iiiLEWE * PLWIGOVD;
|
||||
STIG_p = POSTIG;
|
||||
GC2_p = POGC2;
|
||||
GC3_p = POGC3;
|
||||
GC2OV_p = POGC2OV;
|
||||
GC3OV_p = POGC3OV;
|
||||
CHIB_p = POCHIB;
|
||||
|
||||
// Gate-induced drain leakage (GIDL) parameters
|
||||
AGIDL_p = POAGIDL + iLE * PLAGIDL + iiWE * PWAGIDL + iiiLEWE * PLWAGIDL;
|
||||
AGIDLD_p = POAGIDLD + iLE * PLAGIDLD + iiWE * PWAGIDLD + iiiLEWE * PLWAGIDLD;
|
||||
BGIDL_p = POBGIDL;
|
||||
BGIDLD_p = POBGIDLD;
|
||||
STBGIDL_p = POSTBGIDL;
|
||||
STBGIDLD_p = POSTBGIDLD;
|
||||
CGIDL_p = POCGIDL;
|
||||
CGIDLD_p = POCGIDLD;
|
||||
|
||||
// Charge model parameters
|
||||
COX_p = POCOX + iiLEcv * PLCOX + iiWEcv * PWCOX + iiLEWEcv * PLWCOX;
|
||||
CGOV_p = POCGOV + iLEcv * PLCGOV + iiWEcv * PWCGOV + iiiLEWEcv * PLWCGOV;
|
||||
CGOVD_p = POCGOVD + iLEcv * PLCGOVD + iiWEcv * PWCGOVD + iiiLEWEcv * PLWCGOVD;
|
||||
CGBOV_p = POCGBOV + iiLcv * PLCGBOV + iiWcv * PWCGBOV + iiLWcv * PLWCGBOV;
|
||||
CFR_p = POCFR + iLcv * PLCFR + iiWcv * PWCFR + iiiLWcv * PLWCFR;
|
||||
CFRD_p = POCFRD + iLcv * PLCFRD + iiWcv * PWCFRD + iiiLWcv * PLWCFRD;
|
||||
|
||||
// Noise model parameters
|
||||
FNT_p = POFNT;
|
||||
FNTEXC_p = iLE * iLE * (POFNTEXC + iLE * PLFNTEXC + iWE * PWFNTEXC + iLEWE * PLWFNTEXC);
|
||||
NFA_p = PONFA + iLE * PLNFA + iWE * PWNFA + iLEWE * PLWNFA;
|
||||
NFB_p = PONFB + iLE * PLNFB + iWE * PWNFB + iLEWE * PLWNFB;
|
||||
NFC_p = PONFC + iLE * PLNFC + iWE * PWNFC + iLEWE * PLWNFC;
|
||||
EF_p = POEF;
|
||||
|
||||
// Edge transistor: PSP 103.4
|
||||
VFBEDGE_p = POVFBEDGE;
|
||||
STVFBEDGE_p = POSTVFBEDGE + iLE * PLSTVFBEDGE + iWE * PWSTVFBEDGE + iLEWE * PLWSTVFBEDGE;
|
||||
DPHIBEDGE_p = PODPHIBEDGE + iLE * PLDPHIBEDGE + iWE * PWDPHIBEDGE + iLEWE * PLWDPHIBEDGE;
|
||||
NEFFEDGE_p = PONEFFEDGE + iLE * PLNEFFEDGE + iWE * PWNEFFEDGE + iLEWE * PLWNEFFEDGE;
|
||||
CTEDGE_p = POCTEDGE + iLE * PLCTEDGE + iWE * PWCTEDGE + iLEWE * PLWCTEDGE;
|
||||
BETNEDGE_p = iLE * (POBETNEDGE + iLE * PLBETNEDGE + iWE * PWBETNEDGE + iLEWE * PLWBETNEDGE);
|
||||
STBETEDGE_p = POSTBETEDGE + iLE * PLSTBETEDGE + iWE * PWSTBETEDGE + iLEWE * PLWSTBETEDGE;
|
||||
PSCEEDGE_p = POPSCEEDGE + iLE * PLPSCEEDGE + iWE * PWPSCEEDGE + iLEWE * PLWPSCEEDGE;
|
||||
PSCEBEDGE_p = POPSCEBEDGE;
|
||||
PSCEDEDGE_p = POPSCEDEDGE;
|
||||
CFEDGE_p = POCFEDGE + iLE * PLCFEDGE + iWE * PWCFEDGE + iLEWE * PLWCFEDGE;
|
||||
CFDEDGE_p = POCFDEDGE;
|
||||
CFBEDGE_p = POCFBEDGE;
|
||||
FNTEDGE_p = POFNTEDGE;
|
||||
NFAEDGE_p = PONFAEDGE + iLE * PLNFAEDGE + iWE * PWNFAEDGE + iLEWE * PLWNFAEDGE;
|
||||
NFBEDGE_p = PONFBEDGE + iLE * PLNFBEDGE + iWE * PWNFBEDGE + iLEWE * PLWNFBEDGE;
|
||||
NFCEDGE_p = PONFCEDGE + iLE * PLNFCEDGE + iWE * PWNFCEDGE + iLEWE * PLWNFCEDGE;
|
||||
EFEDGE_p = POEFEDGE;
|
||||
|
||||
// Well proximity effect parameters
|
||||
KVTHOWE = POKVTHOWE + iLE * PLKVTHOWE + iWE * PWKVTHOWE + iLEWE * PLWKVTHOWE;
|
||||
KUOWE = POKUOWE + iLE * PLKUOWE + iWE * PWKUOWE + iLEWE * PLWKUOWE;
|
||||
|
||||
end
|
||||
|
||||
// Parasitic resistance parameters
|
||||
if ((SWGEO_i == 1) || (SWGEO_i == 2)) begin
|
||||
RG_p = RSHG_i * (`oneThird * W_f / NGCON_i + XGWE) / (NGCON_i * L_slif) + (RINT_i + RVPOLY_i) / (W_f * L_f) + NF_i * RGO;
|
||||
if (SWJUNASYM == 0) begin
|
||||
RSHD_i = RSH_i;
|
||||
end
|
||||
RSE_p = NRS * RSH_i;
|
||||
RDE_p = NRD * RSHD_i;
|
||||
RWELL_p = NF_i * RWELLO;
|
||||
RBULK_p = NF_i * RBULKO;
|
||||
RJUNS_p = NF_i * RJUNSO;
|
||||
RJUND_p = NF_i * RJUNDO;
|
||||
|
||||
// Self heating effect parameters
|
||||
`ifdef SelfHeating
|
||||
deltaRth = RTHW2 + WE / `WEN * (1.0 + RTHLW * LE / `LEN);
|
||||
deltaRth = `MAX(deltaRth, 1.0e-6);
|
||||
RTH_p = RTHO + RTHW1 / deltaRth;
|
||||
CTH_p = CTHO + CTHW1 * (CTHW2 + WE / `WEN * (1.0 + CTHLW * LE / `LEN));
|
||||
STRTH_p = STRTHO;
|
||||
`endif // SelfHeating
|
||||
|
||||
// NQS parameters
|
||||
`ifdef NQSmodel
|
||||
MUNQS_p = MUNQSO;
|
||||
`endif // NQSmodel
|
||||
|
||||
// Mechanical stress model
|
||||
tmpa = 0.0;
|
||||
tmpb = 0.0;
|
||||
loop = 0.0;
|
||||
if ((SA_i > 0.0) && (SB_i > 0.0) && ((NF_i == 1.0) || ((NF_i > 1.0) && (SD_i > 0.0)))) begin
|
||||
while (loop < (NF_i - 0.5)) begin
|
||||
tmpa = tmpa + 1.0 / (SA_i + 0.5 * L_i + loop * (SD_i + L_i));
|
||||
tmpb = tmpb + 1.0 / (SB_i + 0.5 * L_i + loop * (SD_i + L_i));
|
||||
loop = loop + 1.0;
|
||||
end
|
||||
Invsa = tmpa * invNF;
|
||||
Invsb = tmpb * invNF;
|
||||
Invsaref = 1.0 / (SAREF_i + 0.5 * L_i);
|
||||
Invsbref = 1.0 / (SBREF_i + 0.5 * L_i);
|
||||
Lx = `MAX(L_i + delLPS, 1.0e-9);
|
||||
Wx = `MAX(W_i + delWOD + WLOD, 1.0e-9);
|
||||
templ = 1.0 / pow(Lx, LLODKUO_i);
|
||||
tempw = 1.0 / pow(Wx, WLODKUO_i);
|
||||
Kstressu0 = (1.0 + LKUO * templ + WKUO * tempw + PKUO * templ * tempw) * (1.0 + TKUO * (rTa - 1.0));
|
||||
rhobeta = KUO * (Invsa + Invsb) / Kstressu0;
|
||||
rhobetaref = KUO * (Invsaref + Invsbref) / Kstressu0;
|
||||
templ = 1.0 / pow(Lx, LLODVTH_i);
|
||||
tempw = 1.0 / pow(Wx, WLODVTH_i);
|
||||
Kstressvth0 = 1.0 + LKVTHO * templ + WKVTHO * tempw + PKVTHO * templ * tempw;
|
||||
temp0 = Invsa + Invsb - Invsaref - Invsbref;
|
||||
// Parameter adaptations
|
||||
temp00 = (1.0 + rhobeta) / (1.0 + rhobetaref);
|
||||
BETN_p = BETN_p * temp00;
|
||||
THESAT_p = THESAT_p * temp00 * (1.0 + KVSAT_i * rhobetaref) / (1.0 + KVSAT_i * rhobeta);
|
||||
THESATAC_p = THESATAC_p * temp00 * (1.0 + KVSATAC_i * rhobetaref) / (1.0 + KVSATAC_i * rhobeta);
|
||||
BETNEDGE_p = BETNEDGE_p * temp00;
|
||||
temp00 = KVTHO * temp0 / Kstressvth0;
|
||||
VFB_p = VFB_p + temp00;
|
||||
VFBEDGE_p = VFBEDGE_p + temp00;
|
||||
temp00 = STETAO * temp0 / pow(Kstressvth0, LODETAO_i);
|
||||
CF_p = CF_p + temp00;
|
||||
CFAC_p = CFAC_p + temp00;
|
||||
CFEDGE_p = CFEDGE_p + temp00;
|
||||
end
|
||||
|
||||
// Well proximity effect equations
|
||||
if ((SCA_i > 0.0) || (SCB_i > 0.0) || (SCC_i > 0.0) || (SC_i > 0.0)) begin
|
||||
if ((SCA_i == 0.0) && (SCB_i == 0.0) && (SCC_i == 0.0)) begin
|
||||
temp0 = SC_i + W_i;
|
||||
temp00 = 1.0 / SCREF_i;
|
||||
SCA_i = SCREF_i * SCREF_i / (SC_i * temp0);
|
||||
SCB_i = ((0.1 * SC_i + 0.01 * SCREF_i) * exp(-10.0 * SC_i * temp00) - (0.1 * temp0 + 0.01 * SCREF_i) * exp(-10.0 * temp0 * temp00)) / W_i;
|
||||
SCC_i = ((0.05 * SC_i + 0.0025 * SCREF_i) * exp(-20.0 * SC_i * temp00) - (0.05 * temp0 + 0.0025 * SCREF_i) * exp(-20.0 * temp0 * temp00)) / W_i;
|
||||
end
|
||||
// Parameter adaptations
|
||||
temp0 = SCA_i + WEB_i * SCB_i + WEC_i * SCC_i;
|
||||
VFB_p = VFB_p + KVTHOWE * temp0;
|
||||
BETN_p = BETN_p * (1.0 + KUOWE * temp0);
|
||||
VFBEDGE_p = VFBEDGE_p + KVTHOWE * temp0;
|
||||
BETNEDGE_p = BETNEDGE_p * (1.0 + KUOWE * temp0);
|
||||
end
|
||||
end
|
||||
|
||||
// Internal parameters (including temperature scaling)
|
||||
// Clipping of the local model parameters
|
||||
VFB_i = VFB_p;
|
||||
STVFB_i = STVFB_p;
|
||||
ST2VFB_i = ST2VFB_p;
|
||||
TOX_i = `CLIP_LOW(TOX_p, 1.0e-10);
|
||||
EPSROX_i = `CLIP_LOW(EPSROX_p, 1.0);
|
||||
NEFF_i = `CLIP_BOTH(NEFF_p, 1.0e20, 1.0e26);
|
||||
FACNEFFAC_i = `CLIP_LOW(FACNEFFAC_p, 0.0);
|
||||
GFACNUD_i = `CLIP_LOW(GFACNUD_p, 0.01);
|
||||
VSBNUD_i = `CLIP_LOW(VSBNUD_p, 0.0);
|
||||
DVSBNUD_i = `CLIP_LOW(DVSBNUD_p, 0.1);
|
||||
VNSUB_i = VNSUB_p;
|
||||
NSLP_i = `CLIP_LOW(NSLP_p, 1.0e-3);
|
||||
DNSUB_i = `CLIP_BOTH(DNSUB_p, 0.0, 1.0);
|
||||
DPHIB_i = DPHIB_p;
|
||||
DELVTAC_i = DELVTAC_p;
|
||||
NP_i = `CLIP_LOW(NP_p, 0.0);
|
||||
TOXOV_i = `CLIP_LOW(TOXOV_p, 1.0e-10);
|
||||
TOXOVD_i = `CLIP_LOW(TOXOVD_p, 1.0e-10);
|
||||
NOV_i = `CLIP_BOTH(NOV_p, 1.0e23, 1.0e27);
|
||||
NOVD_i = `CLIP_BOTH(NOVD_p, 1.0e23, 1.0e27);
|
||||
CT_i = `CLIP_LOW(CT_p, 0.0);
|
||||
CTG_i = `CLIP_LOW(CTG_p, 0.0);
|
||||
CTB_i = CTB_p;
|
||||
STCT_i = STCT_p;
|
||||
CF_i = `CLIP_LOW(CF_p, 0.0);
|
||||
CFAC_i = `CLIP_LOW(CFAC_p, 0.0);
|
||||
CFD_i = `CLIP_LOW(CFD_p, 0.0);
|
||||
CFB_i = `CLIP_BOTH(CFB_p, 0.0, 1.0);
|
||||
PSCE_i = `CLIP_LOW(PSCE_p, 0.0);
|
||||
PSCEB_i = `CLIP_BOTH(PSCEB_p, 0.0, 1.0);
|
||||
PSCED_i = `CLIP_LOW(PSCED_p, 0.0);
|
||||
BETN_i = `CLIP_LOW(BETN_p, 0.0);
|
||||
STBET_i = STBET_p;
|
||||
MUE_i = `CLIP_LOW(MUE_p, 0.0);
|
||||
STMUE_i = STMUE_p;
|
||||
THEMU_i = `CLIP_LOW(THEMU_p, 0.0);
|
||||
STTHEMU_i = STTHEMU_p;
|
||||
CS_i = `CLIP_LOW(CS_p, 0.0);
|
||||
STCS_i = STCS_p;
|
||||
THECS_i = `CLIP_LOW(THECS_p, 0.0);
|
||||
STTHECS_i = STTHECS_p;
|
||||
XCOR_i = `CLIP_LOW(XCOR_p, 0.0);
|
||||
STXCOR_i = STXCOR_p;
|
||||
FETA_i = `CLIP_LOW(FETA_p, 0.0);
|
||||
RS_i = `CLIP_LOW(RS_p, 0.0);
|
||||
STRS_i = STRS_p;
|
||||
RSB_i = `CLIP_BOTH(RSB_p, -0.5, 1.0);
|
||||
RSG_i = `CLIP_LOW(RSG_p, -0.5);
|
||||
THESAT_i = `CLIP_LOW(THESAT_p, 0.0);
|
||||
THESATAC_i = `CLIP_LOW(THESATAC_p, 0.0);
|
||||
STTHESAT_i = STTHESAT_p;
|
||||
THESATB_i = `CLIP_BOTH(THESATB_p, -0.5, 1.0);
|
||||
THESATG_i = `CLIP_LOW(THESATG_p, -0.5);
|
||||
AX_i = `CLIP_LOW(AX_p, 2.0);
|
||||
AXAC_i = `CLIP_LOW(AXAC_p, 2.0);
|
||||
ALP_i = `CLIP_LOW(ALP_p, 0.0);
|
||||
ALPAC_i = `CLIP_LOW(ALPAC_p, 0.0);
|
||||
ALP1_i = `CLIP_LOW(ALP1_p, 0.0);
|
||||
ALP2_i = `CLIP_LOW(ALP2_p, 0.0);
|
||||
VP_i = `CLIP_LOW(VP_p, 1.0e-10);
|
||||
A1_i = `CLIP_LOW(A1_p, 0.0);
|
||||
A2_i = `CLIP_LOW(A2_p, 0.0);
|
||||
STA2_i = STA2_p;
|
||||
A3_i = `CLIP_LOW(A3_p, 0.0);
|
||||
A4_i = `CLIP_LOW(A4_p, 0.0);
|
||||
GCO_i = `CLIP_BOTH(GCO_p, -10.0, 10.0);
|
||||
IGINV_i = `CLIP_LOW(IGINV_p, 0.0);
|
||||
IGOV_i = `CLIP_LOW(IGOV_p, 0.0);
|
||||
IGOVD_i = `CLIP_LOW(IGOVD_p, 0.0);
|
||||
STIG_i = STIG_p;
|
||||
GC2_i = `CLIP_BOTH(GC2_p, 0.0, 10.0);
|
||||
GC3_i = `CLIP_BOTH(GC3_p, -10.0, 10.0);
|
||||
GC2OV_i = GC2_i;
|
||||
GC3OV_i = GC3_i;
|
||||
if (SWIGATE_i == 2) begin
|
||||
GC2OV_i = `CLIP_BOTH(GC2OV_p, 0.0, 10.0);
|
||||
GC3OV_i = `CLIP_BOTH(GC3OV_p, -10.0, 10.0);
|
||||
end
|
||||
CHIB_i = `CLIP_LOW(CHIB_p, 1.0);
|
||||
AGIDL_i = `CLIP_LOW(AGIDL_p, 0.0);
|
||||
AGIDLD_i = `CLIP_LOW(AGIDLD_p, 0.0);
|
||||
BGIDL_i = `CLIP_LOW(BGIDL_p, 0.0);
|
||||
BGIDLD_i = `CLIP_LOW(BGIDLD_p, 0.0);
|
||||
STBGIDL_i = STBGIDL_p;
|
||||
STBGIDLD_i = STBGIDLD_p;
|
||||
CGIDL_i = CGIDL_p;
|
||||
CGIDLD_i = CGIDLD_p;
|
||||
COX_i = `CLIP_LOW(COX_p, 0.0);
|
||||
CGOV_i = `CLIP_LOW(CGOV_p, 0.0);
|
||||
CGOVD_i = `CLIP_LOW(CGOVD_p, 0.0);
|
||||
CGBOV_i = `CLIP_LOW(CGBOV_p, 0.0);
|
||||
CFR_i = `CLIP_LOW(CFR_p, 0.0);
|
||||
CFRD_i = `CLIP_LOW(CFRD_p, 0.0);
|
||||
FNT_i = `CLIP_LOW(FNT_p, 0.0);
|
||||
FNTEXC_i = `CLIP_LOW(FNTEXC_p, 0.0);
|
||||
NFA_i = `CLIP_LOW(NFA_p, 0.0);
|
||||
NFB_i = `CLIP_LOW(NFB_p, 0.0);
|
||||
NFC_i = `CLIP_LOW(NFC_p, 0.0);
|
||||
EF_i = `CLIP_LOW(EF_p, 0.0);
|
||||
VFBEDGE_i = VFBEDGE_p;
|
||||
STVFBEDGE_i = STVFBEDGE_p;
|
||||
DPHIBEDGE_i = DPHIBEDGE_p;
|
||||
NEFFEDGE_i = `CLIP_BOTH(NEFFEDGE_p, 1.0e20, 1.0e26);
|
||||
CTEDGE_i = `CLIP_LOW(CTEDGE_p, 0.0);
|
||||
BETNEDGE_i = `CLIP_LOW(BETNEDGE_p, 0.0);
|
||||
STBETEDGE_i = STBETEDGE_p;
|
||||
PSCEEDGE_i = `CLIP_LOW(PSCEEDGE_p, 0.0);
|
||||
PSCEBEDGE_i = `CLIP_BOTH(PSCEBEDGE_p, 0.0, 1.0);
|
||||
PSCEDEDGE_i = `CLIP_LOW(PSCEDEDGE_p, 0.0);
|
||||
CFEDGE_i = `CLIP_LOW(CFEDGE_p, 0.0);
|
||||
CFDEDGE_i = `CLIP_LOW(CFDEDGE_p, 0.0);
|
||||
CFBEDGE_i = `CLIP_BOTH(CFBEDGE_p, 0.0, 1.0);
|
||||
FNTEDGE_i = `CLIP_LOW(FNTEDGE_p, 0.0);
|
||||
NFAEDGE_i = `CLIP_LOW(NFAEDGE_p, 0.0);
|
||||
NFBEDGE_i = `CLIP_LOW(NFBEDGE_p, 0.0);
|
||||
NFCEDGE_i = `CLIP_LOW(NFCEDGE_p, 0.0);
|
||||
EFEDGE_i = `CLIP_LOW(EFEDGE_p, 0.0);
|
||||
RG_i = `CLIP_LOW(RG_p, 0.0);
|
||||
RSE_i = `CLIP_LOW(RSE_p, 0.0);
|
||||
RDE_i = `CLIP_LOW(RDE_p, 0.0);
|
||||
RBULK_i = `CLIP_LOW(RBULK_p, 0.0);
|
||||
RJUNS_i = `CLIP_LOW(RJUNS_p, 0.0);
|
||||
RJUND_i = `CLIP_LOW(RJUND_p, 0.0);
|
||||
RWELL_i = `CLIP_LOW(RWELL_p, 0.0);
|
||||
`ifdef SelfHeating
|
||||
RTH_i = `CLIP_LOW(RTH_p, 1.0e-4);
|
||||
CTH_i = `CLIP_LOW(CTH_p, 0.0);
|
||||
STRTH_i = STRTH_p;
|
||||
`endif // SelfHeating
|
||||
MULT_i = `CLIP_LOW(MULT * NF_i, 0.0); // Note: NF_i is set to 1 for local model
|
||||
FACTUO_i = `CLIP_LOW(FACTUO, 0.0);
|
||||
DELVTO_i = DELVTO;
|
||||
FACTUOEDGE_i = `CLIP_LOW(FACTUOEDGE, 0.0);
|
||||
DELVTOEDGE_i = DELVTOEDGE;
|
||||
`ifdef NQSmodel
|
||||
MUNQS_i = `CLIP_LOW(MUNQS_p, 0.0);
|
||||
`endif // NQSmodel
|
||||
|
||||
// Ignore drain-side values in case of symmetric junctions
|
||||
if (SWJUNASYM_i == 0) begin
|
||||
TOXOVD_i = TOXOV_i;
|
||||
NOVD_i = NOV_i;
|
||||
AGIDLD_i = AGIDL_i;
|
||||
BGIDLD_i = BGIDL_i;
|
||||
STBGIDLD_i = STBGIDL_i;
|
||||
CGIDLD_i = CGIDL_i;
|
||||
IGOVD_i = IGOV_i;
|
||||
CGOVD_i = CGOV_i;
|
||||
CFRD_i = CFR_i;
|
||||
end
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
//======================================================================================
|
||||
//======================================================================================
|
||||
// Filename: psp103.va
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// (c) Copyright notice
|
||||
//
|
||||
// Since 2015 until today, PSP has been co-developed by NXP Semiconductors and
|
||||
// CEA-Leti. For this part of the model, each claim undivided ownership and copyrights
|
||||
// Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and
|
||||
// Delft University of Technology. For this part of the model, each claim undivided
|
||||
// ownership and copyrights
|
||||
// Until and including 2011, PSP has been co-developed by NXP Semiconductors and
|
||||
// Arizona State University. For this part of the model, NXP Semiconductors claims
|
||||
// undivided ownership and copyrights.
|
||||
//
|
||||
//
|
||||
// Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019
|
||||
//
|
||||
//======================================================================================
|
||||
//======================================================================================
|
||||
//
|
||||
// Further information can be found in the file releasenotesPSP103.txt
|
||||
//
|
||||
|
||||
`include "discipline.h"
|
||||
|
||||
//`define NQSmodel true
|
||||
|
||||
//`define SelfHeating true
|
||||
|
||||
`include "Common103_macrodefs.include"
|
||||
|
||||
`include "JUNCAP200_macrodefs.include"
|
||||
|
||||
`include "PSP103_macrodefs.include"
|
||||
|
||||
// Note: some verilog-A compilers have problems handling the ddx-operator,
|
||||
// which occurs in definition of OP-output variables. If the line below is
|
||||
// commented out, all OP-output variables using the ddx-operator are skipped.
|
||||
`define OPderiv
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PSP global model code
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
module PSP103VA(D, G, S, B);
|
||||
|
||||
`include "PSP103_module.include"
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,206 @@
|
|||
|
||||
======================================================================================
|
||||
======================================================================================
|
||||
Silicon Integration Initiative (Si2)
|
||||
Compact Model Coalition In-Code Statement
|
||||
|
||||
Software is distributed as is, completely without warranty or service support. The
|
||||
Commissariat a l'energie atomique et aux energies alternatives (CEA), NXP
|
||||
Semiconductors, and Delft University of Technology, along with their employees are
|
||||
not liable for the condition or performance of the software.
|
||||
|
||||
NXP Semiconductors, Delft University of Technology, and CEA own the copyright and
|
||||
grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license
|
||||
with respect to the software as set forth below.
|
||||
|
||||
NXP Semiconductors, Delft University of Technology, and CEA hereby disclaim all
|
||||
implied warranties.
|
||||
|
||||
NXP Semiconductors, Delft University of Technology, and CEA grant the users the right
|
||||
to modify, copy, and redistribute the software and documentation, both within the
|
||||
user's organization and externally, subject to the following restrictions:
|
||||
|
||||
1. The users agree not to charge for the NXP Semiconductors, Delft University of
|
||||
Technology, and CEA-developed code itself but may charge for additions,
|
||||
extensions, or support.
|
||||
|
||||
2. In any product based on the software, the users agree to acknowledge NXP
|
||||
Semiconductors, Delft University of Technology, and CEA that developed the
|
||||
software. This acknowledgement shall appear in the product documentation.
|
||||
|
||||
3. Redistributions to others of source code and documentation must retain the
|
||||
copyright notice, disclaimer, and list of conditions.
|
||||
|
||||
4. Redistributions to others in binary form must reproduce the copyright notice,
|
||||
disclaimer, and list of conditions in the documentation and/or other materials
|
||||
provided with the distribution.
|
||||
|
||||
CMC In-Code Statement Revision: 103.7.0 (PSP), 04/29/2019
|
||||
200.6.0 (JUNCAP),04/29/2019
|
||||
|
||||
======================================================================================
|
||||
======================================================================================
|
||||
|
||||
Authors: G.D.J. Smit, A.J. Scholten, and D.B.M. Klaassen (NXP Semiconductors)
|
||||
O. Rozeau, S. Martinie, T. Poiroux, J.C. Barbé (CEA-Leti)
|
||||
|
||||
Former contributers:
|
||||
G. Gildenblat, W. Yao, Z. Zhu, X. Li and W. Wu (Arizona State University)
|
||||
R. van Langevelde (Philips Research)
|
||||
R. van der Toorn (Delft University of Technology)
|
||||
|
||||
The most recent version of the model code, the documentation, and contact
|
||||
information can be found on:
|
||||
|
||||
http://www.cea.fr/cea-tech/leti/pspsupport
|
||||
|
||||
======================================================================================
|
||||
======================================================================================
|
||||
|
||||
This package consists of the following files:
|
||||
|
||||
- releasenotesPSP103.txt This file
|
||||
|
||||
- psp103.va Main file for PSP model
|
||||
- psp103t.va Main file for PSP model with self heating
|
||||
- psp103_nqs.va Main file for PSP model with NQS-effects
|
||||
- juncap200.va Main file for JUNCAP2 stand-alone model
|
||||
|
||||
- Common103_macrodefs.include Common macro definitions
|
||||
- PSP103_macrodefs.include Macro definitions for PSP
|
||||
- PSP103_module.include Actual model code for intrinsic MOS model
|
||||
- PSP103_parlist.include Model parameter list for PSP model
|
||||
- PSP103_scaling.include Geometry scaling equations for PSP model
|
||||
- PSP103_nqs_macrodefs.include Macro definitions for PSP-NQS
|
||||
- PSP103_InitNQS.include PSP-NQS initialization code
|
||||
- PSP103_ChargesNQS.include Calculation of NQS-charge contributions
|
||||
- JUNCAP200_macrodefs.include Macro definitions for JUNCAP2 model
|
||||
- JUNCAP200_parlist.include JUNCAP2 parameter list
|
||||
- JUNCAP200_varlist.include JUNCAP2 variable declarations
|
||||
- JUNCAP200_InitModel.include JUNCAP2 model initialization code
|
||||
|
||||
======================================================================================
|
||||
======================================================================================
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Depending which model one wants to use, one should compile one of the four .va-files
|
||||
(psp103.va, psp103t.va, psp103_nqs.va, and juncap200.va). The module names are
|
||||
"PSP103VA", "PSP103TVA", and "PSPNQS103VA" (for QS, self heating, and NQS,
|
||||
respectively), and "JUNCAP200" for the JUNCAP2-model.
|
||||
|
||||
|
||||
======================================================================================
|
||||
======================================================================================
|
||||
|
||||
Release notes vA-code of PSP 103.7.0 (April 2019)
|
||||
---------------------------------------------------------
|
||||
|
||||
Changes include
|
||||
- More efficient calculations of Vdsp and Vdspedge
|
||||
- Additional parameters for overlaps gate leakage currents
|
||||
- Charge partitioning: new switch parameter SWQPART to modify the charge
|
||||
partitioning between the drain and the source
|
||||
- Additional parameters for charge model decoupling to improve CV description
|
||||
- Minor modification on code files organization
|
||||
|
||||
- PSP103_macrodefs.include:
|
||||
- Addition of variable declarations in SPcalcLocalVarDecl macro: line 280
|
||||
- Calculation of THESATAC_T: line 390
|
||||
- Includes SPCalculation.include file as a new macro called "SPCalculation"
|
||||
|
||||
- PSP103_parlist.include:
|
||||
- New file including PSP103_binpars.include and model parameter declaration from
|
||||
PSP103_module.include
|
||||
- Addition of new parameters SWQSAT, SWQPART, CFAC, THESATAC, AXAC, ALPAC, GC2OV,
|
||||
GC3OV, CFACL, CFACLEXP, CFACW, THESATACO, THESATACL, THESATACLEXP, THESATACW,
|
||||
THESATACLW, AXACO, AXACL, ALPACL, ALPACLEXP, ALPACW, GC2OVO, GC3OVO, POCFAC,
|
||||
PLCFAC, PWCFAC, PLWCFAC, POTHESATAC, PLTHESATAC, PWTHESATAC, PLWTHESATAC,
|
||||
POAXAC, PLAXAC, PWAXAC, PLWAXAC, POGC2OV, POGC3OV, KVSATAC
|
||||
|
||||
- PSP103_scaling.include:
|
||||
- New file including PSP103_binning.include and geometry scaling equations from
|
||||
PSP103_module.include
|
||||
- Addition of new internal local parameters, associated scaling rules and clipped
|
||||
variables: CFAC_p, THESATAC_p, AXAC_p, ALPAC_p, GC2OV_p, GC3OV_p, CFAC_i,
|
||||
THESATAC_i, AXAC_i, ALPAC_i, GC2OV_i, GC3OV_i
|
||||
- Introduction of mechanical stress effect on THESATAC_p and CFAC_p. Minor
|
||||
modifications of the stress model using the internal variable temp00.
|
||||
|
||||
- PSP103_module.include:
|
||||
- New OP-output variables: lp_cfac, lp_thesatac, lp_axac, lp_alpac, lp_gc2ov,
|
||||
lp_gc3ov: lines 399, 423, 428, 430, 446, 447, 2128, 2152, 2157, 2159, 2175, 2176.
|
||||
- New max clipping value of SWIGATE_i: line 542
|
||||
- New variables SWQSAT_i, SWQPART_i: lines 150, 550 and 551
|
||||
- Calculation of internal global-binning parameters for the charge model: lines 619
|
||||
to 651
|
||||
- Calculation of GCQOV variable for overlap gate leakage currents: lines 237, 782
|
||||
to 788
|
||||
- New variable declaration for charge model THESATAC_T: lines 225 and 1040
|
||||
- Vgb is now calculated in line 1089
|
||||
- Modifications for overlaps leakage currents GC2_i, GC3_i and GCQ are replaced by
|
||||
GC2OV_i, GC3OV_i and GCQOV: lines 1209 to 1246
|
||||
- New calculation of Vdspedge: line 1344
|
||||
- Calculation of cfloc, thesatloc, axloc and alploc: lines 1136 to 1139, lines 1403 to
|
||||
1406 and lines 1418 to 1421
|
||||
- Modification of the condition "SWDELVTAC_i != 0" ("else" case was cancelled): lines
|
||||
1408 to 1415
|
||||
- Addition of the condition "SWQSAT_i != 0" for Q-model decoupling in saturation: lines
|
||||
1417 to 1422
|
||||
- Addition of the condition "SWQPART_i == 1.0" for charge partitioning and calculation
|
||||
of the new charge partitioning: lines 1484 to 1490
|
||||
|
||||
- PSP103_SPCalculation.include: cancelled file
|
||||
|
||||
- PSP103_binpars.include: cancelled file
|
||||
|
||||
- PSP103_binning.include: cancelled file
|
||||
|
||||
PSP 103.7.0 is backwards compatible with the previous version, PSP 103.6.0
|
||||
|
||||
|
||||
======================================================================================
|
||||
======================================================================================
|
||||
|
||||
Release notes vA-code of JUNCAP 200.6.0 (April 2019)
|
||||
---------------------------------------------------------
|
||||
|
||||
Change includes:
|
||||
- Bug fix on juncap express model (induced by negative values of MFOR2 and
|
||||
ISATFOR2 variables)
|
||||
- Addition of 2 multiplier factors for current IFACTOR and charge CFACTOR
|
||||
|
||||
- JUNCAP200_parlist.include:
|
||||
- Declaration of 2 new model parameters IFACTOR and CFACTOR: lines 36 and 37
|
||||
|
||||
- JUNCAP200_varlist1.include: cancelled file
|
||||
|
||||
- JUNCAP200_varlist2.include: cancelled file
|
||||
|
||||
- JUNCAP200_varlist.include:
|
||||
- New file including JUNCAP200_varlist1.include and JUNCAP200_varlist2.include
|
||||
|
||||
- JUNCAP200_macrodefs.include:
|
||||
- Definition of 2 new constants IFACTOR_cliplow and CFACTOR_cliplow: lines 57
|
||||
and 58
|
||||
- Addition of CFACTOR in the calculation of Qjprime: line 221
|
||||
- Addition of IFACTOR in the calculation of Ijprime: line 276
|
||||
- Modification of condition for calculation of MFOR2 and ISATFOR2 variables
|
||||
to avoid a bug on juncap express model.
|
||||
|
||||
- JUNCAP200_InitModel.include:
|
||||
- Addition of cliiped variables IFACTOR_i and CFACTOR_i: lines 36 and 37
|
||||
|
||||
- juncap200.va:
|
||||
- Included new file for variable declarations: line 81
|
||||
|
||||
JUNCAP 200.6.0 is backwards compatible with the previous version, JUNCAP 200.5.0
|
||||
|
||||
|
||||
=====================================================================================
|
||||
======================================================================================
|
||||
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 input concerning the Verilog-A
|
||||
implementation of the model.
|
||||
|
|
@ -130,6 +130,7 @@ extern struct coreInfo_t coreInfo; /* cmexport.c */
|
|||
#include "adms/mextram/bjt504titf.h"
|
||||
#include "adms/ekv/ekvitf.h"
|
||||
#include "adms/psp102/psp102itf.h"
|
||||
#include "adms/psp103/psp103itf.h"
|
||||
#include "adms/bsimbulk/bsimbulkitf.h"
|
||||
#include "adms/bsimcmg/bsimcmgitf.h"
|
||||
#endif
|
||||
|
|
@ -213,6 +214,7 @@ static SPICEdev *(*static_devices[])(void) = {
|
|||
(SPICEdev *(*)(void)) get_bjt504t_info,
|
||||
(SPICEdev *(*)(void)) get_ekv_info,
|
||||
(SPICEdev *(*)(void)) get_psp102_info,
|
||||
(SPICEdev *(*)(void)) get_psp103_info,
|
||||
(SPICEdev *(*)(void)) get_bsimbulk_info,
|
||||
(SPICEdev *(*)(void)) get_bsimcmg_info,
|
||||
#endif
|
||||
|
|
@ -302,7 +304,7 @@ SPICEdev ** devices(void)
|
|||
#define DEVICES_USED {"asrc", "bjt", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v32", "bsim3v2", "bsim3v1", "bsim4", "bsim4v5", "bsim4v6", "bsim4v7", \
|
||||
"bsim4soi", "bsim3soipd", "bsim3soifd", "bsim3soidd", "hisim2", "hisimhv1", "hisimhv2", \
|
||||
"cap", "cccs", "ccvs", "csw", "dio", "hfet", "hfet2", "ind", "isrc", "jfet", "ltra", "mes", "mesa" ,"mos1", "mos2", "mos3", \
|
||||
"mos6", "mos9", "res", "soi3", "sw", "tra", "urc", "vccs", "vcvs", "vsrc", "hicum0", "bjt504t", "ekv", "psp102", "bsimbulk", "bsimcmg"}
|
||||
"mos6", "mos9", "res", "soi3", "sw", "tra", "urc", "vccs", "vcvs", "vsrc", "hicum0", "bjt504t", "ekv", "psp102", "psp103", "bsimbulk", "bsimcmg"}
|
||||
#else
|
||||
#define DEVICES_USED {"asrc", "bjt", "vbic", "bsim1", "bsim2", "bsim3", "bsim3v32", "bsim3v2", "bsim3v1", "bsim4", "bsim4v5", "bsim4v6", "bsim4v7", \
|
||||
"bsim4soi", "bsim3soipd", "bsim3soifd", "bsim3soidd", "hisim2", "hisimhv1", "hisimhv2", \
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ INP2M(CKTcircuit *ckt, INPtables *tab, struct card *current)
|
|||
#ifdef ADMS
|
||||
thismodel->INPmodType != INPtypelook("ekv") &&
|
||||
thismodel->INPmodType != INPtypelook("psp102") &&
|
||||
thismodel->INPmodType != INPtypelook("psp103") &&
|
||||
thismodel->INPmodType != INPtypelook("bsimbulk") &&
|
||||
thismodel->INPmodType != INPtypelook("bsimcmg") &&
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -367,7 +367,6 @@ char *INPdomodel(CKTcircuit *ckt, struct card *image, INPtables * tab)
|
|||
}
|
||||
break;
|
||||
case 45:
|
||||
case 69:
|
||||
type = INPtypelook("psp102");
|
||||
if (type < 0) {
|
||||
err =
|
||||
|
|
@ -375,6 +374,14 @@ char *INPdomodel(CKTcircuit *ckt, struct card *image, INPtables * tab)
|
|||
("Device type PSP102 not available in this binary\n");
|
||||
}
|
||||
break;
|
||||
case 69:
|
||||
type = INPtypelook("psp103");
|
||||
if (type < 0) {
|
||||
err =
|
||||
INPmkTemp
|
||||
("Device type PSP103 not available in this binary\n");
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case 55:
|
||||
type = INPtypelook("B3SOIFD");
|
||||
|
|
|
|||
Loading…
Reference in New Issue