psp102 update to latest available version 102.5.0

This commit is contained in:
dwarning 2020-12-22 20:44:07 +01:00 committed by Holger Vogt
parent e8aea4967c
commit 336bb3480b
27 changed files with 5134 additions and 2264 deletions

View File

@ -1,4 +1,4 @@
psp nch output
psp102 nch output
*
vd d 0 dc 0.1
vg g 0 dc 0.0
@ -25,200 +25,259 @@ plot abs(i(vb)) ylog ylimit 1e-12 1e-03
.endc
*
.model nch nmos level=45
+type=1.0e+00
+tr=21.0e+00
+swigate=0.0e+00
+swimpact=1.0e+00
+swgidl=0.0e+00
+swjuncap=0.0e+00
+lvaro=0.0e+00
+lvarl=0.0e+00
+lvarw=0.0e+00
+lap=0.0e+00
+wvaro=0.0e+00
+wvarl=0.0e+00
+wvarw=0.0e+00
+wot=0.0e+00
+vfbo=-1.0e+00
+vfbl=0.0e+00
+vfbw=0.0e+00
+vfblw=0.0e+00
+stvfbo=500.0e-06
+stvfbl=0.0e+00
+stvfbw=0.0e+00
+stvfblw=0.0e+00
+toxo=2.0e-09
+nsubo=300.0e+21
+nsubw=0.0e+00
+wseg=10.0e-09
+npck=1.0e+24
+npckw=0.0e+00
+wsegp=10.0e-09
+lpck=10.0e-09
+lpckw=0.0e+00
+vnsubo=0.0e+00
+nslpo=50.0e-03
+dnsubo=0.0e+00
+npo=100.0e+24
+npl=0.0e+00
+qmc=1.0e+00
+cto=0.0e+00
+ctl=0.0e+00
+ctlexp=1.0e+00
+ctw=0.0e+00
+toxovo=2.0e-09
+lov=0.0e+00
+novo=50.0e+24
+fol1=0.0e+00
+fol2=0.0e+00
+cfl=0.0e+00
+cflexp=2.0e+00
+cfw=0.0e+00
+cfbo=0.0e+00
+uo=50.0e-03
+fbet1=0.0e+00
+fbet1w=0.0e+00
+lp1=10.0e-09
+lp1w=0.0e+00
+fbet2=0.0e+00
+lp2=10.0e-09
+betw1=0.0e+00
+betw2=0.0e+00
+wbet=1.0e-09
+stbeto=1.0e+00
+stbetl=0.0e+00
+stbetw=0.0e+00
+stbetlw=0.0e+00
+mueo=500.0e-03
+muew=0.0e+00
+stmueo=0.0e+00
+themuo=1.5e+00
+stthemuo=1.5e+00
+cso=0.0e+00
+csw=0.0e+00
+stcso=0.0e+00
+xcoro=0.0e+00
+xcorl=0.0e+00
+xcorw=0.0e+00
+xcorlw=0.0e+00
+stxcoro=0.0e+00
+rsw1=0.5e+03
+rsw2=0.0e+00
+strso=1.0e+00
+rsbo=0.0e+00
+rsgo=0.0e+00
+thesato=0.0e+00
+thesatl=50.0e-03
+thesatlexp=1.0e+00
+thesatw=0.0e+00
+stthesato=1.0e+00
+stthesatl=0.0e+00
+stthesatw=0.0e+00
+stthesatlw=0.0e+00
+thesatbo=0.0e+00
+thesatgo=0.0e+00
+axo=18.0e+00
+axl=400.0e-03
+alpl=500.0e-06
+alplexp=1.0e+00
+alpw=0.0e+00
+alp1l1=0.0e+00
+alp1lexp=500.0e-03
+alp1l2=0.0e+00
+alp1w=0.0e+00
+alp2l1=0.0e+00
+alp2lexp=0.5e+00
+alp2l2=0.0e+00
+alp2w=0.0e+00
+vpo=50.0e-03
+a1o=1.0e+00
+a1l=0.0e+00
+a1w=0.0e+00
+a2o=10.0e+00
+sta2o=0.0e+00
+a3o=1.0e+00
+a3l=0.0e+00
+a3w=0.0e+00
+a4o=0.0e+00
+a4w=0.0e+00
+gcoo=0.0e+00
+iginvlw=0.0e+00
+igovw=0.0e+00
+stigo=2.0e+00
+gc2o=375.0e-03
+gc3o=63.0e-03
+chibo=3.1e+00
+agidlw=0.0e+00
+bgidlo=41.0e+00
+stbgidlo=0.0e+00
+cgidlo=0.0e+00
+cgbovl=0.0e+00
+cfrw=0.0e+00
+nfalw=80.0e+21
+nfblw=30.0e+06
+nfclw=0.0e+00
+saref=1.0e-06
+sbref=1.0e-06
+wlod=0.0e+00
+kuo=0.0e+00
+kvsat=0.0e+00
+tkuo=0.0e+00
+lkuo=0.0e+00
+wkuo=0.0e+00
+pkuo=0.0e+00
+llodkuo=0.0e+00
+wlodkuo=0.0e+00
+kvtho=0.0e+00
+lkvtho=0.0e+00
+wkvtho=0.0e+00
+pkvtho=0.0e+00
+llodvth=0.0e+00
+wlodvth=0.0e+00
+stetao=0.0e+00
+lodetao=1.0e+00
+trj=21.0e+00
+imax=1.0e+03
+cjorbot=1.0e-03
+cjorsti=1.0e-09
+cjorgat=1.0e-09
+vbirbot=1.0e+00
+vbirsti=1.0e+00
+vbirgat=1.0e+00
+pbot=500.0e-03
+psti=500.0e-03
+pgat=500.0e-03
+phigbot=1.16e+00
+phigsti=1.16e+00
+phiggat=1.16e+00
+idsatrbot=1.0e-12
+idsatrsti=1.0e-18
+idsatrgat=1.0e-18
+csrhbot=100.0e+00
+csrhsti=100.0e-06
+csrhgat=100.0e-06
+xjunsti=100.0e-09
+xjungat=100.0e-09
+ctatbot=100.0e+00
+ctatsti=100.0e-06
+ctatgat=100.0e-06
+mefftatbot=250.0e-03
+mefftatsti=250.0e-03
+mefftatgat=250.0e-03
+cbbtbot=1.0e-12
+cbbtsti=1.0e-18
+cbbtgat=1.0e-18
+fbbtrbot=1.0e+09
+fbbtrsti=1.0e+09
+fbbtrgat=1.0e+09
+stfbbtbot=-1.0e-03
+stfbbtsti=-1.0e-03
+stfbbtgat=-1.0e-03
+vbrbot=10.0e+00
+vbrsti=10.0e+00
+vbrgat=10.0e+00
+pbrbot=4.0e+00
+pbrsti=4.0e+00
+pbrgat=4.0e+00
+dta=0.0e+00
+TR=27.0
+swigate=0
+swimpact=1
+swgidl=0
+swjuncap=1
+DTA=0
+QMC=1.0
+LVARO=-10.0E-9
+LVARL=0
+LVARW=0
+LAP=10.0E-9
+WVARO=10.0E-9
+WVARL=0
+WVARW=0
+WOT=0
+DLQ=0
+DWQ=0
+VFBO=-1.1
+VFBL=0
+VFBW=0
+VFBLW=0
+STVFBO=5.0E-4
+STVFBL=0
+STVFBW=0
+STVFBLW=0
+TOXO=1.5E-9
+EPSROXO=3.9
+NSUBO=3.0E+23
+NSUBW=0
+WSEG=1.5E-10
+NPCK=1.0E+24
+NPCKW=0
+WSEGP=0.9E-8
+LPCK=5.5E-8
+LPCKW=0
+FOL1=2.0E-2
+FOL2=5.0E-6
+VNSUBO=0
+NSLPO=0.05
+DNSUBO=0
+DPHIBO=0
+DPHIBL=0
+DPHIBLEXP=1.0
+DPHIBW=0
+DPHIBLW=0
+NPO=1.5E+26
+NPL=10.0E-18
+CTO=5.0E-15
+CTL=4.0E-2
+CTLEXP=0.6
+CTW=0
+CTLW=0
+TOXOVO=1.5E-9
+TOXOVDO=2.0E-9
+LOV=10.0E-9
+LOVD=0
+NOVO=7.5E+25
+NOVDO=5.0e+25
+CFL=3.0E-4
+CFLEXP=2.0
+CFW=5.0E-3
+CFBO=0.3
+UO=3.5E-2
+FBET1=-0.3
+FBET1W=0.15
+LP1=1.5E-7
+LP1W=-2.5E-2
+FBET2=50.0
+LP2=8.5E-10
+BETW1=5.0E-2
+BETW2=-2.0E-2
+WBET=5.0E-10
+STBETO=1.75
+STBETL=-2.0E-2
+STBETW=-2.0E-3
+STBETLW=-3.0E-3
+MUEO=0.6
+MUEW=-1.2E-2
+STMUEO=0.5
+THEMUO=2.75
+STTHEMUO=-0.1
+CSO=1.0E-2
+CSL=0
+CSLEXP=1
+CSW=0
+CSLW=0
+STCSO=-5.0
+XCORO=0.15
+XCORL=2.0E-3
+XCORW=-3.0E-2
+XCORLW=-3.5E-3
+STXCORO=1.25
+FETAO=1
+RSW1=50
+RSW2=5.0E-2
+STRSO=-2.0
+RSBO=0
+RSGO=0
+THESATO=1.0E-6
+THESATL=0.6
+THESATLEXP=0.75
+THESATW=-1.0E-2
+THESATLW=0
+STTHESATO=1.5
+STTHESATL=-2.5E-2
+STTHESATW=-2.0E-2
+STTHESATLW=-5.0E-3
+THESATBO=0.15
+THESATGO=0.75
+AXO=20
+AXL=0.2
+ALPL=7.0E-3
+ALPLEXP=0.6
+ALPW=5.0E-2
+ALP1L1=2.5E-2
+ALP1LEXP=0.4
+ALP1L2=0.1
+ALP1W=8.5E-3
+ALP2L1=0.5
+ALP2LEXP=0
+ALP2L2=0.5
+ALP2W=-0.2
+VPO=0.25
+A1O=1.0
+A1L=0
+A1W=0
+A2O=10.0
+STA2O=-0.5
+A3O=1.0
+A3L=0
+A3W=0
+A4O=0
+A4L=0
+A4W=0
+GCOO=5.0
+IGINVLW=50.0
+IGOVW=10.0
+IGOVDW=0
+STIGO=1.5
+GC2O=1.0
+GC3O=-1.0
+CHIBO=3.1
+AGIDLW=50.0
+AGIDLDW=0
+BGIDLO=35.0
+BGIDLDO=41
+STBGIDLO=-5.0E-4
+STBGIDLDO=0
+CGIDLO=0.15
+CGIDLDO=0
+CGBOVL=0
+CFRW=5.0E-17
+CFRDW=0
+FNTO=1
+NFALW=8.0E+22
+NFBLW=3.0E7
+NFCLW=0
+RGO=0
+RINT=0
+RVPOLY=0
+RSHG=0
+DLSIL=0
+RBULKO=0
+RWELLO=0
+RJUNDO=0
+RJUNSO=0
+TRJ=27.0
+IMAX=1.0E3
+VJUNREF=2.5
+FJUNQ=0.03
+CJORBOT=1.0E-3
+CJORSTI=1.0E-9
+CJORGAT=0.5E-9
+VBIRBOT=0.75
+VBIRSTI=1.0
+VBIRGAT=0.75
+PBOT=0.35
+PSTI=0.35
+PGAT=0.6
+PHIGBOT=1.16
+PHIGSTI=1.16
+PHIGGAT=1.16
+IDSATRBOT=5.0E-9
+IDSATRSTI=1.0E-18
+IDSATRGAT=1.0E-18
+CSRHBOT=5.0E2
+CSRHSTI=0
+CSRHGAT=1.0E3
+XJUNSTI=1.0E-8
+XJUNGAT=1.0E-9
+CTATBOT=5.0E2
+CTATSTI=0
+CTATGAT=1.0E3
+MEFFTATBOT=0.25
+MEFFTATSTI=0.25
+MEFFTATGAT=0.25
+CBBTBOT=1.0E-12
+CBBTSTI=1.0E-18
+CBBTGAT=1.0E-18
+FBBTRBOT=1.0E9
+FBBTRSTI=1.0E9
+FBBTRGAT=1.0E9
+STFBBTBOT=-1.0E-3
+STFBBTSTI=-1.0E-3
+STFBBTGAT=-1.0E-2
+VBRBOT=10.0
+VBRSTI=10.0
+VBRGAT=10.0
+PBRBOT=3
+PBRSTI=4
+PBRGAT=3
+VJUNREFD=2.5
+FJUNQD=0.03
+CJORBOTD=1.0E-3
+CJORSTID=1.0E-9
+CJORGATD=1.0E-9
+VBIRBOTD=1.0
+VBIRSTID=1.0
+VBIRGATD=1.0
+PBOTD=0.5
+PSTID=0.5
+PGATD=0.5
+PHIGBOTD=1.16
+PHIGSTID=1.16
+PHIGGATD=1.16
+IDSATRBOTD=1.0E-12
+IDSATRSTID=1.0E-18
+IDSATRGATD=1.0E-18
+CSRHBOTD=1.0E+2
+CSRHSTID=1.0E-4
+CSRHGATD=1.0E-4
+XJUNSTID=1.0E-7
+XJUNGATD=1.0E-7
+CTATBOTD=1.0E+2
+CTATSTID=1.0E-4
+CTATGATD=1.0E-4
+MEFFTATBOTD=0.25
+MEFFTATSTID=0.25
+MEFFTATGATD=0.25
+CBBTBOTD=1.0E-12
+CBBTSTID=1.0E-18
+CBBTGATD=1.0E-18
+FBBTRBOTD=1.0E9
+FBBTRSTID=1.0E9
+FBBTRGATD=1.0E9
+STFBBTBOTD=-1.0E-3
+STFBBTSTID=-1.0E-3
+STFBBTGATD=-1.0E-3
+VBRBOTD=10.0
+VBRSTID=10.0
+VBRGATD=10.0
+PBRBOTD=4
+PBRSTID=4
+PBRGATD=4
.end

View File

@ -1,4 +1,4 @@
psp nch transfer
psp102 nch transfer
*
vd d 0 dc 0.1
vg g 0 dc 0.0
@ -19,207 +19,266 @@ m1 d g s b nch
*
.option temp=21
.control
dc vg 0 3.5 0.02 vb -3 0 0.5
dc vg 0 2.5 0.02 vb -3 0 0.5
plot abs(i(vd))
dc vg 0 1.5 0.01 vb -3 0 0.5
plot abs(i(vd)) ylog ylimit 1e-12 1e-03
.endc
*
.model nch nmos level=45
+type=1.0e+00
+tr=21.0e+00
+swigate=0.0e+00
+swimpact=1.0e+00
+swgidl=0.0e+00
+swjuncap=0.0e+00
+lvaro=0.0e+00
+lvarl=0.0e+00
+lvarw=0.0e+00
+lap=0.0e+00
+wvaro=0.0e+00
+wvarl=0.0e+00
+wvarw=0.0e+00
+wot=0.0e+00
+vfbo=-1.0e+00
+vfbl=0.0e+00
+vfbw=0.0e+00
+vfblw=0.0e+00
+stvfbo=500.0e-06
+stvfbl=0.0e+00
+stvfbw=0.0e+00
+stvfblw=0.0e+00
+toxo=2.0e-09
+nsubo=300.0e+21
+nsubw=0.0e+00
+wseg=10.0e-09
+npck=1.0e+24
+npckw=0.0e+00
+wsegp=10.0e-09
+lpck=10.0e-09
+lpckw=0.0e+00
+vnsubo=0.0e+00
+nslpo=50.0e-03
+dnsubo=0.0e+00
+npo=100.0e+24
+npl=0.0e+00
+qmc=1.0e+00
+cto=0.0e+00
+ctl=0.0e+00
+ctlexp=1.0e+00
+ctw=0.0e+00
+toxovo=2.0e-09
+lov=0.0e+00
+novo=50.0e+24
+fol1=0.0e+00
+fol2=0.0e+00
+cfl=0.0e+00
+cflexp=2.0e+00
+cfw=0.0e+00
+cfbo=0.0e+00
+uo=50.0e-03
+fbet1=0.0e+00
+fbet1w=0.0e+00
+lp1=10.0e-09
+lp1w=0.0e+00
+fbet2=0.0e+00
+lp2=10.0e-09
+betw1=0.0e+00
+betw2=0.0e+00
+wbet=1.0e-09
+stbeto=1.0e+00
+stbetl=0.0e+00
+stbetw=0.0e+00
+stbetlw=0.0e+00
+mueo=500.0e-03
+muew=0.0e+00
+stmueo=0.0e+00
+themuo=1.5e+00
+stthemuo=1.5e+00
+cso=0.0e+00
+csw=0.0e+00
+stcso=0.0e+00
+xcoro=0.0e+00
+xcorl=0.0e+00
+xcorw=0.0e+00
+xcorlw=0.0e+00
+stxcoro=0.0e+00
+rsw1=2.5e+03
+rsw2=0.0e+00
+strso=1.0e+00
+rsbo=0.0e+00
+rsgo=0.0e+00
+thesato=0.0e+00
+thesatl=50.0e-03
+thesatlexp=1.0e+00
+thesatw=0.0e+00
+stthesato=1.0e+00
+stthesatl=0.0e+00
+stthesatw=0.0e+00
+stthesatlw=0.0e+00
+thesatbo=0.0e+00
+thesatgo=0.0e+00
+axo=18.0e+00
+axl=400.0e-03
+alpl=500.0e-06
+alplexp=1.0e+00
+alpw=0.0e+00
+alp1l1=0.0e+00
+alp1lexp=500.0e-03
+alp1l2=0.0e+00
+alp1w=0.0e+00
+alp2l1=0.0e+00
+alp2lexp=0.5e+00
+alp2l2=0.0e+00
+alp2w=0.0e+00
+vpo=50.0e-03
+a1o=1.0e+00
+a1l=0.0e+00
+a1w=0.0e+00
+a2o=10.0e+00
+sta2o=0.0e+00
+a3o=1.0e+00
+a3l=0.0e+00
+a3w=0.0e+00
+a4o=0.0e+00
+a4w=0.0e+00
+gcoo=0.0e+00
+iginvlw=0.0e+00
+igovw=0.0e+00
+stigo=2.0e+00
+gc2o=375.0e-03
+gc3o=63.0e-03
+chibo=3.1e+00
+agidlw=0.0e+00
+bgidlo=41.0e+00
+stbgidlo=0.0e+00
+cgidlo=0.0e+00
+cgbovl=0.0e+00
+cfrw=0.0e+00
+nfalw=80.0e+21
+nfblw=30.0e+06
+nfclw=0.0e+00
+saref=1.0e-06
+sbref=1.0e-06
+wlod=0.0e+00
+kuo=0.0e+00
+kvsat=0.0e+00
+tkuo=0.0e+00
+lkuo=0.0e+00
+wkuo=0.0e+00
+pkuo=0.0e+00
+llodkuo=0.0e+00
+wlodkuo=0.0e+00
+kvtho=0.0e+00
+lkvtho=0.0e+00
+wkvtho=0.0e+00
+pkvtho=0.0e+00
+llodvth=0.0e+00
+wlodvth=0.0e+00
+stetao=0.0e+00
+lodetao=1.0e+00
+trj=21.0e+00
+imax=1.0e+03
+cjorbot=1.0e-03
+cjorsti=1.0e-09
+cjorgat=1.0e-09
+vbirbot=1.0e+00
+vbirsti=1.0e+00
+vbirgat=1.0e+00
+pbot=500.0e-03
+psti=500.0e-03
+pgat=500.0e-03
+phigbot=1.16e+00
+phigsti=1.16e+00
+phiggat=1.16e+00
+idsatrbot=1.0e-12
+idsatrsti=1.0e-18
+idsatrgat=1.0e-18
+csrhbot=100.0e+00
+csrhsti=100.0e-06
+csrhgat=100.0e-06
+xjunsti=100.0e-09
+xjungat=100.0e-09
+ctatbot=100.0e+00
+ctatsti=100.0e-06
+ctatgat=100.0e-06
+mefftatbot=250.0e-03
+mefftatsti=250.0e-03
+mefftatgat=250.0e-03
+cbbtbot=1.0e-12
+cbbtsti=1.0e-18
+cbbtgat=1.0e-18
+fbbtrbot=1.0e+09
+fbbtrsti=1.0e+09
+fbbtrgat=1.0e+09
+stfbbtbot=-1.0e-03
+stfbbtsti=-1.0e-03
+stfbbtgat=-1.0e-03
+vbrbot=10.0e+00
+vbrsti=10.0e+00
+vbrgat=10.0e+00
+pbrbot=4.0e+00
+pbrsti=4.0e+00
+pbrgat=4.0e+00
+dta=0.0e+00
+TR=27.0
+swigate=0
+swimpact=1
+swgidl=0
+swjuncap=1
+DTA=0
+QMC=1.0
+LVARO=-10.0E-9
+LVARL=0
+LVARW=0
+LAP=10.0E-9
+WVARO=10.0E-9
+WVARL=0
+WVARW=0
+WOT=0
+DLQ=0
+DWQ=0
+VFBO=-1.1
+VFBL=0
+VFBW=0
+VFBLW=0
+STVFBO=5.0E-4
+STVFBL=0
+STVFBW=0
+STVFBLW=0
+TOXO=1.5E-9
+EPSROXO=3.9
+NSUBO=3.0E+23
+NSUBW=0
+WSEG=1.5E-10
+NPCK=1.0E+24
+NPCKW=0
+WSEGP=0.9E-8
+LPCK=5.5E-8
+LPCKW=0
+FOL1=2.0E-2
+FOL2=5.0E-6
+VNSUBO=0
+NSLPO=0.05
+DNSUBO=0
+DPHIBO=0
+DPHIBL=0
+DPHIBLEXP=1.0
+DPHIBW=0
+DPHIBLW=0
+NPO=1.5E+26
+NPL=10.0E-18
+CTO=5.0E-15
+CTL=4.0E-2
+CTLEXP=0.6
+CTW=0
+CTLW=0
+TOXOVO=1.5E-9
+TOXOVDO=2.0E-9
+LOV=10.0E-9
+LOVD=0
+NOVO=7.5E+25
+NOVDO=5.0e+25
+CFL=3.0E-4
+CFLEXP=2.0
+CFW=5.0E-3
+CFBO=0.3
+UO=3.5E-2
+FBET1=-0.3
+FBET1W=0.15
+LP1=1.5E-7
+LP1W=-2.5E-2
+FBET2=50.0
+LP2=8.5E-10
+BETW1=5.0E-2
+BETW2=-2.0E-2
+WBET=5.0E-10
+STBETO=1.75
+STBETL=-2.0E-2
+STBETW=-2.0E-3
+STBETLW=-3.0E-3
+MUEO=0.6
+MUEW=-1.2E-2
+STMUEO=0.5
+THEMUO=2.75
+STTHEMUO=-0.1
+CSO=1.0E-2
+CSL=0
+CSLEXP=1
+CSW=0
+CSLW=0
+STCSO=-5.0
+XCORO=0.15
+XCORL=2.0E-3
+XCORW=-3.0E-2
+XCORLW=-3.5E-3
+STXCORO=1.25
+FETAO=1
+RSW1=50
+RSW2=5.0E-2
+STRSO=-2.0
+RSBO=0
+RSGO=0
+THESATO=1.0E-6
+THESATL=0.6
+THESATLEXP=0.75
+THESATW=-1.0E-2
+THESATLW=0
+STTHESATO=1.5
+STTHESATL=-2.5E-2
+STTHESATW=-2.0E-2
+STTHESATLW=-5.0E-3
+THESATBO=0.15
+THESATGO=0.75
+AXO=20
+AXL=0.2
+ALPL=7.0E-3
+ALPLEXP=0.6
+ALPW=5.0E-2
+ALP1L1=2.5E-2
+ALP1LEXP=0.4
+ALP1L2=0.1
+ALP1W=8.5E-3
+ALP2L1=0.5
+ALP2LEXP=0
+ALP2L2=0.5
+ALP2W=-0.2
+VPO=0.25
+A1O=1.0
+A1L=0
+A1W=0
+A2O=10.0
+STA2O=-0.5
+A3O=1.0
+A3L=0
+A3W=0
+A4O=0
+A4L=0
+A4W=0
+GCOO=5.0
+IGINVLW=50.0
+IGOVW=10.0
+IGOVDW=0
+STIGO=1.5
+GC2O=1.0
+GC3O=-1.0
+CHIBO=3.1
+AGIDLW=50.0
+AGIDLDW=0
+BGIDLO=35.0
+BGIDLDO=41
+STBGIDLO=-5.0E-4
+STBGIDLDO=0
+CGIDLO=0.15
+CGIDLDO=0
+CGBOVL=0
+CFRW=5.0E-17
+CFRDW=0
+FNTO=1
+NFALW=8.0E+22
+NFBLW=3.0E7
+NFCLW=0
+RGO=0
+RINT=0
+RVPOLY=0
+RSHG=0
+DLSIL=0
+RBULKO=0
+RWELLO=0
+RJUNDO=0
+RJUNSO=0
+TRJ=27.0
+IMAX=1.0E3
+VJUNREF=2.5
+FJUNQ=0.03
+CJORBOT=1.0E-3
+CJORSTI=1.0E-9
+CJORGAT=0.5E-9
+VBIRBOT=0.75
+VBIRSTI=1.0
+VBIRGAT=0.75
+PBOT=0.35
+PSTI=0.35
+PGAT=0.6
+PHIGBOT=1.16
+PHIGSTI=1.16
+PHIGGAT=1.16
+IDSATRBOT=5.0E-9
+IDSATRSTI=1.0E-18
+IDSATRGAT=1.0E-18
+CSRHBOT=5.0E2
+CSRHSTI=0
+CSRHGAT=1.0E3
+XJUNSTI=1.0E-8
+XJUNGAT=1.0E-9
+CTATBOT=5.0E2
+CTATSTI=0
+CTATGAT=1.0E3
+MEFFTATBOT=0.25
+MEFFTATSTI=0.25
+MEFFTATGAT=0.25
+CBBTBOT=1.0E-12
+CBBTSTI=1.0E-18
+CBBTGAT=1.0E-18
+FBBTRBOT=1.0E9
+FBBTRSTI=1.0E9
+FBBTRGAT=1.0E9
+STFBBTBOT=-1.0E-3
+STFBBTSTI=-1.0E-3
+STFBBTGAT=-1.0E-2
+VBRBOT=10.0
+VBRSTI=10.0
+VBRGAT=10.0
+PBRBOT=3
+PBRSTI=4
+PBRGAT=3
+VJUNREFD=2.5
+FJUNQD=0.03
+CJORBOTD=1.0E-3
+CJORSTID=1.0E-9
+CJORGATD=1.0E-9
+VBIRBOTD=1.0
+VBIRSTID=1.0
+VBIRGATD=1.0
+PBOTD=0.5
+PSTID=0.5
+PGATD=0.5
+PHIGBOTD=1.16
+PHIGSTID=1.16
+PHIGGATD=1.16
+IDSATRBOTD=1.0E-12
+IDSATRSTID=1.0E-18
+IDSATRGATD=1.0E-18
+CSRHBOTD=1.0E+2
+CSRHSTID=1.0E-4
+CSRHGATD=1.0E-4
+XJUNSTID=1.0E-7
+XJUNGATD=1.0E-7
+CTATBOTD=1.0E+2
+CTATSTID=1.0E-4
+CTATGATD=1.0E-4
+MEFFTATBOTD=0.25
+MEFFTATSTID=0.25
+MEFFTATGATD=0.25
+CBBTBOTD=1.0E-12
+CBBTSTID=1.0E-18
+CBBTGATD=1.0E-18
+FBBTRBOTD=1.0E9
+FBBTRSTID=1.0E9
+FBBTRGATD=1.0E9
+STFBBTBOTD=-1.0E-3
+STFBBTSTID=-1.0E-3
+STFBBTGATD=-1.0E-3
+VBRBOTD=10.0
+VBRSTID=10.0
+VBRGATD=10.0
+PBRBOTD=4
+PBRSTID=4
+PBRGATD=4
.end

View File

@ -1,18 +1,25 @@
//======================================================================================
//======================================================================================
// Filename: SIMKIT_macrodefs.include
// Filename: Common102_macrodefs.include
//======================================================================================
//======================================================================================
//
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
// (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.1, April 2007 (Simkit 2.5)
// Version: 102.5.0 (PSP), 200.4.0 (JUNCAP), December 2013
//
//======================================================================================
//======================================================================================
//
// Further information can be found in the file readme.txt
// Further information can be found in the file releasenotesPSP102.txt
//
//////////////////////////////////////////////////////////////
@ -36,15 +43,16 @@
// Note 2: In this va-code, the "from" keyword in the parameter
// list is not used. Silent clipping is used instead. One could enable
// the Verilog-A range checking by redefining the `from-macro below.
`define P(txt)
`ifdef insideADMS
`define from(lower,upper) from[lower:upper]
`define P(txt) (*txt*)
`define INITIAL_MODEL @(initial_model)
`define INITIAL_INSTANCE @(initial_instance)
`define from(lower,upper) from [lower:upper]
`else
`define from(lower,upper)
`define P(txt)
`define INITIAL_MODEL
`define INITIAL_INSTANCE
`define from(lower,upper)
`endif
// Some functions
@ -61,7 +69,8 @@
`define QELE 1.6021918E-19
`define HBAR 1.05457168E-34
`define MELE 9.1093826E-31
`define EPSSI 1.045E-10
`define EPSO 8.8541878176E-12
`define EPSRSI 11.8
// Other constants
`define oneThird 3.3333333333333333e-01

View File

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

View File

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

View File

@ -4,58 +4,179 @@
//======================================================================================
//======================================================================================
//
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
// (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.1 (PSP), 200.2 (JUNCAP), April 2007 (Simkit 2.5)
// Version: 102.5.0 (PSP), 200.4.0 (JUNCAP), December 2013
//
//======================================================================================
//======================================================================================
//
// Further information can be found in the file readme.txt
// Further information can be found in the file releasenotesPSP102.txt
//
//////////////////////////////////////////////////////////////
//
// Calculation of internal paramters which are independent
// Calculation of internal parameters which are independent
// on instance parameters
//
//////////////////////////////////////////////////////////////
TRJ_i = `CLIP_LOW( TRJ , `TRJ_cliplow);
IMAX_i = `CLIP_LOW( IMAX , `IMAX_cliplow);
CJORBOT_i = `CLIP_LOW( CJORBOT , `CJORBOT_cliplow);
CJORSTI_i = `CLIP_LOW( CJORSTI , `CJORSTI_cliplow);
CJORGAT_i = `CLIP_LOW( CJORGAT , `CJORGAT_cliplow);
VBIRBOT_i = `CLIP_LOW( VBIRBOT , `VBIR_cliplow);
VBIRSTI_i = `CLIP_LOW( VBIRSTI , `VBIR_cliplow);
VBIRGAT_i = `CLIP_LOW( VBIRGAT , `VBIR_cliplow);
PBOT_i = `CLIP_BOTH(PBOT , `P_cliplow,`P_cliphigh);
PSTI_i = `CLIP_BOTH(PSTI , `P_cliplow,`P_cliphigh);
PGAT_i = `CLIP_BOTH(PGAT , `P_cliplow,`P_cliphigh);
IDSATRBOT_i = `CLIP_LOW( IDSATRBOT , `IDSATR_cliplow);
IDSATRSTI_i = `CLIP_LOW( IDSATRSTI , `IDSATR_cliplow);
IDSATRGAT_i = `CLIP_LOW( IDSATRGAT , `IDSATR_cliplow);
CSRHBOT_i = `CLIP_LOW( CSRHBOT , `CSRH_cliplow);
CSRHSTI_i = `CLIP_LOW( CSRHSTI , `CSRH_cliplow);
CSRHGAT_i = `CLIP_LOW( CSRHGAT , `CSRH_cliplow);
XJUNSTI_i = `CLIP_LOW( XJUNSTI , `XJUN_cliplow);
XJUNGAT_i = `CLIP_LOW( XJUNGAT , `XJUN_cliplow);
CTATBOT_i = `CLIP_LOW( CTATBOT , `CTAT_cliplow);
CTATSTI_i = `CLIP_LOW( CTATSTI , `CTAT_cliplow);
CTATGAT_i = `CLIP_LOW( CTATGAT , `CTAT_cliplow);
MEFFTATBOT_i = `CLIP_LOW( MEFFTATBOT, `MEFFTAT_cliplow);
MEFFTATSTI_i = `CLIP_LOW( MEFFTATSTI, `MEFFTAT_cliplow);
MEFFTATGAT_i = `CLIP_LOW( MEFFTATGAT, `MEFFTAT_cliplow);
CBBTBOT_i = `CLIP_LOW( CBBTBOT , `CBBT_cliplow);
CBBTSTI_i = `CLIP_LOW( CBBTSTI , `CBBT_cliplow);
CBBTGAT_i = `CLIP_LOW( CBBTGAT , `CBBT_cliplow);
VBRBOT_i = `CLIP_LOW( VBRBOT , `VBR_cliplow);
VBRSTI_i = `CLIP_LOW( VBRSTI , `VBR_cliplow);
VBRGAT_i = `CLIP_LOW( VBRGAT , `VBR_cliplow);
PBRBOT_i = `CLIP_LOW( PBRBOT , `PBR_cliplow);
PBRSTI_i = `CLIP_LOW( PBRSTI , `PBR_cliplow);
PBRGAT_i = `CLIP_LOW( PBRGAT , `PBR_cliplow);
TRJ_i = `CLIP_LOW( TRJ , `TRJ_cliplow);
IMAX_i = `CLIP_LOW( IMAX , `IMAX_cliplow);
CJORBOT_i = `CLIP_LOW( CJORBOT , `CJORBOT_cliplow);
CJORSTI_i = `CLIP_LOW( CJORSTI , `CJORSTI_cliplow);
CJORGAT_i = `CLIP_LOW( CJORGAT , `CJORGAT_cliplow);
VBIRBOT_i = `CLIP_LOW( VBIRBOT , `VBIR_cliplow);
VBIRSTI_i = `CLIP_LOW( VBIRSTI , `VBIR_cliplow);
VBIRGAT_i = `CLIP_LOW( VBIRGAT , `VBIR_cliplow);
PBOT_i = `CLIP_BOTH(PBOT , `P_cliplow,`P_cliphigh);
PSTI_i = `CLIP_BOTH(PSTI , `P_cliplow,`P_cliphigh);
PGAT_i = `CLIP_BOTH(PGAT , `P_cliplow,`P_cliphigh);
PHIGBOT_i = PHIGBOT;
PHIGSTI_i = PHIGSTI;
PHIGGAT_i = PHIGGAT;
IDSATRBOT_i = `CLIP_LOW( IDSATRBOT , `IDSATR_cliplow);
IDSATRSTI_i = `CLIP_LOW( IDSATRSTI , `IDSATR_cliplow);
IDSATRGAT_i = `CLIP_LOW( IDSATRGAT , `IDSATR_cliplow);
CSRHBOT_i = `CLIP_LOW( CSRHBOT , `CSRH_cliplow);
CSRHSTI_i = `CLIP_LOW( CSRHSTI , `CSRH_cliplow);
CSRHGAT_i = `CLIP_LOW( CSRHGAT , `CSRH_cliplow);
XJUNSTI_i = `CLIP_LOW( XJUNSTI , `XJUN_cliplow);
XJUNGAT_i = `CLIP_LOW( XJUNGAT , `XJUN_cliplow);
CTATBOT_i = `CLIP_LOW( CTATBOT , `CTAT_cliplow);
CTATSTI_i = `CLIP_LOW( CTATSTI , `CTAT_cliplow);
CTATGAT_i = `CLIP_LOW( CTATGAT , `CTAT_cliplow);
MEFFTATBOT_i = `CLIP_LOW( MEFFTATBOT , `MEFFTAT_cliplow);
MEFFTATSTI_i = `CLIP_LOW( MEFFTATSTI , `MEFFTAT_cliplow);
MEFFTATGAT_i = `CLIP_LOW( MEFFTATGAT , `MEFFTAT_cliplow);
CBBTBOT_i = `CLIP_LOW( CBBTBOT , `CBBT_cliplow);
CBBTSTI_i = `CLIP_LOW( CBBTSTI , `CBBT_cliplow);
CBBTGAT_i = `CLIP_LOW( CBBTGAT , `CBBT_cliplow);
FBBTRBOT_i = FBBTRBOT;
FBBTRSTI_i = FBBTRSTI;
FBBTRGAT_i = FBBTRGAT;
STFBBTBOT_i = STFBBTBOT;
STFBBTSTI_i = STFBBTSTI;
STFBBTGAT_i = STFBBTGAT;
VBRBOT_i = `CLIP_LOW( VBRBOT , `VBR_cliplow);
VBRSTI_i = `CLIP_LOW( VBRSTI , `VBR_cliplow);
VBRGAT_i = `CLIP_LOW( VBRGAT , `VBR_cliplow);
PBRBOT_i = `CLIP_LOW( PBRBOT , `PBR_cliplow);
PBRSTI_i = `CLIP_LOW( PBRSTI , `PBR_cliplow);
PBRGAT_i = `CLIP_LOW( PBRGAT , `PBR_cliplow);
SWJUNEXP_i = 0.0;
if (SWJUNEXP > 0.5) begin
SWJUNEXP_i = 1.0;
end else begin
SWJUNEXP_i = 0.0;
end
VJUNREF_i = `CLIP_LOW( VJUNREF , `VJUNREF_cliplow);
FJUNQ_i = `CLIP_LOW( FJUNQ , `FJUNQ_cliplow);
`ifdef JUNCAP_StandAlone
// do nothing
`else // JUNCAP_StandAlone
if (SWJUNASYM == 0.0) begin
CJORBOTD_i = CJORBOT_i;
CJORSTID_i = CJORSTI_i;
CJORGATD_i = CJORGAT_i;
VBIRBOTD_i = VBIRBOT_i;
VBIRSTID_i = VBIRSTI_i;
VBIRGATD_i = VBIRGAT_i;
PBOTD_i = PBOT_i;
PSTID_i = PSTI_i;
PGATD_i = PGAT_i;
PHIGBOTD_i = PHIGBOT_i;
PHIGSTID_i = PHIGSTI_i;
PHIGGATD_i = PHIGGAT_i;
IDSATRBOTD_i = IDSATRBOT_i;
IDSATRSTID_i = IDSATRSTI_i;
IDSATRGATD_i = IDSATRGAT_i;
CSRHBOTD_i = CSRHBOT_i;
CSRHSTID_i = CSRHSTI_i;
CSRHGATD_i = CSRHGAT_i;
XJUNSTID_i = XJUNSTI_i;
XJUNGATD_i = XJUNGAT_i;
CTATBOTD_i = CTATBOT_i;
CTATSTID_i = CTATSTI_i;
CTATGATD_i = CTATGAT_i;
MEFFTATBOTD_i = MEFFTATBOT_i;
MEFFTATSTID_i = MEFFTATSTI_i;
MEFFTATGATD_i = MEFFTATGAT_i;
CBBTBOTD_i = CBBTBOT_i;
CBBTSTID_i = CBBTSTI_i;
CBBTGATD_i = CBBTGAT_i;
FBBTRBOTD_i = FBBTRBOT_i;
FBBTRSTID_i = FBBTRSTI_i;
FBBTRGATD_i = FBBTRGAT_i;
STFBBTBOTD_i = STFBBTBOT_i;
STFBBTSTID_i = STFBBTSTI_i;
STFBBTGATD_i = STFBBTGAT_i;
VBRBOTD_i = VBRBOT_i;
VBRSTID_i = VBRSTI_i;
VBRGATD_i = VBRGAT_i;
PBRBOTD_i = PBRBOT_i;
PBRSTID_i = PBRSTI_i;
PBRGATD_i = PBRGAT_i;
VJUNREFD_i = VJUNREF_i;
FJUNQD_i = FJUNQ_i;
end else begin
CJORBOTD_i = `CLIP_LOW( CJORBOTD , `CJORBOT_cliplow);
CJORSTID_i = `CLIP_LOW( CJORSTID , `CJORSTI_cliplow);
CJORGATD_i = `CLIP_LOW( CJORGATD , `CJORGAT_cliplow);
VBIRBOTD_i = `CLIP_LOW( VBIRBOTD , `VBIR_cliplow);
VBIRSTID_i = `CLIP_LOW( VBIRSTID , `VBIR_cliplow);
VBIRGATD_i = `CLIP_LOW( VBIRGATD , `VBIR_cliplow);
PBOTD_i = `CLIP_BOTH(PBOTD , `P_cliplow,`P_cliphigh);
PSTID_i = `CLIP_BOTH(PSTID , `P_cliplow,`P_cliphigh);
PGATD_i = `CLIP_BOTH(PGATD , `P_cliplow,`P_cliphigh);
PHIGBOTD_i = PHIGBOTD;
PHIGSTID_i = PHIGSTID;
PHIGGATD_i = PHIGGATD;
IDSATRBOTD_i = `CLIP_LOW( IDSATRBOTD , `IDSATR_cliplow);
IDSATRSTID_i = `CLIP_LOW( IDSATRSTID , `IDSATR_cliplow);
IDSATRGATD_i = `CLIP_LOW( IDSATRGATD , `IDSATR_cliplow);
CSRHBOTD_i = `CLIP_LOW( CSRHBOTD , `CSRH_cliplow);
CSRHSTID_i = `CLIP_LOW( CSRHSTID , `CSRH_cliplow);
CSRHGATD_i = `CLIP_LOW( CSRHGATD , `CSRH_cliplow);
XJUNSTID_i = `CLIP_LOW( XJUNSTID , `XJUN_cliplow);
XJUNGATD_i = `CLIP_LOW( XJUNGATD , `XJUN_cliplow);
CTATBOTD_i = `CLIP_LOW( CTATBOTD , `CTAT_cliplow);
CTATSTID_i = `CLIP_LOW( CTATSTID , `CTAT_cliplow);
CTATGATD_i = `CLIP_LOW( CTATGATD , `CTAT_cliplow);
MEFFTATBOTD_i = `CLIP_LOW( MEFFTATBOTD, `MEFFTAT_cliplow);
MEFFTATSTID_i = `CLIP_LOW( MEFFTATSTID, `MEFFTAT_cliplow);
MEFFTATGATD_i = `CLIP_LOW( MEFFTATGATD, `MEFFTAT_cliplow);
CBBTBOTD_i = `CLIP_LOW( CBBTBOTD , `CBBT_cliplow);
CBBTSTID_i = `CLIP_LOW( CBBTSTID , `CBBT_cliplow);
CBBTGATD_i = `CLIP_LOW( CBBTGATD , `CBBT_cliplow);
FBBTRBOTD_i = FBBTRBOTD;
FBBTRSTID_i = FBBTRSTID;
FBBTRGATD_i = FBBTRGATD;
STFBBTBOTD_i = STFBBTBOTD;
STFBBTSTID_i = STFBBTSTID;
STFBBTGATD_i = STFBBTGATD;
VBRBOTD_i = `CLIP_LOW( VBRBOTD , `VBR_cliplow);
VBRSTID_i = `CLIP_LOW( VBRSTID , `VBR_cliplow);
VBRGATD_i = `CLIP_LOW( VBRGATD , `VBR_cliplow);
PBRBOTD_i = `CLIP_LOW( PBRBOTD , `PBR_cliplow);
PBRSTID_i = `CLIP_LOW( PBRSTID , `PBR_cliplow);
PBRGATD_i = `CLIP_LOW( PBRGATD , `PBR_cliplow);
VJUNREFD_i = `CLIP_LOW( VJUNREFD , `VJUNREF_cliplow);
FJUNQD_i = `CLIP_LOW( FJUNQD , `FJUNQ_cliplow);
end
`endif // JUNCAP_StandAlone
tkr = `KELVINCONVERSION + TRJ_i;
tkd = max($temperature + DTA, `KELVINCONVERSION + `MINTEMP);
@ -67,26 +188,26 @@ phitd = KBOL_over_QELE * tkd;
phitdinv = 1.0 / phitd;
// bandgap voltages at reference temperature
deltaphigr = -(7.02e-4 * tkr * tkr) / (1108.0 + tkr);
phigrbot = PHIGBOT + deltaphigr;
phigrsti = PHIGSTI + deltaphigr;
phigrgat = PHIGGAT + deltaphigr;
deltaphigr = -(7.02e-4 * tkr * tkr) / (1108.0 + tkr);
phigrbot = PHIGBOT_i + deltaphigr;
phigrsti = PHIGSTI_i + deltaphigr;
phigrgat = PHIGGAT_i + deltaphigr;
// bandgap voltages at device temperature
deltaphigd = -(7.02e-4 * tkd * tkd) / (1108.0 + tkd);
phigdbot = PHIGBOT + deltaphigd;
phigdsti = PHIGSTI + deltaphigd;
phigdgat = PHIGGAT + deltaphigd;
deltaphigd = -(7.02e-4 * tkd * tkd) / (1108.0 + tkd);
phigdbot = PHIGBOT_i + deltaphigd;
phigdsti = PHIGSTI_i + deltaphigd;
phigdgat = PHIGGAT_i + deltaphigd;
// factors ftd for ideal-current model
ftdbot = (pow(auxt, 1.5)) * exp(0.5 * ((phigrbot * phitrinv) - (phigdbot * phitdinv)));
ftdsti = (pow(auxt, 1.5)) * exp(0.5 * ((phigrsti * phitrinv) - (phigdsti * phitdinv)));
ftdgat = (pow(auxt, 1.5)) * exp(0.5 * ((phigrgat * phitrinv) - (phigdgat * phitdinv)));
ftdbot = (pow(auxt, 1.5)) * exp(0.5 * ((phigrbot * phitrinv) - (phigdbot * phitdinv)));
ftdsti = (pow(auxt, 1.5)) * exp(0.5 * ((phigrsti * phitrinv) - (phigdsti * phitdinv)));
ftdgat = (pow(auxt, 1.5)) * exp(0.5 * ((phigrgat * phitrinv) - (phigdgat * phitdinv)));
// temperature-scaled saturation current for ideal-current model
idsatbot = IDSATRBOT_i * ftdbot * ftdbot;
idsatsti = IDSATRSTI_i * ftdsti * ftdsti;
idsatgat = IDSATRGAT_i * ftdgat * ftdgat;
idsatbot = IDSATRBOT_i * ftdbot * ftdbot;
idsatsti = IDSATRSTI_i * ftdsti * ftdsti;
idsatgat = IDSATRGAT_i * ftdgat * ftdgat;
// built-in voltages before limiting
ubibot = VBIRBOT_i * auxt - 2 * phitd * ln(ftdbot);
@ -129,9 +250,9 @@ qpref2sti = `a * cjosti;
qpref2gat = `a * cjogat;
// zero-bias depletion widths at reference temperature, needed in SRH and TAT model
wdepnulrbot = `EPSSI / CJORBOT_i;
wdepnulrsti = XJUNSTI_i * `EPSSI / CJORSTI_i;
wdepnulrgat = XJUNGAT_i * `EPSSI / CJORGAT_i;
wdepnulrbot = EPSSI / CJORBOT_i;
wdepnulrsti = XJUNSTI_i * EPSSI / CJORSTI_i;
wdepnulrgat = XJUNGAT_i * EPSSI / CJORGAT_i;
// inverse values of "wdepnulr", used in BBT model
wdepnulrinvbot = 1 / wdepnulrbot;
@ -145,7 +266,7 @@ VBIRGATinv = 1 / VBIRGAT_i;
// some constants needed in erfc-approximation, needed in TAT model
perfc = (`SQRTPI * `aerfc);
berfc = ((-5 * (`aerfc) + 6 - pow((perfc), -2)) / 3);
berfc = ((-5 * (`aerfc) + 6 - pow((perfc), -2)) / 3.0);
cerfc = (1.0 - (`aerfc) - (berfc));
// half the bandgap energy, limited to values > phitd, needed in TAT model
@ -164,9 +285,12 @@ btatpartsti = sqrt(32 * MEFFTATSTI_i * `MELE * `QELE * (deltaEsti * deltaEsti
btatpartgat = sqrt(32 * MEFFTATGAT_i * `MELE * `QELE * (deltaEgat * deltaEgat * deltaEgat)) / (3 * `HBAR);
// temperature-scaled values of FBBT, needed in BBT model
fbbtbot = FBBTRBOT * (1 + STFBBTBOT * (tkd - tkr));
fbbtsti = FBBTRSTI * (1 + STFBBTSTI * (tkd - tkr));
fbbtgat = FBBTRGAT * (1 + STFBBTGAT * (tkd - tkr));
fbbtbot = FBBTRBOT_i * (1 + STFBBTBOT_i * (tkd - tkr));
fbbtsti = FBBTRSTI_i * (1 + STFBBTSTI_i * (tkd - tkr));
fbbtgat = FBBTRGAT_i * (1 + STFBBTGAT_i * (tkd - tkr));
fbbtbot = `CLIP_LOW(fbbtbot, 0);
fbbtsti = `CLIP_LOW(fbbtsti, 0);
fbbtgat = `CLIP_LOW(fbbtgat, 0);
// values of fstop, needed in avalanche/breakdown model
fstopbot = 1 / (1 - pow(`alphaav, PBRBOT_i));
@ -178,7 +302,103 @@ VBRinvbot = 1 / VBRBOT_i;
VBRinvsti = 1 / VBRSTI_i;
VBRinvgat = 1 / VBRGAT_i;
// slopes for linear extraploation close to and beyond breakdown, needed in avalanche/breakdown model
// slopes for linear extrapolation close to and beyond breakdown, needed in avalanche/breakdown model
slopebot = -(fstopbot * fstopbot * pow(`alphaav, (PBRBOT_i - 1))) * PBRBOT_i * VBRinvbot;
slopesti = -(fstopsti * fstopsti * pow(`alphaav, (PBRSTI_i - 1))) * PBRSTI_i * VBRinvsti;
slopegat = -(fstopgat * fstopgat * pow(`alphaav, (PBRGAT_i - 1))) * PBRGAT_i * VBRinvgat;
`ifdef JUNCAP_StandAlone
// do nothing
`else // JUNCAP_StandAlone
phigrbot_d = PHIGBOTD_i + deltaphigr;
phigrsti_d = PHIGSTID_i + deltaphigr;
phigrgat_d = PHIGGATD_i + deltaphigr;
phigdbot_d = PHIGBOTD_i + deltaphigd;
phigdsti_d = PHIGSTID_i + deltaphigd;
phigdgat_d = PHIGGATD_i + deltaphigd;
ftdbot_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrbot_d * phitrinv) - (phigdbot_d * phitdinv)));
ftdsti_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrsti_d * phitrinv) - (phigdsti_d * phitdinv)));
ftdgat_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrgat_d * phitrinv) - (phigdgat_d * phitdinv)));
idsatbot_d = IDSATRBOTD_i * ftdbot_d * ftdbot_d;
idsatsti_d = IDSATRSTID_i * ftdsti_d * ftdsti_d;
idsatgat_d = IDSATRGATD_i * ftdgat_d * ftdgat_d;
ubibot_d = VBIRBOTD_i * auxt - 2 * phitd * ln(ftdbot_d);
ubisti_d = VBIRSTID_i * auxt - 2 * phitd * ln(ftdsti_d);
ubigat_d = VBIRGATD_i * auxt - 2 * phitd * ln(ftdgat_d);
vbibot_d = ubibot_d + phitd * ln(1 + exp((`vbilow - ubibot_d) * phitdinv));
vbisti_d = ubisti_d + phitd * ln(1 + exp((`vbilow - ubisti_d) * phitdinv));
vbigat_d = ubigat_d + phitd * ln(1 + exp((`vbilow - ubigat_d) * phitdinv));
vbiinvbot_d = 1.0 / vbibot_d;
vbiinvsti_d = 1.0 / vbisti_d;
vbiinvgat_d = 1.0 / vbigat_d;
one_minus_PBOT_d = 1 - PBOTD_i;
one_minus_PSTI_d = 1 - PSTID_i;
one_minus_PGAT_d = 1 - PGATD_i;
one_over_one_minus_PBOT_d = 1 / one_minus_PBOT_d;
one_over_one_minus_PSTI_d = 1 / one_minus_PSTI_d;
one_over_one_minus_PGAT_d = 1 / one_minus_PGAT_d;
cjobot_d = CJORBOTD_i * pow((VBIRBOTD_i * vbiinvbot_d), PBOTD_i);
cjosti_d = CJORSTID_i * pow((VBIRSTID_i * vbiinvsti_d), PSTID_i);
cjogat_d = CJORGATD_i * pow((VBIRGATD_i * vbiinvgat_d), PGATD_i);
qprefbot_d = cjobot_d * vbibot_d * one_over_one_minus_PBOT_d;
qprefsti_d = cjosti_d * vbisti_d * one_over_one_minus_PSTI_d;
qprefgat_d = cjogat_d * vbigat_d * one_over_one_minus_PGAT_d;
qpref2bot_d = `a * cjobot_d;
qpref2sti_d = `a * cjosti_d;
qpref2gat_d = `a * cjogat_d;
wdepnulrbot_d= EPSSI / CJORBOTD_i;
wdepnulrsti_d= XJUNSTID_i * EPSSI / CJORSTID_i;
wdepnulrgat_d= XJUNGATD_i * EPSSI / CJORGATD_i;
wdepnulrinvbot_d = 1 / wdepnulrbot_d;
wdepnulrinvsti_d = 1 / wdepnulrsti_d;
wdepnulrinvgat_d = 1 / wdepnulrgat_d;
VBIRBOTinv_d = 1 / VBIRBOTD_i;
VBIRSTIinv_d = 1 / VBIRSTID_i;
VBIRGATinv_d = 1 / VBIRGATD_i;
deltaEbot_d = max(0.5 * phigdbot_d, phitd);
deltaEsti_d = max(0.5 * phigdsti_d, phitd);
deltaEgat_d = max(0.5 * phigdgat_d, phitd);
atatbot_d = deltaEbot_d * phitdinv;
atatsti_d = deltaEsti_d * phitdinv;
atatgat_d = deltaEgat_d * phitdinv;
btatpartbot_d= sqrt(32 * MEFFTATBOTD_i * `MELE * `QELE * (deltaEbot_d * deltaEbot_d * deltaEbot_d)) / (3 * `HBAR);
btatpartsti_d= sqrt(32 * MEFFTATSTID_i * `MELE * `QELE * (deltaEsti_d * deltaEsti_d * deltaEsti_d)) / (3 * `HBAR);
btatpartgat_d= sqrt(32 * MEFFTATGATD_i * `MELE * `QELE * (deltaEgat_d * deltaEgat_d * deltaEgat_d)) / (3 * `HBAR);
fbbtbot_d = FBBTRBOTD_i * (1 + STFBBTBOTD_i * (tkd - tkr));
fbbtsti_d = FBBTRSTID_i * (1 + STFBBTSTID_i * (tkd - tkr));
fbbtgat_d = FBBTRGATD_i * (1 + STFBBTGATD_i * (tkd - tkr));
fbbtbot_d = `CLIP_LOW(fbbtbot_d, 0);
fbbtsti_d = `CLIP_LOW(fbbtsti_d, 0);
fbbtgat_d = `CLIP_LOW(fbbtgat_d, 0);
fstopbot_d = 1 / (1 - pow(`alphaav, PBRBOTD_i));
fstopsti_d = 1 / (1 - pow(`alphaav, PBRSTID_i));
fstopgat_d = 1 / (1 - pow(`alphaav, PBRGATD_i));
VBRinvbot_d = 1 / VBRBOTD_i;
VBRinvsti_d = 1 / VBRSTID_i;
VBRinvgat_d = 1 / VBRGATD_i;
slopebot_d = -(fstopbot_d * fstopbot_d * pow(`alphaav, (PBRBOTD_i - 1))) * PBRBOTD_i * VBRinvbot_d;
slopesti_d = -(fstopsti_d * fstopsti_d * pow(`alphaav, (PBRSTID_i - 1))) * PBRSTID_i * VBRinvsti_d;
slopegat_d = -(fstopgat_d * fstopgat_d * pow(`alphaav, (PBRGATD_i - 1))) * PBRGATD_i * VBRinvgat_d;
`endif // JUNCAP_StandAlone

View File

@ -4,15 +4,22 @@
//======================================================================================
//======================================================================================
//
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
// (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.1 (PSP), 200.2 (JUNCAP), April 2007 (Simkit 2.5)
// Version: 102.5.0 (PSP), 200.4.0 (JUNCAP), December 2013
//
//======================================================================================
//======================================================================================
//
// Further information can be found in the file readme.txt
// Further information can be found in the file releasenotesPSP102.txt
//
///////////////////////////////////////////
@ -34,7 +41,6 @@
`define aerfc 0.29214664
`define twothirds 0.666666666666667
// Clipping values
`define levelnumber 200
`define AB_cliplow 0
@ -57,6 +63,8 @@
`define CBBT_cliplow 0
`define VBR_cliplow 0.1
`define PBR_cliplow 0.1
`define VJUNREF_cliplow 0.5
`define FJUNQ_cliplow 0.0
/////////////////////////////////////////////////////////////////////////////
@ -70,9 +78,30 @@
//
/////////////////////////////////////////////////////////////////////////////
// Variable declarations of variables that need to be *local* in juncap-express initialization
`define LocalGlobalVars \
/* declaration of variables needed in macro "calcerfcexpmtat" */ \
real ysq, terfc, erfcpos; \
\
/* declaration of variables needed in hypfunction 5 */ \
real h1, h2, h2d, h3, h4, h5; \
\
/* declaration of variables calculated outside macro "juncapfunction", voltage-dependent part */ \
real idmult, vj, z, zinv, two_psistar, vjlim, vjsrh, vbbt, vav; \
\
/* declaration of variables used within macro "juncapfunction" */ \
real tmp, id; \
real isrh, vbi_minus_vjsrh, wsrhstep, dwsrh, wsrh, wdep, asrh; \
real itat, btat, twoatatoverthreebtat, umaxbeforelimiting, umax, sqrtumax, umaxpoweronepointfive; \
real wgamma, wtat, ktat, ltat, mtat, xerfc, erfctimesexpmtat, gammamax; \
real ibbt, Fmaxr; \
real fbreakdown;
// Instance parameter dependent initialization
`define JuncapInitInstance(AB_i, LS_i, LG_i, VMAX, vbimin, vch, vfmin, vbbtlim) \
`define JuncapInitInstance(AB_i, LS_i, LG_i, idsatbot, idsatsti, idsatgat, vbibot, vbisti, vbigat, PBOT_i, PSTI_i, PGAT_i, VBIRBOT_i, VBIRSTI_i, VBIRGAT_i, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \
if (idsatbot * AB_i > 0) begin \
vmaxbot = phitd * ln(IMAX_i / (idsatbot * AB_i) + 1); \
end else begin \
@ -89,28 +118,39 @@
vmaxgat = `vmaxlarge; \
end \
VMAX = min(min(vmaxbot, vmaxsti), vmaxgat); \
`expl(VMAX * phitdinv, exp_VMAX_over_phitd) \
\
/* determination of minimum value of the relevant built-in voltages */ \
/* and determination of limiting value of conditioned voltage for BBT calculation */ \
vbibot2 = vbibot; \
vbisti2 = vbisti; \
vbigat2 = vbigat; \
if (AB_i == 0) begin vbibot2 = vbisti + vbigat; end \
if (LS_i == 0) begin vbisti2 = vbibot + vbigat; end \
if (LG_i == 0) begin vbigat2 = vbibot + vbisti; end \
vbimin = min(min(vbibot2, vbisti2), vbigat2); \
vch = vbimin * `epsch; \
if (vbimin == vbibot) begin vfmin = vbibot * (1 - (pow(`a, (-1.0 / PBOT_i)))); end \
if (vbimin == vbisti) begin vfmin = vbisti * (1 - (pow(`a, (-1.0 / PSTI_i)))); end \
if (vbimin == vbigat) begin vfmin = vbigat * (1 - (pow(`a, (-1.0 / PGAT_i)))); end \
\
/* determination of limiting value of conditioned voltage for BBT calculation */ \
pbot2 = PBOT_i; \
psti2 = PSTI_i; \
pgat2 = PGAT_i; \
vbibot2r = VBIRBOT_i; \
vbisti2r = VBIRSTI_i; \
vbigat2r = VBIRGAT_i; \
if (AB_i == 0) begin vbibot2r = VBIRSTI_i + VBIRGAT_i; end \
if (LS_i == 0) begin vbisti2r = VBIRBOT_i + VBIRGAT_i; end \
if (LG_i == 0) begin vbigat2r = VBIRBOT_i + VBIRSTI_i; end \
vbbtlim = min(min(vbibot2r, vbisti2r), vbigat2r) - `dvbi; \
if (AB_i == 0) begin \
vbibot2 = vbisti + vbigat; \
pbot2 = 0.9 * min(PSTI_i, PGAT_i); \
vbibot2r = VBIRSTI_i + VBIRGAT_i; \
end \
if (LS_i == 0) begin \
vbisti2 = vbibot + vbigat; \
psti2 = 0.9 * min(PBOT_i, PGAT_i); \
vbisti2r = VBIRBOT_i + VBIRGAT_i; \
end \
if (LG_i == 0) begin \
vbigat2 = vbibot + vbisti; \
pgat2 = 0.9 * min(PBOT_i, PSTI_i); \
vbigat2r = VBIRBOT_i + VBIRSTI_i; \
end \
vbimin = min(min(vbibot2, vbisti2), vbigat2); \
vch = vbimin * `epsch; \
pmax = max(max(pbot2, psti2), pgat2); \
vfmin = vbimin * (1 - (pow(`a, (-1.0 / (pmax))))); \
vbbtlim = min(min(vbibot2r, vbisti2r), vbigat2r) - `dvbi;
// Special power-functions
@ -175,7 +215,7 @@
// This is the main function of the JUNCAP2-model. It returns the current and charge
// for a single diode
`define juncapfunction(qpref,qpref2,vbiinv,one_minus_P,idsat,CSRH,CTAT,vbi,wdepnulr,VBIRinv,P,ftd,btatpart,atat,one_over_one_minus_P,CBBT,VBIR,wdepnulrinv,fbbt,VBR,VBRinv,PBR,fstop,slope,Ijprime,Qjprime) \
`define juncapfunction(VAK,qpref,qpref2,vbiinv,one_minus_P,idsat,CSRH,CTAT,vbi,wdepnulr,VBIRinv,P,ftd,btatpart,atat,one_over_one_minus_P,CBBT,VBIR,wdepnulrinv,fbbt,VBR,VBRinv,PBR,fstop,slope,Ijprime,Qjprime) \
`mypower((1 - vj * vbiinv), one_minus_P, tmp) \
Qjprime = qpref * (1 - tmp) + qpref2 * (VAK - vj); \
id = idsat * idmult; \
@ -240,46 +280,197 @@
// ABSOURCE, LSSOURCE, LGSOURCE for source junction in PSP and ABDRAIN, LSDRAIN, LGDRAIN for
// drain junction in PSP
`define juncapcommon(AB_i,LS_i,LG_i,ijunbot,qjunbot,ijunsti,qjunsti,ijungat,qjungat) \
`define juncapcommon(V, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
vbbt = 0.0; \
two_psistar = 0.0; \
if ( !( ((AB_i) == 0) && ((LS_i) == 0) && ((LG_i) == 0) ) ) begin \
`hypfunction5(VAK, vfmin, vch, vj) \
if (VAK < VMAX) begin \
`expl(0.5 * (VAK * phitdinv), zinv) \
`hypfunction5(V, vfmin, vch, vj) \
if (V < VMAX) begin \
`expl(0.5 * (V * phitdinv), zinv) \
idmult = zinv * zinv; \
end else begin \
`expl(VMAX * phitdinv, exp_VMAX_over_phitd) \
idmult = (1 + (VAK - VMAX) * phitdinv) * exp_VMAX_over_phitd; \
idmult = (1 + (V - VMAX) * phitdinv) * exp_VMAX_over_phitd; \
zinv = sqrt(idmult); \
end \
idmult = idmult - 1.0; \
z = 1 / zinv; \
if (VAK > 0) begin \
if (V > 0) begin \
two_psistar = 2.0 * (phitd * ln(2.0 + z + sqrt((z + 1.0) * (z + 3.0)))); \
end else begin \
two_psistar = -VAK + 2.0 * (phitd * ln(2 * zinv + 1 + sqrt((1 + zinv) * (1 + 3 * zinv)))); \
two_psistar = -V + 2.0 * (phitd * ln(2 * zinv + 1 + sqrt((1 + zinv) * (1 + 3 * zinv)))); \
end \
vjlim = vbimin - two_psistar; \
`hypfunction2(VAK, vjlim, phitd, vjsrh) \
`hypfunction2(VAK, vbbtlim, phitr, vbbt) \
`hypfunction2(VAK, 0, `epsav, vav) \
`hypfunction2(V, vjlim, phitd, vjsrh) \
`hypfunction2(V, vbbtlim, phitr, vbbt) \
`hypfunction2(V, 0, `epsav, vav) \
end \
if ((AB_i) == 0) begin \
ijunbot = 0; \
qjunbot = 0; \
end else begin \
`juncapfunction(qprefbot,qpref2bot,vbiinvbot,one_minus_PBOT,idsatbot,CSRHBOT_i,CTATBOT_i,vbibot,wdepnulrbot,VBIRBOTinv,PBOT_i,ftdbot,btatpartbot,atatbot,one_over_one_minus_PBOT,CBBTBOT_i,VBIRBOT_i,wdepnulrinvbot,fbbtbot,VBRBOT_i,VBRinvbot,PBRBOT_i,fstopbot,slopebot,ijunbot, qjunbot) \
`juncapfunction(V, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, ijunbot, qjunbot) \
end \
if ((LS_i) == 0) begin \
ijunsti = 0; \
qjunsti = 0; \
end else begin \
`juncapfunction(qprefsti,qpref2sti,vbiinvsti,one_minus_PSTI,idsatsti,CSRHSTI_i,CTATSTI_i,vbisti,wdepnulrsti,VBIRSTIinv,PSTI_i,ftdsti,btatpartsti,atatsti,one_over_one_minus_PSTI,CBBTSTI_i,VBIRSTI_i,wdepnulrinvsti,fbbtsti,VBRSTI_i,VBRinvsti,PBRSTI_i,fstopsti,slopesti,ijunsti, qjunsti) \
`juncapfunction(V, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, ijunsti, qjunsti) \
end \
if ((LG_i) == 0) begin \
ijungat = 0; \
qjungat = 0; \
end else begin \
`juncapfunction(qprefgat,qpref2gat,vbiinvgat,one_minus_PGAT,idsatgat,CSRHGAT_i,CTATGAT_i,vbigat,wdepnulrgat,VBIRGATinv,PGAT_i,ftdgat,btatpartgat,atatgat,one_over_one_minus_PGAT,CBBTGAT_i,VBIRGAT_i,wdepnulrinvgat,fbbtgat,VBRGAT_i,VBRinvgat,PBRGAT_i,fstopgat,slopegat,ijungat, qjungat) \
`juncapfunction(V, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, ijungat, qjungat) \
end
//============================================================================================================
// JUNCAP-express
//
// The macros below are used in the express-version of JUNCAP2
//============================================================================================================
`define relerr 0.001
`define P1(x) ((x) + 1)
`define expll(x, xlow, expxlow, xhigh, expxhigh) \
((x) < (xlow)) ? (expxlow) / `P1((xlow) - (x)) : (((x) > (xhigh)) ? (expxhigh) * `P1((x) - (xhigh)) : exp(x))
// The "JuncapExpressInit"-macro below is split into three parts, as some verilog-A compilers cannot handle
// macros beyond a certain size. Moreover, it is useful to limit the list of input and output variables.
// Part 1
`define JuncapExpressInit1(AB_i, LS_i, LG_i, VJUNREF_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \
FRACNA = 0.4; \
FRACNB = 0.65; \
FRACI = 0.8; \
/* Sample voltages */ \
V1 = -FRACNA * VJUNREF_i; \
V2 = -FRACNB * VJUNREF_i; \
V3 = -FRACI * VJUNREF_i; \
V4 = 0.1; \
V5 = 0.2; \
/* evaluate full JUNCAP-model at five voltages */ \
`juncapcommon(V1, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
I1 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \
`juncapcommon(V2, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
I2 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \
`juncapcommon(V3, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
I3 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat;
// Part 2
`define JuncapExpressInit2(AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \
/* forward currents */ \
`juncapcommon(V4, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
I4 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \
`juncapcommon(V5, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \
I5 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat;
// Part 3
`define JuncapExpressInit3(AB_i, LS_i, LG_i, idsatbot, idsatsti, idsatgat, ISATFOR1, MFOR1, ISATFOR2, MFOR2, ISATREV, MREV, m0flag) \
/* compute internal parameters from these five (I,V)-values */ \
ISATFOR1 = AB_i * idsatbot + LS_i * idsatsti + LG_i * idsatgat; \
I4_cor = I4 - ISATFOR1 * (exp(V4 * phitdinv * MFOR1) - 1.0); \
I5_cor = I5 - ISATFOR1 * (exp(V5 * phitdinv * MFOR1) - 1.0); \
if ( !( ((AB_i) == 0) && ((LS_i) == 0) && ((LG_i) == 0) ) ) begin \
if ((I4 > 0) && (I5 > 0)) begin \
if ((((I4_cor / I4) > `relerr) || ((I5_cor / I5) > `relerr)) && (I4_cor > 0) && (I5_cor > 0)) begin \
alphaje = I4_cor / I5_cor; \
MFOR2 = phitd * ln(alphaje) / (V4 - V5); \
ISATFOR2 = I4_cor / (exp(V4 * phitdinv * MFOR2) - 1); \
end \
end \
I1_cor = I1 - ISATFOR1 * (exp(V1 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V1 * phitdinv * MFOR2) - 1.0); \
I2_cor = I2 - ISATFOR1 * (exp(V2 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V2 * phitdinv * MFOR2) - 1.0); \
I3_cor = I3 - ISATFOR1 * (exp(V3 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V3 * phitdinv * MFOR2) - 1.0); \
if ((I1 < 0) && (I2 < 0) && (I3 < 0)) begin \
if ((((I1_cor / I1) > `relerr) || ((I2_cor / I2) > `relerr) || ((I3_cor / I3) > `relerr)) \
&& (I1_cor < 0) && (I2_cor < 0) && (I3_cor < 0)) begin \
alphaje = I1_cor / I2_cor; \
m0_rev = -phitd * ln(alphaje) / (V1 - V2); /* zeroth order approximation */ \
tt0 = V2 / (V2 - V1); \
tt1 = phitd * (alphaje - 1) * (pow(alphaje, tt0) - 1); \
tt0 = V1 / (V1 - V2); \
tt2 = pow(alphaje, tt0) * (V2 - V1) + alphaje * V1 - V2; \
mcor_rev = tt1 / tt2; /* first order Newton correction */ \
MREV = m0_rev + mcor_rev; \
if (abs(V3 * phitdinv * MREV) < 1e-6) begin \
/* Taylor approximation needed */ \
/* Note: ISATREV and MREV have different meaning in this situation!! */ \
m0flag = 1.0; \
ISATREV = I3_cor * (1 / V3 + 0.5 * phitdinv * MREV); \
MREV = -0.5 * I3_cor * MREV * phitdinv / V3; \
end else begin \
m0flag = 0.0; \
ISATREV = -I3_cor / (exp(-V3 * phitdinv * MREV) - 1); \
end \
end \
end \
end
// Part 4
`define JuncapExpressInit4(AB_i, LS_i, LG_i, FJUNQ_i, cjobot, cjosti, cjogat, zflagbot, zflagsti, zflaggat) \
/* charge model initialization */ \
zfrac = FJUNQ_i * (AB_i * cjobot + LS_i * cjosti + LG_i * cjogat); \
if ((AB_i * cjobot) <= zfrac) begin \
zflagbot = 0.0; \
end \
if ((LS_i * cjosti) <= zfrac) begin \
zflagsti = 0.0; \
end \
if ((LG_i * cjogat) <= zfrac) begin \
zflaggat = 0.0; \
end
// Part 5
`define JuncapExpressInit5(AB_i, LS_i, LG_i, ISATFOR1, ISATFOR2, ISATREV, xhighf1, expxhf1, xhighf2, expxhf2, xhighr, expxhr) \
/* calculate limits beyond which exponentials are linearly extrapolated */ \
if ( !( ((AB_i) == 0) && ((LS_i) == 0) && ((LG_i) == 0) ) ) begin \
xhighf1 = ln(0.5 * IMAX_i / (ISATFOR1 + 1e-21)); \
xhighf2 = ln(0.5 * IMAX_i / (ISATFOR2 + 1e-21)); \
xhighr = ln(0.5 * IMAX_i / (abs(ISATREV) + 1e-21)); \
end \
xhighf1 = min(xhighf1, `se05); \
expxhf1 = exp(xhighf1); \
xhighf2 = min(xhighf2, `se05); \
expxhf2 = exp(xhighf2); \
xhighr = min(xhighr, `se05); \
expxhr = exp(xhighr);
`define JuncapExpressCurrent(V, MFOR1, ISATFOR1, MFOR2, ISATFOR2, MREV, ISATREV, m0flag, xhighf1, expxhf1, xhighf2, expxhf2, xhighr, expxhr, ijun) \
tm0 = V * phitdinv * MFOR1; \
tm1 = `expll(tm0, -`se05, `ke05, xhighf1, expxhf1); \
ijunfor1 = ISATFOR1 * (tm1 - 1.0); \
tm0 = V * phitdinv * MFOR2; \
tm1 = `expll(tm0, -`se05, `ke05, xhighf2, expxhf2); \
ijunfor2 = ISATFOR2 * (tm1 - 1.0); \
ijunrev = 0.0; \
if (m0flag > 0) begin \
ijunrev = V * (ISATREV + V * MREV); \
end else begin \
tm0 = -V * phitdinv * MREV; \
tm1 = `expll(tm0, -`se05, `ke05, xhighr, expxhr); \
ijunrev = -ISATREV * (tm1 - 1.0); \
end \
ijun = ijunfor1 + ijunfor2 + ijunrev;
`define JuncapExpressCharge(V, AB_i, LS_i, LG_i, qprefbot, qprefsti, qprefgat, qpref2bot, qpref2sti, qpref2gat, vbiinvbot, vbiinvsti, vbiinvgat, one_minus_PBOT, one_minus_PSTI, one_minus_PGAT, vfmin, vch, zflagbot, zflagsti, zflaggat, qjunbot, qjunsti, qjungat) \
tmpv = 0.0; \
vjv = 0.0; \
`hypfunction5(V, vfmin, vch, vjv) \
if (zflagbot > 0.5) begin \
`mypower((1 - vjv * vbiinvbot), one_minus_PBOT, tmpv) \
qjunbot = qprefbot * (1 - tmpv) + qpref2bot * (V - vjv); \
end \
if (zflagsti > 0.5) begin \
`mypower((1 - vjv * vbiinvsti), one_minus_PSTI, tmpv) \
qjunsti = qprefsti * (1 - tmpv) + qpref2sti * (V - vjv); \
end \
if (zflaggat > 0.5) begin \
`mypower((1 - vjv * vbiinvgat), one_minus_PGAT, tmpv) \
qjungat = qprefgat * (1 - tmpv) + qpref2gat * (V - vjv); \
end

View File

@ -4,15 +4,22 @@
//======================================================================================
//======================================================================================
//
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
// (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.1 (PSP), 200.2 (JUNCAP), April 2007 (Simkit 2.5)
// Version: 102.5.0 (PSP), 200.4.0 (JUNCAP), December 2013
//
//======================================================================================
//======================================================================================
//
// Further information can be found in the file readme.txt
// Further information can be found in the file releasenotesPSP102.txt
//
//////////////////////////////////////////
@ -21,45 +28,151 @@
//
//////////////////////////////////////////
parameter real IMAX = 1000 `from(`IMAX_cliplow ,inf ) `P(info="Maximum current up to which forward current behaves exponentially" unit="A" );
parameter real CJORBOT = 1E-3 `from(`CJORBOT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-area of bottom component" unit="Fm^-2" );
parameter real CJORSTI = 1E-9 `from(`CJORSTI_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of STI-edge component" unit="Fm^-1" );
parameter real CJORGAT = 1E-9 `from(`CJORGAT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of gate-edge component" unit="Fm^-1" );
parameter real VBIRBOT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of bottom component" unit="V" );
parameter real VBIRSTI = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of STI-edge component" unit="V" );
parameter real VBIRGAT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of gate-edge component" unit="V" );
parameter real PBOT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of bottom component" unit="" );
parameter real PSTI = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of STI-edge component" unit="" );
parameter real PGAT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of gate-edge component" unit="" );
parameter real PHIGBOT = 1.16 `P(info="Zero-temperature bandgap voltage of bottom component" unit="V" );
parameter real PHIGSTI = 1.16 `P(info="Zero-temperature bandgap voltage of STI-edge component" unit="V" );
parameter real PHIGGAT = 1.16 `P(info="Zero-temperature bandgap voltage of gate-edge component" unit="V" );
parameter real IDSATRBOT = 1E-12 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of bottom component" unit="Am^-2" );
parameter real IDSATRSTI = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of STI-edge component" unit="Am^-1" );
parameter real IDSATRGAT = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of gate-edge component" unit="Am^-1" );
parameter real CSRHBOT = 1E2 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of bottom component" unit="Am^-3" );
parameter real CSRHSTI = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of STI-edge component" unit="Am^-2" );
parameter real CSRHGAT = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of gate-edge component" unit="Am^-2" );
parameter real XJUNSTI = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of STI-edge component" unit="m" );
parameter real XJUNGAT = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of gate-edge component" unit="m" );
parameter real CTATBOT = 1E2 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of bottom component" unit="Am^-3" );
parameter real CTATSTI = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of STI-edge component" unit="Am^-2" );
parameter real CTATGAT = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of gate-edge component" unit="Am^-2" );
parameter real MEFFTATBOT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of bottom component" unit="" );
parameter real MEFFTATSTI = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component" unit="" );
parameter real MEFFTATGAT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component" unit="" );
parameter real CBBTBOT = 1E-12 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of bottom component" unit="AV^-3" );
parameter real CBBTSTI = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of STI-edge component" unit="AV^-3m" );
parameter real CBBTGAT = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of gate-edge component" unit="AV^-3m" );
parameter real FBBTRBOT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of bottom component" unit="Vm^-1" );
parameter real FBBTRSTI = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of STI-edge component" unit="Vm^-1" );
parameter real FBBTRGAT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of gate-edge component" unit="Vm^-1" );
parameter real STFBBTBOT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of bottom component" unit="K^-1" );
parameter real STFBBTSTI = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of STI-edge component" unit="K^-1" );
parameter real STFBBTGAT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of gate-edge component" unit="K^-1" );
parameter real VBRBOT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of bottom component" unit="V" );
parameter real VBRSTI = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of STI-edge component" unit="V" );
parameter real VBRGAT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of gate-edge component" unit="V" );
parameter real PBRBOT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of bottom component" unit="V" );
parameter real PBRSTI = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of STI-edge component" unit="V" );
parameter real PBRGAT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of gate-edge component" unit="V" );
parameter real IMAX = 1000 `from(`IMAX_cliplow ,inf ) `P(info="Maximum current up to which forward current behaves exponentially" unit="A");
parameter real TRJ = 21 `from(`TRJ_cliplow ,inf ) `P(info="reference temperature" unit="C");
// Parameters for source-bulk junction
`ifdef JUNCAP_StandAlone
parameter real CJORBOT = 1E-3 `from(`CJORBOT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-area of bottom component" unit="Fm^-2");
parameter real CJORSTI = 1E-9 `from(`CJORSTI_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of STI-edge component" unit="Fm^-1");
parameter real CJORGAT = 1E-9 `from(`CJORGAT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of gate-edge component" unit="Fm^-1");
parameter real VBIRBOT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of bottom component" unit="V");
parameter real VBIRSTI = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of STI-edge component" unit="V");
parameter real VBIRGAT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of gate-edge component" unit="V");
parameter real PBOT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of bottom component" unit="");
parameter real PSTI = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of STI-edge component" unit="");
parameter real PGAT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of gate-edge component" unit="");
parameter real PHIGBOT = 1.16 `P(info="Zero-temperature bandgap voltage of bottom component" unit="V");
parameter real PHIGSTI = 1.16 `P(info="Zero-temperature bandgap voltage of STI-edge component" unit="V");
parameter real PHIGGAT = 1.16 `P(info="Zero-temperature bandgap voltage of gate-edge component" unit="V");
parameter real IDSATRBOT = 1E-12 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of bottom component" unit="Am^-2");
parameter real IDSATRSTI = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of STI-edge component" unit="Am^-1");
parameter real IDSATRGAT = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of gate-edge component" unit="Am^-1");
parameter real CSRHBOT = 1E2 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of bottom component" unit="Am^-3");
parameter real CSRHSTI = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of STI-edge component" unit="Am^-2");
parameter real CSRHGAT = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of gate-edge component" unit="Am^-2");
parameter real XJUNSTI = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of STI-edge component" unit="m");
parameter real XJUNGAT = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of gate-edge component" unit="m");
parameter real CTATBOT = 1E2 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of bottom component" unit="Am^-3");
parameter real CTATSTI = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of STI-edge component" unit="Am^-2");
parameter real CTATGAT = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of gate-edge component" unit="Am^-2");
parameter real MEFFTATBOT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of bottom component" unit="");
parameter real MEFFTATSTI = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component" unit="");
parameter real MEFFTATGAT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component" unit="");
parameter real CBBTBOT = 1E-12 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of bottom component" unit="AV^-3");
parameter real CBBTSTI = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of STI-edge component" unit="AV^-3m");
parameter real CBBTGAT = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of gate-edge component" unit="AV^-3m");
parameter real FBBTRBOT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of bottom component" unit="Vm^-1");
parameter real FBBTRSTI = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of STI-edge component" unit="Vm^-1");
parameter real FBBTRGAT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of gate-edge component" unit="Vm^-1");
parameter real STFBBTBOT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of bottom component" unit="K^-1");
parameter real STFBBTSTI = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of STI-edge component" unit="K^-1");
parameter real STFBBTGAT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of gate-edge component" unit="K^-1");
parameter real VBRBOT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of bottom component" unit="V");
parameter real VBRSTI = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of STI-edge component" unit="V");
parameter real VBRGAT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of gate-edge component" unit="V");
parameter real PBRBOT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of bottom component" unit="V");
parameter real PBRSTI = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of STI-edge component" unit="V");
parameter real PBRGAT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of gate-edge component" unit="V");
`else // JUNCAP_StandAlone
parameter real CJORBOT = 1E-3 `from(`CJORBOT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-area of bottom component for source-bulk junction" unit="Fm^-2");
parameter real CJORSTI = 1E-9 `from(`CJORSTI_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of STI-edge component for source-bulk junction" unit="Fm^-1");
parameter real CJORGAT = 1E-9 `from(`CJORGAT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of gate-edge component for source-bulk junction" unit="Fm^-1");
parameter real VBIRBOT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of bottom component for source-bulk junction" unit="V");
parameter real VBIRSTI = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of STI-edge component for source-bulk junction" unit="V");
parameter real VBIRGAT = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of gate-edge component for source-bulk junction" unit="V");
parameter real PBOT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of bottom component for source-bulk junction" unit="");
parameter real PSTI = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of STI-edge component for source-bulk junction" unit="");
parameter real PGAT = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of gate-edge component for source-bulk junction" unit="");
parameter real PHIGBOT = 1.16 `P(info="Zero-temperature bandgap voltage of bottom component for source-bulk junction" unit="V");
parameter real PHIGSTI = 1.16 `P(info="Zero-temperature bandgap voltage of STI-edge component for source-bulk junction" unit="V");
parameter real PHIGGAT = 1.16 `P(info="Zero-temperature bandgap voltage of gate-edge component for source-bulk junction" unit="V");
parameter real IDSATRBOT = 1E-12 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of bottom component for source-bulk junction" unit="Am^-2");
parameter real IDSATRSTI = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of STI-edge component for source-bulk junction" unit="Am^-1");
parameter real IDSATRGAT = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of gate-edge component for source-bulk junction" unit="Am^-1");
parameter real CSRHBOT = 1E2 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of bottom component for source-bulk junction" unit="Am^-3");
parameter real CSRHSTI = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of STI-edge component for source-bulk junction" unit="Am^-2");
parameter real CSRHGAT = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of gate-edge component for source-bulk junction" unit="Am^-2");
parameter real XJUNSTI = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of STI-edge component for source-bulk junction" unit="m");
parameter real XJUNGAT = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of gate-edge component for source-bulk junction" unit="m");
parameter real CTATBOT = 1E2 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of bottom component for source-bulk junction" unit="Am^-3");
parameter real CTATSTI = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of STI-edge component for source-bulk junction" unit="Am^-2");
parameter real CTATGAT = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of gate-edge component for source-bulk junction" unit="Am^-2");
parameter real MEFFTATBOT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of bottom component for source-bulk junction" unit="");
parameter real MEFFTATSTI = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component for source-bulk junction" unit="");
parameter real MEFFTATGAT = 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component for source-bulk junction" unit="");
parameter real CBBTBOT = 1E-12 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of bottom component for source-bulk junction" unit="AV^-3");
parameter real CBBTSTI = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of STI-edge component for source-bulk junction" unit="AV^-3m");
parameter real CBBTGAT = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of gate-edge component for source-bulk junction" unit="AV^-3m");
parameter real FBBTRBOT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of bottom component for source-bulk junction" unit="Vm^-1");
parameter real FBBTRSTI = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of STI-edge component for source-bulk junction" unit="Vm^-1");
parameter real FBBTRGAT = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of gate-edge component for source-bulk junction" unit="Vm^-1");
parameter real STFBBTBOT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of bottom component for source-bulk junction" unit="K^-1");
parameter real STFBBTSTI = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of STI-edge component for source-bulk junction" unit="K^-1");
parameter real STFBBTGAT = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of gate-edge component for source-bulk junction" unit="K^-1");
parameter real VBRBOT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of bottom component for source-bulk junction" unit="V");
parameter real VBRSTI = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of STI-edge component for source-bulk junction" unit="V");
parameter real VBRGAT = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of gate-edge component for source-bulk junction" unit="V");
parameter real PBRBOT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of bottom component for source-bulk junction" unit="V");
parameter real PBRSTI = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of STI-edge component for source-bulk junction" unit="V");
parameter real PBRGAT = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of gate-edge component for source-bulk junction" unit="V");
`endif
`ifdef JUNCAP_StandAlone
// do nothing
`else // JUNCAP_StandAlone
// Parameters for drain-bulk junction
parameter real CJORBOTD = 1E-3 `from(`CJORBOT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-area of bottom component for drain-bulk junction" unit="Fm^-2");
parameter real CJORSTID = 1E-9 `from(`CJORSTI_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of STI-edge component for drain-bulk junction" unit="Fm^-1");
parameter real CJORGATD = 1E-9 `from(`CJORGAT_cliplow ,inf ) `P(info="Zero-bias capacitance per unit-of-length of gate-edge component for drain-bulk junction" unit="Fm^-1");
parameter real VBIRBOTD = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of bottom component for drain-bulk junction" unit="V");
parameter real VBIRSTID = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of STI-edge component for drain-bulk junction" unit="V");
parameter real VBIRGATD = 1 `from(`VBIR_cliplow ,inf ) `P(info="Built-in voltage at the reference temperature of gate-edge component for drain-bulk junction" unit="V");
parameter real PBOTD = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of bottom component for drain-bulk junction" unit="");
parameter real PSTID = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of STI-edge component for drain-bulk junction" unit="");
parameter real PGATD = 0.5 `from(`P_cliplow ,`P_cliphigh ) `P(info="Grading coefficient of gate-edge component for drain-bulk junction" unit="");
parameter real PHIGBOTD = 1.16 `P(info="Zero-temperature bandgap voltage of bottom component for drain-bulk junction" unit="V");
parameter real PHIGSTID = 1.16 `P(info="Zero-temperature bandgap voltage of STI-edge component for drain-bulk junction" unit="V");
parameter real PHIGGATD = 1.16 `P(info="Zero-temperature bandgap voltage of gate-edge component for drain-bulk junction" unit="V");
parameter real IDSATRBOTD = 1E-12 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of bottom component for drain-bulk junction" unit="Am^-2");
parameter real IDSATRSTID = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of STI-edge component for drain-bulk junction" unit="Am^-1");
parameter real IDSATRGATD = 1E-18 `from(`IDSATR_cliplow ,inf ) `P(info="Saturation current density at the reference temperature of gate-edge component for drain-bulk junction" unit="Am^-1");
parameter real CSRHBOTD = 1E2 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of bottom component for drain-bulk junction" unit="Am^-3");
parameter real CSRHSTID = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of STI-edge component for drain-bulk junction" unit="Am^-2");
parameter real CSRHGATD = 1E-4 `from(`CSRH_cliplow ,inf ) `P(info="Shockley-Read-Hall prefactor of gate-edge component for drain-bulk junction" unit="Am^-2");
parameter real XJUNSTID = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of STI-edge component for drain-bulk junction" unit="m");
parameter real XJUNGATD = 100E-9 `from(`XJUN_cliplow ,inf ) `P(info="Junction depth of gate-edge component for drain-bulk junction" unit="m");
parameter real CTATBOTD = 1E2 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of bottom component for drain-bulk junction" unit="Am^-3");
parameter real CTATSTID = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of STI-edge component for drain-bulk junction" unit="Am^-2");
parameter real CTATGATD = 1E-4 `from(`CTAT_cliplow ,inf ) `P(info="Trap-assisted tunneling prefactor of gate-edge component for drain-bulk junction" unit="Am^-2");
parameter real MEFFTATBOTD= 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of bottom component for drain-bulk junction" unit="");
parameter real MEFFTATSTID= 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component for drain-bulk junction" unit="");
parameter real MEFFTATGATD= 0.25 `from(`MEFFTAT_cliplow ,inf ) `P(info="Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component for drain-bulk junction" unit="");
parameter real CBBTBOTD = 1E-12 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of bottom component for drain-bulk junction" unit="AV^-3");
parameter real CBBTSTID = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of STI-edge component for drain-bulk junction" unit="AV^-3m");
parameter real CBBTGATD = 1E-18 `from(`CBBT_cliplow ,inf ) `P(info="Band-to-band tunneling prefactor of gate-edge component for drain-bulk junction" unit="AV^-3m");
parameter real FBBTRBOTD = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of bottom component for drain-bulk junction" unit="Vm^-1");
parameter real FBBTRSTID = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of STI-edge component for drain-bulk junction" unit="Vm^-1");
parameter real FBBTRGATD = 1E9 `P(info="Normalization field at the reference temperature for band-to-band tunneling of gate-edge component for drain-bulk junction" unit="Vm^-1");
parameter real STFBBTBOTD = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of bottom component for drain-bulk junction" unit="K^-1");
parameter real STFBBTSTID = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of STI-edge component for drain-bulk junction" unit="K^-1");
parameter real STFBBTGATD = -1E-3 `P(info="Temperature scaling parameter for band-to-band tunneling of gate-edge component for drain-bulk junction" unit="K^-1");
parameter real VBRBOTD = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of bottom component for drain-bulk junction" unit="V");
parameter real VBRSTID = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of STI-edge component for drain-bulk junction" unit="V");
parameter real VBRGATD = 10 `from(`VBR_cliplow ,inf ) `P(info="Breakdown voltage of gate-edge component for drain-bulk junction" unit="V");
parameter real PBRBOTD = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of bottom component for drain-bulk junction" unit="V");
parameter real PBRSTID = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of STI-edge component for drain-bulk junction" unit="V");
parameter real PBRGATD = 4 `from(`PBR_cliplow ,inf ) `P(info="Breakdown onset tuning parameter of gate-edge component for drain-bulk junction" unit="V");
`endif // JUNCAP_StandAlone
// JUNCAP2-express parameters
parameter real SWJUNEXP = 0.0 `from( 0.0,1.0 ) `P(info="Flag for JUNCAP-express; 0=full model, 1=express model" unit="");
`ifdef JUNCAP_StandAlone
parameter real VJUNREF = 2.5 `from(`VJUNREF_cliplow ,inf ) `P(info="Typical maximum junction voltage; usually about 2*VSUP" unit="");
parameter real FJUNQ = 0.03 `from(`FJUNQ_cliplow ,inf ) `P(info="Fraction below which junction capacitance components are considered negligible" unit="");
`else // JUNCAP_StandAlone
parameter real VJUNREF = 2.5 `from(`VJUNREF_cliplow ,inf ) `P(info="Typical maximum source-bulk junction voltage; usually about 2*VSUP" unit="");
parameter real FJUNQ = 0.03 `from(`FJUNQ_cliplow ,inf ) `P(info="Fraction below which source-bulk junction capacitance components are considered negligible" unit="");
parameter real VJUNREFD = 2.5 `from(`VJUNREF_cliplow ,inf ) `P(info="Typical maximum drain-bulk junction voltage; usually about 2*VSUP" unit="");
parameter real FJUNQD = 0.03 `from(`FJUNQ_cliplow ,inf ) `P(info="Fraction below which drain-bulk junction capacitance components are considered negligible" unit="");
`endif // JUNCAP_StandAlone

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,18 +4,24 @@
//======================================================================================
//======================================================================================
//
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
// (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.1, April 2007 (Simkit 2.5)
// Version: 102.5.0, December 2013
//
//======================================================================================
//======================================================================================
//
// Further information can be found in the file readme.txt
// Further information can be found in the file releasenotesPSP102.txt
//
/////////////////////////////////////////////
//
// Macros and constants used in PSP
@ -23,7 +29,7 @@
/////////////////////////////////////////////
// Explicit Gmin
`define GMIN 1E-15
`define GMIN $simparam("gmin")
`define PMOS -1
`define NMOS +1
@ -33,7 +39,6 @@
`define MAXA(x,y,a) 0.5*((x)+(y)+sqrt(((x)-(y))*((x)-(y))+(a)))
// Physical constants
`define EPSOX 3.453E-11
`define QMN 5.951993
`define QMP 7.448711
@ -41,20 +46,10 @@
`define DELTA1 0.02
`define invSqrt2 7.0710678118654746e-01
`define oneSixth 1.6666666666666667e-01
`define exp80 5.5406223843935098e+34
`define exp160 3.0698496406442424e+69
`ifdef NQSmodel
`define Gint GP
`define Bint BP
`define Bjs BS
`define Bjd BD
`else // NQSmodel
`define Gint G
`define Bint B
`define Bjs B
`define Bjd B
`endif // NQSModel
`define OPdef(OPvarname, OPdesc, OPunit) (*desc=OPdesc*) real OPvarname;
/////////////////////////////////////////////////////////////////////////////
//
@ -73,19 +68,14 @@
// around the arguments in the expressions are necessary)
`define sigma(a,c,tau,eta,y) \
nu = (a) + (c); \
mu = nu * nu / (tau) + 0.5 * ((c) * (c)) - (a); \
y = (eta) + (a) * nu / (mu + (nu / mu) * (c) * ((c) * (c) * `oneThird - (a)));
mutau = nu * nu + (tau) * (0.5 * ((c) * (c)) - (a)); \
y = (eta) + (a) * nu * (tau) / (mutau + (nu / mutau) * (tau) * (tau) * (c) * ((c) * (c) * `oneThird - (a)));
// modified version of sigma, which takes 4 arguments
`define sigma2(a,b,c,tau,eta,y) \
nu = (a) + (c); \
if (abs(tau) < 1e-120) begin /*sometimes tau is extremely small...*/\
y = (eta); \
end else begin \
mu = (nu) * (nu) / (tau) + 0.5 * ((c) * (c)) - (a) * (b); \
y = (eta) + (a) * nu / (mu + (nu / mu) * (c) * ((c) * (c) * `oneThird - (a) * (b))); \
end
mutau = (nu) * (nu) + (tau) * (0.5 * ((c) * (c)) - (a) * (b)); \
y = (eta) + (a) * nu * (tau) / (mutau + (nu / mutau) * (tau) * (tau) * (c) * ((c) * (c) * `oneThird - (a) * (b)));
//
// sp_s surface potential calculation
@ -248,3 +238,37 @@
end \
sp = -sp; \
end
// This construct is used for parasitic resistances.
// If R=0, the Verilog-A compiler should recognize
// that the corresponding nodes can be collapsed
`define CollapsableR(G, R, SN, N1, N2) \
if ((R) > 0.0) begin \
I(N1, N2) <+ MULT_i * (G) * V(N1, N2); \
I(N1, N2) <+ white_noise(MULT_i * SN); \
end else begin \
V(N1, N2) <+ 0.0; \
end
`define NonCollapsableR(G, R, SN, N1, N2) \
I(N1, N2) <+ MULT_i * (G) * V(N1, N2); \
I(N1, N2) <+ white_noise(MULT_i * SN, "thermal noise");
// This macro is used for asymmetric overlap regions.
// The following variables are changed to those for source/drain side.
`define ChangeToSource \
GOV = GOV_s; \
GOV2 = GOV2_s; \
xi_ov = xi_ov_s; \
inv_xi_ov = inv_xi_ov_s; \
x_mrg_ov = x_mrg_ov_s; \
inv_xg1 = inv_xg1_s;
`define ChangeToDrain \
GOV = GOV_d; \
GOV2 = GOV2_d; \
xi_ov = xi_ov_d; \
inv_xi_ov = inv_xi_ov_d; \
x_mrg_ov = x_mrg_ov_d; \
inv_xg1 = inv_xg1_d;

File diff suppressed because it is too large Load Diff

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

View File

@ -4,25 +4,36 @@
//======================================================================================
//======================================================================================
//
// (c) Copyright 2007, All Rights Reserved, NXP Semiconductors
// (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.1, April 2007 (Simkit 2.5)
// Version: 102.5.0, December 2013
//
//======================================================================================
//======================================================================================
//
// Further information can be found in the file readme.txt
// Further information can be found in the file releasenotesPSP102.txt
//
`include "discipline.h"
`include "SIMKIT_macrodefs.include"
`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
/////////////////////////////////////////////////////////////////////////////
//
@ -30,19 +41,9 @@
//
/////////////////////////////////////////////////////////////////////////////
// `undef LocalModel
// `define Binning
module PSP102VA(D, G, S, B);
//`P(
// info = "PSP MOSFET Model"
// version = `VERS
// revision = `VREV
// simkit:name = "psp1020"
// simkit:desc = "psp_1020"
//)
`include "PSP102_module.include"
endmodule

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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