committed by
Holger Vogt
27 changed files with 5121 additions and 2251 deletions
-
451examples/adms/psp/psp_out.sp
-
453examples/adms/psp/psp_tran.sp
-
25src/spicelib/devices/adms/psp102/admsva/Common102_macrodefs.include
-
12src/spicelib/devices/adms/psp102/admsva/IP_ACKNOWLEDGMENT
-
62src/spicelib/devices/adms/psp102/admsva/IP_NOTICE_DISCLAIMER_LICENSE
-
256src/spicelib/devices/adms/psp102/admsva/JUNCAP200_InitModel.include
-
259src/spicelib/devices/adms/psp102/admsva/JUNCAP200_macrodefs.include
-
119src/spicelib/devices/adms/psp102/admsva/JUNCAP200_parlist.include
-
67src/spicelib/devices/adms/psp102/admsva/JUNCAP200_varlist.include
-
102src/spicelib/devices/adms/psp102/admsva/JUNCAP200_varlist1.include
-
59src/spicelib/devices/adms/psp102/admsva/JUNCAP200_varlist2.include
-
309src/spicelib/devices/adms/psp102/admsva/PSP102_ChargesNQS.include
-
197src/spicelib/devices/adms/psp102/admsva/PSP102_InitNQS.include
-
152src/spicelib/devices/adms/psp102/admsva/PSP102_binning.include
-
287src/spicelib/devices/adms/psp102/admsva/PSP102_binpars.include
-
82src/spicelib/devices/adms/psp102/admsva/PSP102_macrodefs.include
-
1900src/spicelib/devices/adms/psp102/admsva/PSP102_module.include
-
121src/spicelib/devices/adms/psp102/admsva/PSP102_nqs_macrodefs.include
-
29src/spicelib/devices/adms/psp102/admsva/psp102.va
-
52src/spicelib/devices/adms/psp102/admsva/psp102_nqs.va
-
50src/spicelib/devices/adms/psp102/admsva/psp102b.va
-
54src/spicelib/devices/adms/psp102/admsva/psp102b_nqs.va
-
50src/spicelib/devices/adms/psp102/admsva/psp102e.va
-
54src/spicelib/devices/adms/psp102/admsva/psp102e_nqs.va
-
8src/spicelib/devices/adms/psp102/admsva/readme.ngspice
-
120src/spicelib/devices/adms/psp102/admsva/readme.txt
-
102src/spicelib/devices/adms/psp102/admsva/releasenotesPSP102.txt
@ -0,0 +1,12 @@ |
|||
PSP Acknowledgement and Copyright Notice |
|||
======================================== |
|||
|
|||
Copyrights of PSP are with NXP Semiconductors, Delft University of |
|||
Technology (since 2012) and Arizona State University (until and |
|||
including 2011). |
|||
|
|||
Since 2012 until today PSP has been co-developed by NXP Semiconductors |
|||
and Delft University of Technology. Until and including 2011 PSP has |
|||
been co-developed by NXP Semiconductors and Arizona State University. |
|||
|
|||
See also: http://psp.ewi.tudelft.nl/page_Copyright_Disclaimer.php |
|||
@ -0,0 +1,62 @@ |
|||
INTELLECTUAL PROPERTY NOTICE, DISCLAIMER AND LICENSE |
|||
|
|||
The compact model software and documentation presented at this website |
|||
form a whole that will henceforth be denoted as the "Model". |
|||
|
|||
The Model presented at this website has been co-developed by NXP |
|||
Semiconductors and Arizona State University until and including 2011. |
|||
For this part of the Model, NXP Semiconductors claims undivided |
|||
ownership and copyrights. |
|||
|
|||
Since 2012 until today the Model has been co-developed by |
|||
NXP Semiconductors and Delft University of Technology and |
|||
for this part each claim undivided ownership and copyrights. |
|||
|
|||
|
|||
DISCLAIMER |
|||
|
|||
The owners are fully free to further develop, adapt and extend the |
|||
Model as they judge necessary or desirable. |
|||
|
|||
The Model is distributed as is, completely without any express or |
|||
implied warranty, or service support. The owners and their employees |
|||
are not liable in any way for the condition or performance of the |
|||
Model. The owners hereby disclaim all implied warranties. |
|||
|
|||
|
|||
LICENSE |
|||
|
|||
|
|||
NXP Semiconductors and Delft University of Technology hereby grant |
|||
users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free |
|||
license with respect to Versions of the Model which have been released |
|||
through this website http://psp.ewi.tudelft.nl. |
|||
|
|||
NXP Semiconductors and Delft University of Technology grant the users |
|||
the right to modify, copy and redistribute the Model, both within the |
|||
user's organization and externally, subject to the following |
|||
restrictions. |
|||
|
|||
|
|||
RESTRICTIONS |
|||
|
|||
1. The users agree not to charge for the Model itself but may |
|||
charge for additions, extensions, or support. |
|||
|
|||
2. In any product based on the Model, the users agree to acknowledge |
|||
the owners as developers of the Model. This acknowledgment shall |
|||
appear in the product documentation. |
|||
|
|||
3. The users agree to only use the name of CMC standard models to |
|||
identify implementations of the CMC standard models which produce the |
|||
same outputs as Standard code for the same inputs passing all CMC QA |
|||
tests. |
|||
|
|||
4. The users agree to obey all government restrictions governing |
|||
redistribution or export of the software. |
|||
|
|||
5. The users agree to reproduce any copyright notice which appears on |
|||
the software and documentation on any copy or modification of such |
|||
made available to others. |
|||
|
|||
|
|||
@ -1,67 +0,0 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: JUNCAP200_varlist.include |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors |
|||
// |
|||
// |
|||
// Version: 102.1 (PSP), 200.2 (JUNCAP), April 2007 (Simkit 2.5) |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file readme.txt |
|||
// |
|||
|
|||
|
|||
// declaration of variables needed in macro "calcerfcexpmtat" |
|||
real ysq, terfc, erfcpos; |
|||
|
|||
// declaration of variables needed in hypfunction 5 |
|||
real h1, h2, h2d, h3, h4, h5; |
|||
|
|||
// declaration of variables used within macro "juncapfunction" |
|||
real tmp, id; |
|||
real isrh, vbi_minus_vjsrh, wsrhstep, dwsrh, wsrh, wdep, asrh; |
|||
real itat, btat, twoatatoverthreebtat, umaxbeforelimiting, umax, sqrtumax, umaxpoweronepointfive; |
|||
real wgamma, wtat, ktat, ltat, mtat, xerfc, erfctimesexpmtat, gammamax; |
|||
real ibbt, Fmaxr; |
|||
real fbreakdown; |
|||
|
|||
// declaration of clipped parameters |
|||
real TRJ_i, IMAX_i; |
|||
real CJORBOT_i, CJORSTI_i, CJORGAT_i, VBIRBOT_i, VBIRSTI_i, VBIRGAT_i; |
|||
real PBOT_i, PSTI_i, PGAT_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; |
|||
real VBRBOT_i, VBRSTI_i, VBRGAT_i, PBRBOT_i, PBRSTI_i, PBRGAT_i; |
|||
|
|||
// declaration of variables calculated outside macro "juncapfunction", voltage-independent part |
|||
real tkr, tkd, auxt, KBOL_over_QELE, phitr, phitrinv, phitd, phitdinv; |
|||
real deltaphigr, phigrbot, phigrsti, phigrgat, deltaphigd, phigdbot, phigdsti, phigdgat; |
|||
real ftdbot, ftdsti, ftdgat, idsatbot, idsatsti, idsatgat, exp_VMAX_over_phitd; |
|||
real ubibot, ubisti, ubigat, vbibot, vbisti, vbigat; |
|||
real vbibot2, vbisti2, vbigat2, 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, qprefbot, qprefsti, qprefgat; |
|||
real vbimin, vch, vfmin, vbbtlim; |
|||
real qpref2bot, qpref2sti, qpref2gat; |
|||
real wdepnulrbot, wdepnulrsti, wdepnulrgat, wdepnulrinvbot, wdepnulrinvsti, wdepnulrinvgat; |
|||
real VBIRBOTinv, VBIRSTIinv, VBIRGATinv; |
|||
real perfc, berfc, cerfc; |
|||
real deltaEbot, deltaEsti, deltaEgat, atatbot, atatsti, atatgat; |
|||
real btatpartbot, btatpartsti, btatpartgat; |
|||
real fbbtbot, fbbtsti, fbbtgat; |
|||
real fstopbot, fstopsti, fstopgat, VBRinvbot, VBRinvsti, VBRinvgat; |
|||
real slopebot, slopesti, slopegat; |
|||
real vmaxbot, vmaxsti, vmaxgat, VMAX; |
|||
|
|||
// declaration of variables calculated outside macro "juncapfunction", voltage-dependent part |
|||
real VAK, idmult, vj, z, zinv, two_psistar, vjlim, vjsrh, vbbt, vav; |
|||
|
|||
@ -0,0 +1,102 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: JUNCAP200_varlist1.include |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0 (PSP), 200.4.0 (JUNCAP), December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
// declaration of clipped parameters |
|||
real TRJ_i, IMAX_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 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 |
|||
|
|||
`LocalGlobalVars |
|||
@ -0,0 +1,59 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: JUNCAP200_varlist2.include |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0 (PSP), 200.4.0 (JUNCAP), December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
//================================================================ |
|||
// 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,309 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: PSP102_ChargesNQS.include |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.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); |
|||
thesat2 = thesat1 * thesat1 * 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 * Qp6) / 37829.0 - 900.0 / 181.0 * Qp5; |
|||
end else begin |
|||
dQy = 0; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp1, xg, dQy, d2Qy, fk1) |
|||
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 * Qp0 |
|||
+ 6048 * Qp1 - 10152 * 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; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp2, xg, 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; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp3, xg, 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; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp4, xg, 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; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp5, xg, 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; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp6, xg, 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; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp7, xg, 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; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp8, xg, 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; |
|||
d2Qy = 0; |
|||
end |
|||
`fq(Qp9, xg, dQy, d2Qy, fk9) |
|||
end |
|||
|
|||
//-------------------------------------------------------------------- |
|||
|
|||
// Terminal charges for NQS |
|||
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, temp1) |
|||
QG_NQS = xg - (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, temp1) |
|||
`QiToPhi(Qp2, xg, temp2) |
|||
QG_NQS = xg - (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, temp1) |
|||
`QiToPhi(Qp2, xg, temp2) |
|||
`QiToPhi(Qp3, xg, temp3) |
|||
QG_NQS = xg - (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, temp1) |
|||
`QiToPhi(Qp2, xg, temp2) |
|||
`QiToPhi(Qp3, xg, temp3) |
|||
`QiToPhi(Qp4, xg, temp4) |
|||
`QiToPhi(Qp5, xg, temp5) |
|||
QG_NQS = xg - (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, temp1) |
|||
`QiToPhi(Qp2, xg, temp2) |
|||
`QiToPhi(Qp3, xg, temp3) |
|||
`QiToPhi(Qp4, xg, temp4) |
|||
`QiToPhi(Qp5, xg, temp5) |
|||
`QiToPhi(Qp6, xg, temp6) |
|||
`QiToPhi(Qp7, xg, temp7) |
|||
`QiToPhi(Qp8, xg, temp8) |
|||
`QiToPhi(Qp9, xg, temp9) |
|||
QG_NQS = xg - (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,197 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: PSP102_InitNQS.include |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.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 > 0) begin |
|||
if (SWNQS_i == 1) begin |
|||
phi_p1 = `Phiy(0.5); |
|||
`PhiToQb(phi_p1,Qb_tmp) |
|||
Qp1_0 = -pd * (xg - phi_p1) - Qb_tmp; |
|||
end else if (SWNQS_i == 2) begin |
|||
phi_p1 = `Phiy(`oneThird); |
|||
`PhiToQb(phi_p1,Qb_tmp) |
|||
Qp1_0 = -pd * (xg - phi_p1) - Qb_tmp; |
|||
|
|||
phi_p2 = `Phiy(`twoThirds); |
|||
`PhiToQb(phi_p2,Qb_tmp) |
|||
Qp2_0 = -pd * (xg - 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 - phi_p1) - Qb_tmp; |
|||
|
|||
phi_p2 = `Phiy(0.5); |
|||
`PhiToQb(phi_p2,Qb_tmp) |
|||
Qp2_0 = -pd * (xg - phi_p2) - Qb_tmp; |
|||
|
|||
phi_p3 = `Phiy(0.75); |
|||
`PhiToQb(phi_p3,Qb_tmp) |
|||
Qp3_0 = -pd * (xg - 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 - phi_p1) - Qb_tmp; |
|||
|
|||
phi_p2 = `Phiy(`oneThird); |
|||
`PhiToQb(phi_p2,Qb_tmp) |
|||
Qp2_0 = -pd * (xg - phi_p2) - Qb_tmp; |
|||
|
|||
phi_p3 = `Phiy(0.5); |
|||
`PhiToQb(phi_p3,Qb_tmp) |
|||
Qp3_0 = -pd * (xg - phi_p3) - Qb_tmp; |
|||
|
|||
phi_p4 = `Phiy(`twoThirds); |
|||
`PhiToQb(phi_p4,Qb_tmp) |
|||
Qp4_0 = -pd * (xg - phi_p4) - Qb_tmp; |
|||
|
|||
phi_p5 = `Phiy(0.8333333333333333); |
|||
`PhiToQb(phi_p5,Qb_tmp) |
|||
Qp5_0 = -pd * (xg - 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 - phi_p1) - Qb_tmp; |
|||
|
|||
phi_p2 = `Phiy(0.2); |
|||
`PhiToQb(phi_p2,Qb_tmp) |
|||
Qp2_0 = -pd * (xg - phi_p2) - Qb_tmp; |
|||
|
|||
phi_p3 = `Phiy(0.3); |
|||
`PhiToQb(phi_p3,Qb_tmp) |
|||
Qp3_0 = -pd * (xg - phi_p3) - Qb_tmp; |
|||
|
|||
phi_p4 = `Phiy(0.4); |
|||
`PhiToQb(phi_p4,Qb_tmp) |
|||
Qp4_0 = -pd * (xg - phi_p4) - Qb_tmp; |
|||
|
|||
phi_p5 = `Phiy(0.5); |
|||
`PhiToQb(phi_p5,Qb_tmp) |
|||
Qp5_0 = -pd * (xg - phi_p5) - Qb_tmp; |
|||
|
|||
phi_p6 = `Phiy(0.6); |
|||
`PhiToQb(phi_p6,Qb_tmp) |
|||
Qp6_0 = -pd * (xg - phi_p6) - Qb_tmp; |
|||
|
|||
phi_p7 = `Phiy(0.7); |
|||
`PhiToQb(phi_p7,Qb_tmp) |
|||
Qp7_0 = -pd * (xg - phi_p7) - Qb_tmp; |
|||
|
|||
phi_p8 = `Phiy(0.8); |
|||
`PhiToQb(phi_p8,Qb_tmp) |
|||
Qp8_0 = -pd * (xg - phi_p8) - Qb_tmp; |
|||
|
|||
phi_p9 = `Phiy(0.9); |
|||
`PhiToQb(phi_p9,Qb_tmp) |
|||
Qp9_0 = -pd * (xg - 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 - sigVds * 0.5 * dps * inv_phit1; |
|||
x_dp = x_m + sigVds * 0.5 * dps * inv_phit1; |
|||
Qp0 = 0.0; |
|||
QpN = 0.0; |
|||
if (x_sp > 0) begin |
|||
`PhiToQb(x_sp, QbSIGN) |
|||
Qp0 = -pd * (xg - x_sp) - QbSIGN; |
|||
end |
|||
if (x_dp > 0) begin |
|||
`PhiToQb(x_dp, QbSIGN) |
|||
QpN = -pd * (xg - x_dp) - QbSIGN; |
|||
end |
|||
end |
|||
@ -0,0 +1,152 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: PSP102_binning.include |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
// 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 = POVFB + iLE * PLVFB + iWE * PWVFB + iLEWE * PLWVFB; |
|||
STVFB = POSTVFB + iLE * PLSTVFB + iWE * PWSTVFB + iLEWE * PLWSTVFB; |
|||
TOX = POTOX; |
|||
EPSROX = POEPSROX; |
|||
NEFF = PONEFF + iLE * PLNEFF + iWE * PWNEFF + iLEWE * PLWNEFF; |
|||
VNSUB = POVNSUB; |
|||
NSLP = PONSLP; |
|||
DNSUB = PODNSUB; |
|||
DPHIB = PODPHIB + iLE * PLDPHIB + iWE * PWDPHIB + iLEWE * PLWDPHIB; |
|||
NP = PONP + iLE * PLNP + iWE * PWNP + iLEWE * PLWNP; |
|||
CT = POCT + iLE * PLCT + iWE * PWCT + iLEWE * PLWCT; |
|||
TOXOV = POTOXOV; |
|||
TOXOVD = POTOXOVD; |
|||
NOV = PONOV + iLE * PLNOV + iWE * PWNOV + iLEWE * PLWNOV; |
|||
NOVD = PONOVD + iLE * PLNOVD + iWE * PWNOVD + iLEWE * PLWNOVD; |
|||
|
|||
// DIBL parameters |
|||
CF = POCF + iLE * PLCF + iWE * PWCF + iLEWE * PLWCF; |
|||
CFB = POCFB; |
|||
|
|||
// Mobility parameters |
|||
BETN = POBETN + iLE * PLBETN + iiWE * PWBETN + iiiLEWE * PLWBETN; |
|||
|
|||
|
|||
STBET = POSTBET + iLE * PLSTBET + iWE * PWSTBET + iLEWE * PLWSTBET; |
|||
MUE = POMUE + iLE * PLMUE + iWE * PWMUE + iLEWE * PLWMUE; |
|||
STMUE = POSTMUE; |
|||
THEMU = POTHEMU; |
|||
STTHEMU = POSTTHEMU; |
|||
CS = POCS + iLE * PLCS + iWE * PWCS + iLEWE * PLWCS; |
|||
STCS = POSTCS; |
|||
XCOR = POXCOR + iLE * PLXCOR + iWE * PWXCOR + iLEWE * PLWXCOR; |
|||
STXCOR = POSTXCOR; |
|||
FETA = POFETA; |
|||
|
|||
// Series resistance parameters |
|||
RS = PORS + iLE * PLRS + iWE * PWRS + iLEWE * PLWRS; |
|||
STRS = POSTRS; |
|||
RSB = PORSB; |
|||
RSG = PORSG; |
|||
|
|||
// Velocity saturation parameters |
|||
THESAT = POTHESAT + iLE * PLTHESAT + iWE * PWTHESAT + iLEWE * PLWTHESAT; |
|||
STTHESAT = POSTTHESAT + iLE * PLSTTHESAT + iWE * PWSTTHESAT + iLEWE * PLWSTTHESAT; |
|||
THESATB = POTHESATB + iLE * PLTHESATB + iWE * PWTHESATB + iLEWE * PLWTHESATB; |
|||
THESATG = POTHESATG + iLE * PLTHESATG + iWE * PWTHESATG + iLEWE * PLWTHESATG; |
|||
|
|||
// Saturation voltage parameters |
|||
AX = POAX + iLE * PLAX + iWE * PWAX + iLEWE * PLWAX; |
|||
|
|||
// Channel length modulation (CLM) parameters |
|||
ALP = POALP + iLE * PLALP + iWE * PWALP + iLEWE * PLWALP; |
|||
ALP1 = POALP1 + iLE * PLALP1 + iWE * PWALP1 + iLEWE * PLWALP1; |
|||
ALP2 = POALP2 + iLE * PLALP2 + iWE * PWALP2 + iLEWE * PLWALP2; |
|||
VP = POVP; |
|||
|
|||
// Impact ionization parameters |
|||
A1 = POA1 + iLE * PLA1 + iWE * PWA1 + iLEWE * PLWA1; |
|||
A2 = POA2; |
|||
STA2 = POSTA2; |
|||
A3 = POA3 + iLE * PLA3 + iWE * PWA3 + iLEWE * PLWA3; |
|||
A4 = POA4 + iLE * PLA4 + iWE * PWA4 + iLEWE * PLWA4; |
|||
GCO = POGCO; |
|||
|
|||
// Gate current parameters |
|||
IGINV = POIGINV + iiLE * PLIGINV + iiWE * PWIGINV + iiLEWE * PLWIGINV; |
|||
IGOV = POIGOV + iLE * PLIGOV + iiWE * PWIGOV + iiiLEWE * PLWIGOV; |
|||
IGOVD = POIGOVD + iLE * PLIGOVD + iiWE * PWIGOVD + iiiLEWE * PLWIGOVD; |
|||
STIG = POSTIG; |
|||
GC2 = POGC2; |
|||
GC3 = POGC3; |
|||
CHIB = POCHIB; |
|||
|
|||
// Gate-induced drain leakage (GIDL) parameters |
|||
AGIDL = POAGIDL + iLE * PLAGIDL + iiWE * PWAGIDL + iiiLEWE * PLWAGIDL; |
|||
AGIDLD = POAGIDLD + iLE * PLAGIDLD + iiWE * PWAGIDLD + iiiLEWE * PLWAGIDLD; |
|||
BGIDL = POBGIDL; |
|||
BGIDLD = POBGIDLD; |
|||
STBGIDL = POSTBGIDL; |
|||
STBGIDLD = POSTBGIDLD; |
|||
CGIDL = POCGIDL; |
|||
CGIDLD = POCGIDLD; |
|||
|
|||
// Charge model parameters |
|||
COX = POCOX + iiLEcv * PLCOX + iiWEcv * PWCOX + iiLEWEcv * PLWCOX; |
|||
CGOV = POCGOV + iLEcv * PLCGOV + iiWEcv * PWCGOV + iiiLEWEcv * PLWCGOV; |
|||
CGOVD = POCGOVD + iLEcv * PLCGOVD + iiWEcv * PWCGOVD + iiiLEWEcv * PLWCGOVD; |
|||
CGBOV = POCGBOV + iiLcv * PLCGBOV + iiWcv * PWCGBOV + iiLWcv * PLWCGBOV; |
|||
CFR = POCFR + iLcv * PLCFR + iiWcv * PWCFR + iiiLWcv * PLWCFR; |
|||
CFRD = POCFRD + iLcv * PLCFRD + iiWcv * PWCFRD + iiiLWcv * PLWCFRD; |
|||
|
|||
// Noise model parameters |
|||
FNT = POFNT; |
|||
FNTEXC = iLE * iLE * (POFNTEXC + iLE * PLFNTEXC + iWE * PWFNTEXC + iLEWE * PLWFNTEXC); |
|||
NFA = PONFA + iLE * PLNFA + iWE * PWNFA + iLEWE * PLWNFA; |
|||
NFB = PONFB + iLE * PLNFB + iWE * PWNFB + iLEWE * PLWNFB; |
|||
NFC = PONFC + iLE * PLNFC + iWE * PWNFC + iLEWE * PLWNFC; |
|||
EF = POEF; |
|||
|
|||
// Well proximity effect parameters |
|||
KVTHOWE = POKVTHOWE + iLE * PLKVTHOWE + iWE * PWKVTHOWE + iLEWE * PLWKVTHOWE; |
|||
KUOWE = POKUOWE + iLE * PLKUOWE + iWE * PWKUOWE + iLEWE * PLWKUOWE; |
|||
@ -0,0 +1,287 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: PSP102_binpars.include |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
/////////////////////////////////////////////////// |
|||
// PSP global model parameters (binning) |
|||
/////////////////////////////////////////////////// |
|||
|
|||
parameter real LEVEL = 1021 `P(info="Model level" unit=""); |
|||
parameter real TYPE = 1 `from( -1.0,1.0 ) `P(info="Channel type parameter, +1=NMOS -1=PMOS" unit=""); |
|||
parameter real TR = 21 `from( -273.0,inf ) `P(info="nominal (reference) temperature" unit="C"); |
|||
|
|||
// Switch parameters |
|||
parameter real SWIGATE = 0 `from( 0.0,1.0 ) `P(info="Flag for gate current, 0=turn off IG" unit=""); |
|||
parameter real SWIMPACT = 0 `from( 0.0,1.0 ) `P(info="Flag for impact ionization current, 0=turn off II" unit=""); |
|||
parameter real SWGIDL = 0 `from( 0.0,1.0 ) `P(info="Flag for GIDL current, 0=turn off IGIDL" unit=""); |
|||
parameter real SWJUNCAP = 0 `from( 0.0,3.0 ) `P(info="Flag for juncap, 0=turn off juncap" unit=""); |
|||
parameter real SWJUNASYM = 0 `P(info="Flag for asymmetric junctions; 0=symmetric, 1=asymmetric" unit=""); |
|||
parameter real QMC = 1 `from( 0.0,inf ) `P(info="Quantum-mechanical correction factor" unit=""); |
|||
|
|||
// Process parameters |
|||
parameter real LVARO = 0 `P(info="Geometry independent difference between actual and programmed poly-silicon gate length" unit="m"); |
|||
parameter real LVARL = 0 `P(info="Length dependence of difference between actual and programmed poly-silicon gate length" unit=""); |
|||
parameter real LAP = 0 `P(info="Effective channel length reduction per side due to lateral diffusion of source/drain dopant ions" unit="m"); |
|||
parameter real WVARO = 0 `P(info="Geometry independent difference between actual and programmed field-oxide opening" unit="m"); |
|||
parameter real WVARW = 0 `P(info="Width dependence of difference between actual and programmed field-oxide opening" unit=""); |
|||
parameter real WOT = 0 `P(info="Effective reduction of channel width per side due to lateral diffusion of channel-stop dopant ions" unit="m"); |
|||
parameter real DLQ = 0 `P(info="Effective channel length reduction for CV" unit="m"); |
|||
parameter real DWQ = 0 `P(info="Effective channel width reduction for CV" unit="m"); |
|||
parameter real POVFB = -1 `P(info="Coefficient for the geometry independent part of VFB" unit="V"); |
|||
parameter real PLVFB = 0.0 `P(info="Coefficient for the length dependence of VFB" unit="V"); |
|||
parameter real PWVFB = 0.0 `P(info="Coefficient for the width dependence of VFB" unit="V"); |
|||
parameter real PLWVFB = 0.0 `P(info="Coefficient for the length times width dependence of VFB" unit="V"); |
|||
parameter real POSTVFB = 0.0005 `P(info="Coefficient for the geometry independent part of STVFB" unit="V/K"); |
|||
parameter real PLSTVFB = 0.0 `P(info="Coefficient for the length dependence of STVFB" unit="V/K"); |
|||
parameter real PWSTVFB = 0.0 `P(info="Coefficient for the width dependence of STVFB" unit="V/K"); |
|||
parameter real PLWSTVFB = 0.0 `P(info="Coefficient for the length times width dependence of STVFB" unit="V/K"); |
|||
parameter real POTOX = 2E-09 `P(info="Coefficient for the geometry independent part of TOX" unit="m"); |
|||
parameter real POEPSROX = 3.9 `P(info="Coefficient for the geometry independent part of EPSOX" unit=""); |
|||
parameter real PONEFF = 5E+23 `P(info="Coefficient for the geometry independent part of NEFF" unit="m^-3"); |
|||
parameter real PLNEFF = 0.0 `P(info="Coefficient for the length dependence of NEFF" unit="m^-3"); |
|||
parameter real PWNEFF = 0.0 `P(info="Coefficient for the width dependence of NEFF" unit="m^-3"); |
|||
parameter real PLWNEFF = 0.0 `P(info="Coefficient for the length times width dependence of NEFF" unit="m^-3"); |
|||
parameter real POVNSUB = 0 `P(info="Coefficient for the geometry independent part of VNSUB" unit="V"); |
|||
parameter real PONSLP = 0.05 `P(info="Coefficient for the geometry independent part of NSLP" unit="V"); |
|||
parameter real PODNSUB = 0 `P(info="Coefficient for the geometry independent part of DNSUB" unit="V^-1"); |
|||
parameter real PODPHIB = 0 `P(info="Coefficient for the geometry independent part of DPHIB" unit="V"); |
|||
parameter real PLDPHIB = 0.0 `P(info="Coefficient for the length dependence of DPHIB" unit="V"); |
|||
parameter real PWDPHIB = 0.0 `P(info="Coefficient for the width dependence of DPHIB" unit="V"); |
|||
parameter real PLWDPHIB = 0.0 `P(info="Coefficient for the length times width dependence of DPHIB" unit="V"); |
|||
parameter real PONP = 1E+26 `P(info="Coefficient for the geometry independent part of NP" unit="m^-3"); |
|||
parameter real PLNP = 0.0 `P(info="Coefficient for the length dependence of NP" unit="m^-3"); |
|||
parameter real PWNP = 0.0 `P(info="Coefficient for the width dependence of NP" unit="m^-3"); |
|||
parameter real PLWNP = 0.0 `P(info="Coefficient for the length times width dependence of NP" unit="m^-3"); |
|||
parameter real POCT = 0 `P(info="Coefficient for the geometry independent part of CT" unit=""); |
|||
parameter real PLCT = 0.0 `P(info="Coefficient for the length dependence of CT" unit=""); |
|||
parameter real PWCT = 0.0 `P(info="Coefficient for the width dependence of CT" unit=""); |
|||
parameter real PLWCT = 0.0 `P(info="Coefficient for the length times width dependence of CT" unit=""); |
|||
parameter real POTOXOV = 2E-09 `P(info="Coefficient for the geometry independent part of TOXOV" unit="m"); |
|||
parameter real POTOXOVD = 2E-09 `P(info="Coefficient for the geometry independent part of TOXOV for drain side" unit="m"); |
|||
parameter real PONOV = 5E+25 `P(info="Coefficient for the geometry independent part of NOV" unit="m^-3"); |
|||
parameter real PLNOV = 0.0 `P(info="Coefficient for the length dependence of NOV" unit="m^-3"); |
|||
parameter real PWNOV = 0.0 `P(info="Coefficient for the width dependence of NOV" unit="m^-3"); |
|||
parameter real PLWNOV = 0.0 `P(info="Coefficient for the length times width dependence of NOV" unit="m^-3"); |
|||
parameter real PONOVD = 5E+25 `P(info="Coefficient for the geometry independent part of NOV for drain side" unit="m^-3"); |
|||
parameter real PLNOVD = 0.0 `P(info="Coefficient for the length dependence of NOV for drain side" unit="m^-3"); |
|||
parameter real PWNOVD = 0.0 `P(info="Coefficient for the width dependence of NOV for drain side" unit="m^-3"); |
|||
parameter real PLWNOVD = 0.0 `P(info="Coefficient for the length times width dependence of NOV for drain side" unit="m^-3"); |
|||
|
|||
// DIBL parameters |
|||
parameter real POCF = 0 `P(info="Coefficient for the geometry independent part of CF" unit=""); |
|||
parameter real PLCF = 0.0 `P(info="Coefficient for the length dependence of CF" unit=""); |
|||
parameter real PWCF = 0.0 `P(info="Coefficient for the width dependence of CF" unit=""); |
|||
parameter real PLWCF = 0.0 `P(info="Coefficient for the length times width dependence of CF" unit=""); |
|||
parameter real POCFB = 0 `P(info="Coefficient for the geometry independent part of CFB" unit="V^-1"); |
|||
|
|||
// Mobility parameters |
|||
parameter real POBETN = 0.07 `P(info="Coefficient for the geometry independent part of BETN" unit="m^2/V/s"); |
|||
parameter real PLBETN = 0.0 `P(info="Coefficient for the length dependence of BETN" unit="m^2/V/s"); |
|||
parameter real PWBETN = 0.0 `P(info="Coefficient for the width dependence of BETN" unit="m^2/V/s"); |
|||
parameter real PLWBETN = 0.0 `P(info="Coefficient for the length times width dependence of BETN" unit="m^2/V/s"); |
|||
parameter real POSTBET = 1 `P(info="Coefficient for the geometry independent part of STBET" unit=""); |
|||
parameter real PLSTBET = 0.0 `P(info="Coefficient for the length dependence of STBET" unit=""); |
|||
parameter real PWSTBET = 0.0 `P(info="Coefficient for the width dependence of STBET" unit=""); |
|||
parameter real PLWSTBET = 0.0 `P(info="Coefficient for the length times width dependence of STBET" unit=""); |
|||
parameter real POMUE = 0.5 `P(info="Coefficient for the geometry independent part of MUE" unit="m/V"); |
|||
parameter real PLMUE = 0.0 `P(info="Coefficient for the length dependence of MUE" unit="m/V"); |
|||
parameter real PWMUE = 0.0 `P(info="Coefficient for the width dependence of MUE" unit="m/V"); |
|||
parameter real PLWMUE = 0.0 `P(info="Coefficient for the length times width dependence of MUE" unit="m/V"); |
|||
parameter real POSTMUE = 0 `P(info="Coefficient for the geometry independent part of STMUE" unit=""); |
|||
parameter real POTHEMU = 1.5 `P(info="Coefficient for the geometry independent part of THEMU" unit=""); |
|||
parameter real POSTTHEMU = 1.5 `P(info="Coefficient for the geometry independent part of STTHEMU" unit=""); |
|||
parameter real POCS = 0 `P(info="Coefficient for the geometry independent part of CS" unit=""); |
|||
parameter real PLCS = 0.0 `P(info="Coefficient for the length dependence of CS" unit=""); |
|||
parameter real PWCS = 0.0 `P(info="Coefficient for the width dependence of CS" unit=""); |
|||
parameter real PLWCS = 0.0 `P(info="Coefficient for the length times width dependence of CS" unit=""); |
|||
parameter real POSTCS = 0 `P(info="Coefficient for the geometry independent part of STCS" unit=""); |
|||
parameter real POXCOR = 0 `P(info="Coefficient for the geometry independent part of XCOR" unit="V^-1"); |
|||
parameter real PLXCOR = 0.0 `P(info="Coefficient for the length dependence of XCOR" unit="V^-1"); |
|||
parameter real PWXCOR = 0.0 `P(info="Coefficient for the width dependence of XCOR" unit="V^-1"); |
|||
parameter real PLWXCOR = 0.0 `P(info="Coefficient for the length times width dependence of XCOR" unit="V^-1"); |
|||
parameter real POSTXCOR = 0 `P(info="Coefficient for the geometry independent part of STXCOR" unit=""); |
|||
parameter real POFETA = 1 `P(info="Coefficient for the geometry independent part of FETA" unit=""); |
|||
|
|||
// Series resistance parameters |
|||
parameter real PORS = 30 `P(info="Coefficient for the geometry independent part of RS" unit="Ohm"); |
|||
parameter real PLRS = 0.0 `P(info="Coefficient for the length dependence of RS" unit="Ohm"); |
|||
parameter real PWRS = 0.0 `P(info="Coefficient for the width dependence of RS" unit="Ohm"); |
|||
parameter real PLWRS = 0.0 `P(info="Coefficient for the length times width dependence of RS" unit="Ohm"); |
|||
parameter real POSTRS = 1 `P(info="Coefficient for the geometry independent part of STRS" unit=""); |
|||
parameter real PORSB = 0 `P(info="Coefficient for the geometry independent part of RSB" unit="V^-1"); |
|||
parameter real PORSG = 0 `P(info="Coefficient for the geometry independent part of RSG" unit="V^-1"); |
|||
|
|||
// Velocity saturation parameters |
|||
parameter real POTHESAT = 1 `P(info="Coefficient for the geometry independent part of THESAT" unit="V^-1"); |
|||
parameter real PLTHESAT = 0.0 `P(info="Coefficient for the length dependence of THESAT" unit="V^-1"); |
|||
parameter real PWTHESAT = 0.0 `P(info="Coefficient for the width dependence of THESAT" unit="V^-1"); |
|||
parameter real PLWTHESAT = 0.0 `P(info="Coefficient for the length times width dependence of THESAT" unit="V^-1"); |
|||
parameter real POSTTHESAT = 1 `P(info="Coefficient for the geometry independent part of STTHESAT" unit=""); |
|||
parameter real PLSTTHESAT = 0.0 `P(info="Coefficient for the length dependence of STTHESAT" unit=""); |
|||
parameter real PWSTTHESAT = 0.0 `P(info="Coefficient for the width dependence of STTHESAT" unit=""); |
|||
parameter real PLWSTTHESAT = 0.0 `P(info="Coefficient for the length times width dependence of STTHESAT" unit=""); |
|||
parameter real POTHESATB = 0 `P(info="Coefficient for the geometry independent part of THESATB" unit="V^-1"); |
|||
parameter real PLTHESATB = 0.0 `P(info="Coefficient for the length dependence of THESATB" unit="V^-1"); |
|||
parameter real PWTHESATB = 0.0 `P(info="Coefficient for the width dependence of THESATB" unit="V^-1"); |
|||
parameter real PLWTHESATB = 0.0 `P(info="Coefficient for the length times width dependence of THESATB" unit="V^-1"); |
|||
parameter real POTHESATG = 0 `P(info="Coefficient for the geometry independent part of THESATG" unit="V^-1"); |
|||
parameter real PLTHESATG = 0.0 `P(info="Coefficient for the length dependence of THESATG" unit="V^-1"); |
|||
parameter real PWTHESATG = 0.0 `P(info="Coefficient for the width dependence of THESATG" unit="V^-1"); |
|||
parameter real PLWTHESATG = 0.0 `P(info="Coefficient for the length times width dependence of THESATG" unit="V^-1"); |
|||
|
|||
// Saturation voltage parameters |
|||
parameter real POAX = 3 `P(info="Coefficient for the geometry independent part of AX" unit=""); |
|||
parameter real PLAX = 0.0 `P(info="Coefficient for the length dependence of AX" unit=""); |
|||
parameter real PWAX = 0.0 `P(info="Coefficient for the width dependence of AX" unit=""); |
|||
parameter real PLWAX = 0.0 `P(info="Coefficient for the length times width dependence of AX" unit=""); |
|||
|
|||
// Channel length modulation (CLM) parameters |
|||
parameter real POALP = 0.01 `P(info="Coefficient for the geometry independent part of ALP" unit=""); |
|||
parameter real PLALP = 0.0 `P(info="Coefficient for the length dependence of ALP" unit=""); |
|||
parameter real PWALP = 0.0 `P(info="Coefficient for the width dependence of ALP" unit=""); |
|||
parameter real PLWALP = 0.0 `P(info="Coefficient for the length times width dependence of ALP" unit=""); |
|||
parameter real POALP1 = 0 `P(info="Coefficient for the geometry independent part of ALP1" unit="V"); |
|||
parameter real PLALP1 = 0.0 `P(info="Coefficient for the length dependence of ALP1" unit="V"); |
|||
parameter real PWALP1 = 0.0 `P(info="Coefficient for the width dependence of ALP1" unit="V"); |
|||
parameter real PLWALP1 = 0.0 `P(info="Coefficient for the length times width dependence of ALP1" unit="V"); |
|||
parameter real POALP2 = 0 `P(info="Coefficient for the geometry independent part of ALP2" unit="V^-1"); |
|||
parameter real PLALP2 = 0.0 `P(info="Coefficient for the length dependence of ALP2" unit="V^-1"); |
|||
parameter real PWALP2 = 0.0 `P(info="Coefficient for the width dependence of ALP2" unit="V^-1"); |
|||
parameter real PLWALP2 = 0.0 `P(info="Coefficient for the length times width dependence of ALP2" unit="V^-1"); |
|||
parameter real POVP = 0.05 `P(info="Coefficient for the geometry independent part of VP" unit="V"); |
|||
|
|||
// Impact ionization parameters |
|||
parameter real POA1 = 1 `P(info="Coefficient for the geometry independent part of A1" unit=""); |
|||
parameter real PLA1 = 0.0 `P(info="Coefficient for the length dependence of A1" unit=""); |
|||
parameter real PWA1 = 0.0 `P(info="Coefficient for the width dependence of A1" unit=""); |
|||
parameter real PLWA1 = 0.0 `P(info="Coefficient for the length times width dependence of A1" unit=""); |
|||
parameter real POA2 = 10 `P(info="Coefficient for the geometry independent part of A2" unit="V"); |
|||
parameter real POSTA2 = 0 `P(info="Coefficient for the geometry independent part of STA2" unit="V"); |
|||
parameter real POA3 = 1 `P(info="Coefficient for the geometry independent part of A3" unit=""); |
|||
parameter real PLA3 = 0.0 `P(info="Coefficient for the length dependence of A3" unit=""); |
|||
parameter real PWA3 = 0.0 `P(info="Coefficient for the width dependence of A3" unit=""); |
|||
parameter real PLWA3 = 0.0 `P(info="Coefficient for the length times width dependence of A3" unit=""); |
|||
parameter real POA4 = 0 `P(info="Coefficient for the geometry independent part of A4" unit="V^-0.5"); |
|||
parameter real PLA4 = 0.0 `P(info="Coefficient for the length dependence of A4" unit="V^-0.5"); |
|||
parameter real PWA4 = 0.0 `P(info="Coefficient for the width dependence of A4" unit="V^-0.5"); |
|||
parameter real PLWA4 = 0.0 `P(info="Coefficient for the length times width dependence of A4" unit="V^-0.5"); |
|||
parameter real POGCO = 0 `P(info="Coefficient for the geometry independent part of GCO" unit=""); |
|||
|
|||
// Gate current parameters |
|||
parameter real POIGINV = 0 `P(info="Coefficient for the geometry independent part of IGINV" unit="A"); |
|||
parameter real PLIGINV = 0.0 `P(info="Coefficient for the length dependence of IGINV" unit="A"); |
|||
parameter real PWIGINV = 0.0 `P(info="Coefficient for the width dependence of IGINV" unit="A"); |
|||
parameter real PLWIGINV = 0.0 `P(info="Coefficient for the length times width dependence of IGINV" unit="A"); |
|||
parameter real POIGOV = 0 `P(info="Coefficient for the geometry independent part of IGOV" unit="A"); |
|||
parameter real PLIGOV = 0.0 `P(info="Coefficient for the length dependence of IGOV" unit="A"); |
|||
parameter real PWIGOV = 0.0 `P(info="Coefficient for the width dependence of IGOV" unit="A"); |
|||
parameter real PLWIGOV = 0.0 `P(info="Coefficient for the length times width dependence of IGOV" unit="A"); |
|||
parameter real POIGOVD = 0 `P(info="Coefficient for the geometry independent part of IGOV for drain side" unit="A"); |
|||
parameter real PLIGOVD = 0.0 `P(info="Coefficient for the length dependence of IGOV for drain side" unit="A"); |
|||
parameter real PWIGOVD = 0.0 `P(info="Coefficient for the width dependence of IGOV for drain side" unit="A"); |
|||
parameter real PLWIGOVD = 0.0 `P(info="Coefficient for the length times width dependence of IGOV for drain side" unit="A"); |
|||
parameter real POSTIG = 2 `P(info="Coefficient for the geometry independent part of STIG" unit=""); |
|||
parameter real POGC2 = 0.375 `P(info="Coefficient for the geometry independent part of GC2" unit=""); |
|||
parameter real POGC3 = 0.063 `P(info="Coefficient for the geometry independent part of GC3" unit=""); |
|||
parameter real POCHIB = 3.1 `P(info="Coefficient for the geometry independent part of CHIB" unit="V"); |
|||
|
|||
// Gate-induced drain leakage (GIDL) parameters |
|||
parameter real POAGIDL = 0 `P(info="Coefficient for the geometry independent part of AGIDL" unit="A/V^3"); |
|||
parameter real PLAGIDL = 0.0 `P(info="Coefficient for the length dependence of AGIDL" unit="A/V^3"); |
|||
parameter real PWAGIDL = 0.0 `P(info="Coefficient for the width dependence of AGIDL" unit="A/V^3"); |
|||
parameter real PLWAGIDL = 0.0 `P(info="Coefficient for the length times width dependence of AGIDL" unit="A/V^3"); |
|||
parameter real POAGIDLD = 0 `P(info="Coefficient for the geometry independent part of AGIDL for drain side" unit="A/V^3"); |
|||
parameter real PLAGIDLD = 0.0 `P(info="Coefficient for the length dependence of AGIDL for drain side" unit="A/V^3"); |
|||
parameter real PWAGIDLD = 0.0 `P(info="Coefficient for the width dependence of AGIDL for drain side" unit="A/V^3"); |
|||
parameter real PLWAGIDLD = 0.0 `P(info="Coefficient for the length times width dependence of AGIDL for drain side" unit="A/V^3"); |
|||
parameter real POBGIDL = 41 `P(info="Coefficient for the geometry independent part of BGIDL" unit="V"); |
|||
parameter real POBGIDLD = 41 `P(info="Coefficient for the geometry independent part of BGIDL for drain side" unit="V"); |
|||
parameter real POSTBGIDL = 0 `P(info="Coefficient for the geometry independent part of STBGIDL" unit="V/K"); |
|||
parameter real POSTBGIDLD = 0 `P(info="Coefficient for the geometry independent part of STBGIDL for drain side" unit="V/K"); |
|||
parameter real POCGIDL = 0 `P(info="Coefficient for the geometry independent part of CGIDL" unit=""); |
|||
parameter real POCGIDLD = 0 `P(info="Coefficient for the geometry independent part of CGIDL for drain side" unit=""); |
|||
|
|||
// Charge model parameters |
|||
parameter real POCOX = 1E-14 `P(info="Coefficient for the geometry independent part of COX" unit="F"); |
|||
parameter real PLCOX = 0.0 `P(info="Coefficient for the length dependence of COX" unit="F"); |
|||
parameter real PWCOX = 0.0 `P(info="Coefficient for the width dependence of COX" unit="F"); |
|||
parameter real PLWCOX = 0.0 `P(info="Coefficient for the length times width dependence of COX" unit="F"); |
|||
parameter real POCGOV = 1E-15 `P(info="Coefficient for the geometry independent part of CGOV" unit="F"); |
|||
parameter real PLCGOV = 0.0 `P(info="Coefficient for the length dependence of CGOV" unit="F"); |
|||
parameter real PWCGOV = 0.0 `P(info="Coefficient for the width dependence of CGOV" unit="F"); |
|||
parameter real PLWCGOV = 0.0 `P(info="Coefficient for the length times width dependence of CGOV" unit="F"); |
|||
parameter real POCGOVD = 1E-15 `P(info="Coefficient for the geometry independent part of CGOV for drain side" unit="F"); |
|||
parameter real PLCGOVD = 0.0 `P(info="Coefficient for the length dependence of CGOV for drain side" unit="F"); |
|||
parameter real PWCGOVD = 0.0 `P(info="Coefficient for the width dependence of CGOV for drain side" unit="F"); |
|||
parameter real PLWCGOVD = 0.0 `P(info="Coefficient for the length times width dependence of CGOV for drain side" unit="F"); |
|||
parameter real POCGBOV = 0 `P(info="Coefficient for the geometry independent part of CGBOV" unit="F"); |
|||
parameter real PLCGBOV = 0.0 `P(info="Coefficient for the length dependence of CGBOV" unit="F"); |
|||
parameter real PWCGBOV = 0.0 `P(info="Coefficient for the width dependence of CGBOV" unit="F"); |
|||
parameter real PLWCGBOV = 0.0 `P(info="Coefficient for the length times width dependence of CGBOV" unit="F"); |
|||
parameter real POCFR = 0 `P(info="Coefficient for the geometry independent part of CFR" unit="F"); |
|||
parameter real PLCFR = 0.0 `P(info="Coefficient for the length dependence of CFR" unit="F"); |
|||
parameter real PWCFR = 0.0 `P(info="Coefficient for the width dependence of CFR" unit="F"); |
|||
parameter real PLWCFR = 0.0 `P(info="Coefficient for the length times width dependence of CFR" unit="F"); |
|||
parameter real POCFRD = 0 `P(info="Coefficient for the geometry independent part of CFR for drain side" unit="F"); |
|||
parameter real PLCFRD = 0.0 `P(info="Coefficient for the length dependence of CFR for drain side" unit="F"); |
|||
parameter real PWCFRD = 0.0 `P(info="Coefficient for the width dependence of CFR for drain side" unit="F"); |
|||
parameter real PLWCFRD = 0.0 `P(info="Coefficient for the length times width dependence of CFR for drain side" unit="F"); |
|||
|
|||
// Noise model parameters |
|||
parameter real POFNT = 1 `P(info="Coefficient for the geometry independent part of FNT" unit=""); |
|||
parameter real POFNTEXC = 0.0 `P(info="Coefficient for the geometry independent part of FNTEXC" unit=""); |
|||
parameter real PLFNTEXC = 0.0 `P(info="Coefficient for the length dependence of FNTEXC" unit=""); |
|||
parameter real PWFNTEXC = 0.0 `P(info="Coefficient for the width dependence of FNTEXC" unit=""); |
|||
parameter real PLWFNTEXC = 0.0 `P(info="Coefficient for the length times width dependence of FNTEXC" unit=""); |
|||
parameter real PONFA = 8E+22 `P(info="Coefficient for the geometry independent part of NFA" unit="V^-1/m^4"); |
|||
parameter real PLNFA = 0.0 `P(info="Coefficient for the length dependence of NFA" unit="V^-1/m^4"); |
|||
parameter real PWNFA = 0.0 `P(info="Coefficient for the width dependence of NFA" unit="V^-1/m^4"); |
|||
parameter real PLWNFA = 0.0 `P(info="Coefficient for the length times width dependence of NFA" unit="V^-1/m^4"); |
|||
parameter real PONFB = 3E+07 `P(info="Coefficient for the geometry independent part of NFB" unit="V^-1/m^2"); |
|||
parameter real PLNFB = 0.0 `P(info="Coefficient for the length dependence of NFB" unit="V^-1/m^2"); |
|||
parameter real PWNFB = 0.0 `P(info="Coefficient for the width dependence of NFB" unit="V^-1/m^2"); |
|||
parameter real PLWNFB = 0.0 `P(info="Coefficient for the length times width dependence of NFB" unit="V^-1/m^2"); |
|||
parameter real PONFC = 0 `P(info="Coefficient for the geometry independent part of NFC" unit="V^-1"); |
|||
parameter real PLNFC = 0.0 `P(info="Coefficient for the length dependence of NFC" unit="V^-1"); |
|||
parameter real PWNFC = 0.0 `P(info="Coefficient for the width dependence of NFC" unit="V^-1"); |
|||
parameter real PLWNFC = 0.0 `P(info="Coefficient for the length times width dependence of NFC" unit="V^-1"); |
|||
parameter real POEF = 1.0 `P(info="Coefficient for the flicker noise frequency exponent" unit=""); |
|||
|
|||
// Other parameters |
|||
parameter real DTA = 0 `P(info="Temperature offset w.r.t. ambient temperature" unit="K"); |
|||
|
|||
// Well proximity effect parameters |
|||
parameter real POKVTHOWE = 0 `P(info="Coefficient for the geometry independent part of KVTHOWE" unit=""); |
|||
parameter real PLKVTHOWE = 0 `P(info="Coefficient for the length dependence part of KVTHOWE" unit=""); |
|||
parameter real PWKVTHOWE = 0 `P(info="Coefficient for the width dependence part of KVTHOWE" unit=""); |
|||
parameter real PLWKVTHOWE = 0 `P(info="Coefficient for the length times width dependence part of KVTHOWE" unit=""); |
|||
parameter real POKUOWE = 0 `P(info="Coefficient for the geometry independent part of KUOWE" unit=""); |
|||
parameter real PLKUOWE = 0 `P(info="Coefficient for the length dependence part of KUOWE" unit=""); |
|||
parameter real PWKUOWE = 0 `P(info="Coefficient for the width dependence part of KUOWE" unit=""); |
|||
parameter real PLWKUOWE = 0 `P(info="Coefficient for the length times width dependence part of KUOWE" unit=""); |
|||
|
|||
// `Dummy' parameters for binning-set labeling |
|||
parameter real LMIN = 0 `P(info="Dummy parameter to label binning set" unit="m"); |
|||
parameter real LMAX = 1.0 `P(info="Dummy parameter to label binning set" unit="m"); |
|||
parameter real WMIN = 0 `P(info="Dummy parameter to label binning set" unit="m"); |
|||
parameter real WMAX = 1.0 `P(info="Dummy parameter to label binning set" unit="m"); |
|||
1900
src/spicelib/devices/adms/psp102/admsva/PSP102_module.include
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,121 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: PSP102_nqs_macrodefs.include |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
////////////////////////////////////////// |
|||
// |
|||
// Macros used in PSP-NQS |
|||
// |
|||
////////////////////////////////////////// |
|||
|
|||
// Function to calculate bulk charge from surface potential |
|||
`define PhiToQb(phi,Qb_tmp) \ |
|||
if (abs(phi) <= margin) \ |
|||
Qb_tmp = -0.70710678 * phi * Gf * (1.0 - `oneSixth * phi * (1.0 - `oneSixth * phi)); \ |
|||
else begin \ |
|||
`expl((-phi), temp) \ |
|||
Qb_tmp = Gf * sqrt(temp + phi - 1.0); \ |
|||
if (phi > margin) \ |
|||
Qb_tmp = -Qb_tmp; \ |
|||
end |
|||
|
|||
// Function used in fq-macro |
|||
`define PhiTod2Qis(xphi,d2Qis) \ |
|||
if (abs(xphi) <= margin) begin \ |
|||
Qb_tmp = -0.70710678 * xphi * Gf * (1.0 - `oneSixth * xphi * (1.0 - `oneSixth * xphi)); \ |
|||
dQbs = -0.70710678 * Gf * (1.0 - `oneThird * xphi * (1.0 - 0.25 * xphi)); \ |
|||
d2Qis = -0.235702 * Gf * (1.0 - 0.5 * xphi); \ |
|||
end else begin \ |
|||
`expl((-xphi),temp) \ |
|||
Qb_tmp = Gf * sqrt(temp + xphi - 1.0); \ |
|||
if (xphi > margin) \ |
|||
Qb_tmp = -Qb_tmp; \ |
|||
dQbs = 0.5 * Gf2 * (1.0 - temp) / Qb_tmp; \ |
|||
d2Qis = (dQbs * dQbs - 0.5 * Gf * Gf) / 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 = thesat2 * dpsy2; \ |
|||
if (CHNL_TYPE == `PMOS) \ |
|||
zsat = zsat / (1.0 + thesat1 * dps); \ |
|||
temp = sqrt(1.0 + 2.0 * zsat); \ |
|||
Fvsat = 2.0 / (1.0 + temp); \ |
|||
temp1 = d2Qy - dpsy2 * d2Qis; \ |
|||
fk = Fvsat * (fk0 - zsat * fQi * temp1 * Fvsat / temp); |
|||
|
|||
// Interpolation of surface potential along channel |
|||
`define Phiy(y) \ |
|||
x_m + H * (1.0 - sqrt(1.0 - 2.0 * dps / H * ((y) - ym))) * inv_phit1 |
|||
@ -0,0 +1,52 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: psp102_nqs.va |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
`include "discipline.h" |
|||
|
|||
`define NQSmodel true |
|||
|
|||
`include "Common102_macrodefs.include" |
|||
|
|||
`include "JUNCAP200_macrodefs.include" |
|||
|
|||
`include "PSP102_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 |
|||
// |
|||
///////////////////////////////////////////////////////////////////////////// |
|||
|
|||
`include "PSP102_nqs_macrodefs.include" |
|||
|
|||
module PSPNQS102VA(D, G, S, B); |
|||
|
|||
`include "PSP102_module.include" |
|||
|
|||
endmodule |
|||
@ -0,0 +1,50 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: psp102b.va |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
`include "discipline.h" |
|||
|
|||
`define Binning true |
|||
|
|||
`include "Common102_macrodefs.include" |
|||
|
|||
`include "JUNCAP200_macrodefs.include" |
|||
|
|||
`include "PSP102_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 (binning) |
|||
// |
|||
///////////////////////////////////////////////////////////////////////////// |
|||
|
|||
module PSP102BVA(D, G, S, B); |
|||
|
|||
`include "PSP102_module.include" |
|||
|
|||
endmodule |
|||
@ -0,0 +1,54 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: psp102b_nqs.va |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
`include "discipline.h" |
|||
|
|||
`define NQSmodel true |
|||
|
|||
`define Binning true |
|||
|
|||
`include "Common102_macrodefs.include" |
|||
|
|||
`include "JUNCAP200_macrodefs.include" |
|||
|
|||
`include "PSP102_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 (binning) |
|||
// |
|||
///////////////////////////////////////////////////////////////////////////// |
|||
|
|||
`include "PSP102_nqs_macrodefs.include" |
|||
|
|||
module PSPNQS102BVA(D, G, S, B); |
|||
|
|||
`include "PSP102_module.include" |
|||
|
|||
endmodule |
|||
@ -0,0 +1,50 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: psp102e.va |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
`include "discipline.h" |
|||
|
|||
`define LocalModel true |
|||
|
|||
`include "Common102_macrodefs.include" |
|||
|
|||
`include "JUNCAP200_macrodefs.include" |
|||
|
|||
`include "PSP102_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 local model code |
|||
// |
|||
///////////////////////////////////////////////////////////////////////////// |
|||
|
|||
module PSP102EVA(D, G, S, B); |
|||
|
|||
`include "PSP102_module.include" |
|||
|
|||
endmodule |
|||
@ -0,0 +1,54 @@ |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// Filename: psp102e_nqs.va |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// (c) Copyright notice |
|||
// |
|||
// Since 2012 until today, 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: 102.5.0, December 2013 |
|||
// |
|||
//====================================================================================== |
|||
//====================================================================================== |
|||
// |
|||
// Further information can be found in the file releasenotesPSP102.txt |
|||
// |
|||
|
|||
`include "discipline.h" |
|||
|
|||
`define NQSmodel true |
|||
|
|||
`define LocalModel true |
|||
|
|||
`include "Common102_macrodefs.include" |
|||
|
|||
`include "JUNCAP200_macrodefs.include" |
|||
|
|||
`include "PSP102_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 local model code |
|||
// |
|||
///////////////////////////////////////////////////////////////////////////// |
|||
|
|||
`include "PSP102_nqs_macrodefs.include" |
|||
|
|||
module PSPNQS102EVA(D, G, S, B); |
|||
|
|||
`include "PSP102_module.include" |
|||
|
|||
endmodule |
|||
@ -1,8 +0,0 @@ |
|||
ngspice customizations of package psp102.1 |
|||
------------------------------------------ |
|||
|
|||
- Mon Apr 30 15:28:25 WEDT 2007 (Berlin) |
|||
o renamed 'initializeModel/initializeInstance' to 'initial_model/initial_instance'. |
|||
(this issue should go away when auto-partionning done in adms.) |
|||
o redefined macro P(txt) in order to 'see' instance parameters |
|||
o status: psp code created by adms compiles |
|||
@ -1,120 +0,0 @@ |
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
--------------------------- |
|||
Verilog-A definition of PSP |
|||
--------------------------- |
|||
|
|||
|
|||
(c) Copyright 2007, All Rights Reserved, NXP Semiconductors |
|||
|
|||
|
|||
Version: PSP 102.1 (including JUNCAP2 200.2), April 2007 (Simkit 2.5) |
|||
|
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
Authors: G.D.J. Smit, A.J. Scholten, and D.B.M. Klaassen (NXP Semiconductors Research) |
|||
R. van Langevelde (Philips Research) |
|||
G. Gildenblat, X. Li, and W. Wu (The Arizona State University) |
|||
|
|||
|
|||
|
|||
The most recent version of the model code, the documentation, and contact information |
|||
can be found on: |
|||
|
|||
http://PSPmodel.asu.edu/ |
|||
or |
|||
http://www.nxp.com/Philips_Models/ |
|||
|
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
This package consists of several files: |
|||
|
|||
- readme.txt This file |
|||
|
|||
- psp102.va Main file for global ("geometrical") model |
|||
- psp102b.va Main file for global binning model |
|||
- psp102e.va Main file for local ("electrical") model |
|||
- psp102_nqs.va Main file for global ("geometrical") model with NQS-effects |
|||
- psp102b_nqs.va Main file for global binning model with NQS-effects |
|||
- psp102e_nqs.va Main file for local ("electrical") model with NQS-effects |
|||
- juncap200.va Main file for JUNCAP2 stand-alone model |
|||
|
|||
- SIMKIT_macrodefs.include Common macro definitions |
|||
- PSP102_macrodefs.include Macro definitions for PSP |
|||
- PSP102_module.include Actual model code for intrinsic MOS model |
|||
- PSP102_binning.include Geometry scaling equation for binning |
|||
- PSP102_binpars.include Parameterlist for global PSP binning model |
|||
- PSP102_nqs_macrodefs.include Macro definitions for PSP-NQS |
|||
- PSP102_InitNQS.include PSP-NQS initialization code |
|||
- PSP102_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 seven .va-files |
|||
(psp102.va, psp102b.va, psp102e.va, psp102_nqs.va, psp102b_nqs.va, psp102e_nqs.va, and |
|||
juncap200.va). The module names are "PSP102VA" and "PSPNQS102VA" for the global PSP-model |
|||
(QS and NQS, respectively), and similarly "PSP102BVA" and "PSPNQS102BVA" for the binning |
|||
PSP-model, "PSP102EVA" and "PSPNQS102EVA" for the local PSP-model, and "JUNCAP200" for |
|||
the JUNCAP2-model. |
|||
|
|||
|
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
Release notes va-code of PSP 102.1, including JUNCAP2 200.2 (April 2007) |
|||
------------------------------------------------------------------------ |
|||
|
|||
Focus in this release has been on improving the simulation speed of PSP and JUNCAP2. |
|||
The model equations in this release of PSP 102.1 are identical to those in the |
|||
October 2006 release. This version features some minor impelementation changes |
|||
w.r.t. the previous release. |
|||
|
|||
The main changes have been in the SiMKit version generated from this verilog-A |
|||
implementation: improvements in the automatic C-code generation process |
|||
and compilation of the C-code. The result is reflected in the SiMKit 2.5 version of |
|||
PSP, which shows a very significant simulation speed improvement w.r.t SiMKit 2.4. |
|||
|
|||
The minor implementation changes in the verilog-A code will have some positive effect |
|||
on the simulation speed of the verilog-A version as well. Note, however, that the |
|||
simulation speed of the verilog-A version of PSP and the improvement w.r.t. the |
|||
previous version strongly depend on the verilog-A compiler used. |
|||
|
|||
PSP 102.1 is backwards compatible with the previous version, PSP 102.0. |
|||
|
|||
|
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
The functionality of the Verilog-A code in this package is the same as that of the |
|||
C-code, which is contained in SIMKIT version 2.5. Note that Operating Point information |
|||
is available only in the C-code, not in Verilog-A code. |
|||
|
|||
|
|||
The PSP-NQS model is provided as Verilog-A code. In SiMKit 2.5, a test version of |
|||
the PSP-NQS model is included (identical to that in SiMKit 2.4). This implementation |
|||
circumvents the problem of the SpectreVerilog-A-generated C-code being too large to |
|||
compile. Moreover, it is computationally more efficient as it uses less rows in the |
|||
simulator matrix. On the other hand, this implementation has some known limitations. |
|||
More information is available from the authors. Further improvements are expected in |
|||
future releases. |
|||
|
|||
|
|||
This Verilog-A code of PSP is primarily intended as a source for C-code generation |
|||
using ADMS. Most of the testing has been done on the C-code which was generated from it. |
|||
|
|||
|
|||
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 useful comments on the Verilog-A |
|||
code. |
|||
@ -0,0 +1,102 @@ |
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
--------------------------- |
|||
Verilog-A definition of PSP |
|||
--------------------------- |
|||
|
|||
|
|||
(c) Copyright notice |
|||
|
|||
Since 2012 until today, 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: PSP 102.5.0 (including JUNCAP2 200.4.0), December 2013 |
|||
|
|||
This version of PSP is contained in SiMKit 4.2 |
|||
|
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
Authors: G.D.J. Smit, A.J. Scholten, and D.B.M. Klaassen (NXP Semiconductors) |
|||
R. van der Toorn (Delft University of Technology) |
|||
|
|||
Former contributers: |
|||
G. Gildenblat, W. Yao, Z. Zhu, X. Li and W. Wu (Arizona State University) |
|||
R. van Langevelde (Philips Research) |
|||
|
|||
The most recent version of the model code, the documentation, and contact |
|||
information can be found on: |
|||
|
|||
http://psp.ewi.tudelft.nl/ |
|||
|
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
This package consists of the following files: |
|||
|
|||
- releasenotesPSP102.txt This file |
|||
|
|||
- psp102.va Main file for global ("geometrical") model |
|||
- psp102b.va Main file for global binning model |
|||
- psp102e.va Main file for local ("electrical") model |
|||
- psp102_nqs.va Main file for global ("geometrical") model with NQS-effects |
|||
- psp102b_nqs.va Main file for global binning model with NQS-effects |
|||
- psp102e_nqs.va Main file for local ("electrical") model with NQS-effects |
|||
|
|||
- Common102_macrodefs.include Common macro definitions |
|||
- PSP102_macrodefs.include Macro definitions for PSP |
|||
- PSP102_module.include Actual model code for intrinsic MOS model |
|||
- PSP102_binning.include Geometry scaling equation for binning |
|||
- PSP102_binpars.include Parameterlist for global PSP binning model |
|||
- PSP102_nqs_macrodefs.include Macro definitions for PSP-NQS |
|||
- PSP102_InitNQS.include PSP-NQS initialization code |
|||
- PSP102_ChargesNQS.include Calculation of NQS-charge contributions |
|||
- JUNCAP200_macrodefs.include Macro definitions for JUNCAP2 model |
|||
- JUNCAP200_parlist.include JUNCAP2 parameter list |
|||
- JUNCAP200_varlist1.include JUNCAP2 variable declarations |
|||
- JUNCAP200_varlist2.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 seven .va-files |
|||
(psp102.va, psp102b.va, psp102e.va, psp102_nqs.va, psp102b_nqs.va, and psp102e_nqs.va). |
|||
The module names are "PSP102VA" and "PSPNQS102VA" for the global PSP-model (QS and |
|||
NQS, respectively), and similarly "PSP102BVA" and "PSPNQS102BVA" for the binning |
|||
PSP-model, "PSP102EVA" and "PSPNQS102EVA" for the local PSP-model. |
|||
|
|||
For the stand-alone version of JUNCAP2, version 200.4.0, please refer to the distribution |
|||
of PSP103. |
|||
|
|||
====================================================================================== |
|||
====================================================================================== |
|||
|
|||
Release notes vA-code of PSP 102.5.0 (December 2013) |
|||
---------------------------------------------------- |
|||
|
|||
Changes: |
|||
|
|||
- Added excess noise model. |
|||
- Solved minor numerical issue in avalanche current calculation (occurring when A4 is |
|||
large and the body is forward biased). |
|||
- Fixed missing T-scaling in OP-output variables lp_bgidl and lp_bgidld. |
|||
|
|||
PSP 102.5.0 is backwards compatible with the previous version, PSP 102.4.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. |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue