Hemt ph.tcl
Jump to navigation
Jump to search
#simulation parameters pdbSetDouble Math iterLimit 1000 ;#sets the max number of Newton iterations to 1000 math device dim=2 col umf none scale #----------------------------------------------------------------------------------------------------------------------------------------- #----------------------------------Include Source Files----------------------------------------------------------------------------------- # include files source GaN_modelfile_mo.tcl ;# this file add the materials in the structure and specifies their material properties and specifies Ohmic contacts for S D B and Schottky for G source Poisson.tcl source Continuity.tcl #----------------------------------------------------------------------------------------------------------------------------------------- #----------------------------------Create Structure--------------------------------------------------------------------------------------- #proc called Struct2D that defines grid (default unit is microns) #gate Length increment set gateLinc 0.0 ; #a 0.15 increment is a +0.30um growth with gate length of 1.3um. proc Struct2D {} { if {1} { ;# the [if {1}] tcl statement allows one to comment out the text between the brackets if {1} is set to {0}. This is nice to use if you want to make multiple structures and easily change between them. line x loc=-0.3 spac=0.05 tag=NTop line x loc=-0.0005 spac=0.0001 tag=Oxtop line x loc=0.0 spac=0.0001 tag=AlGaNTop line x loc=0.015 spac=0.0008 tag=AlGaNBottom line x loc=1.8 spac=0.2 tag=GaNBottom line x loc=2.0 spac=0.02 tag=AlNBottom line x loc=3.0 spac=1.5 tag=BBottom } if {1} { ;# 1 um gate (no T gate) #gate Length increment set gateLinc 0.0 line y loc=(-2.0-$gateLinc) spac=0.1 tag=Left line y loc=(-1.25-$gateLinc) spac=0.5 line y loc=(-0.50-$gateLinc) spac=0.01 tag=Oxleft line y loc=(-0.15-$gateLinc) spac=0.1 line y loc=0.0 spac=0.10 line y loc=(0.15+$gateLinc) spac=0.1 line y loc=(0.50+$gateLinc) spac=0.01 tag=Oxright line y loc=(1.25+$gateLinc) spac=0.5 line y loc=(2.0+$gateLinc) spac=0.1 tag=Right } #use the tags above to create the material regions #Bulk region SiC xlo=AlNBottom xhi=BBottom ylo=Left yhi=Right #thin AlN layer region AlN xlo=GaNBottom xhi=AlNBottom ylo=Left yhi=Right #Buffer region GaN xlo=AlGaNBottom xhi=GaNBottom ylo=Left yhi=Right #AlGaN under gate region AlGaN xlo=AlGaNTop xhi=AlGaNBottom ylo=Left yhi=Right #DL region GaO xlo=Oxtop xhi=AlGaNTop ylo=Oxleft yhi=Oxright #gate metal/electrolyte region Electrolyte xlo=NTop xhi=Oxtop ylo=Oxleft yhi=Oxright #passivation layers region Nitride xlo=NTop xhi=AlGaNTop ylo=Left yhi=Oxleft region Nitride xlo=NTop xhi=AlGaNTop ylo=Oxright yhi=Right #initialize the grid (this command creates the grid with the specified regions) init #Create the contacts contact name=G Electrolyte xlo=-0.40 xhi=-0.28 ylo=(-0.75-$gateLinc) yhi=(0.75+$gateLinc) add depth=1.0 contact name=B SiC xlo=2.9 xhi=7.0 add depth=1.0 contact name=S AlGaN ylo=(-3.4-$gateLinc) yhi=(-1.99-$gateLinc) xlo=-1.5 xhi=0.0149 add depth=1.0 contact name=D AlGaN ylo=(1.99+$gateLinc) yhi=(3.4+$gateLinc) xlo=-1.5 xhi=0.0149 add depth=1.0 # the x and y pts need to be a little larger than the grid specifications to capture all of the grid points # you can specify the depth of the contact into the page by depth=X. With depth=1.0 the current units are A/um. With the depth specified, the current unit will be in A. } #end Struct 2D procedure (remember you still need to call the procedure) Struct2D #calls the procedure #plot the grid and contacts to make sure everything is correct plot.2d bound grid plot.2d contact=G !cle plot.2d contact=B !cle plot.2d contact=S !cle plot.2d contact=D !cle #---------------------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------Specify Solution Variables------------------------------------------------------------------ # we are solving for Qfn , Qfp, and DevPsi (device potential), temp is a constant and set to 300 K solution add name=DevPsi solve negative damp continuous pde ;# potential in semiconductor solution add name=Qfp solve negative damp continuous pde solution add name=Qfn solve negative damp continuous pde
solution add name=Cl solve !negative damp pde ;# Cl ion concentration solution add name=H solve !negative damp pde ;# hydrogen ion concentration solution add name=Na solve !negative damp pde ;# Na ion concentration solution add name=A solve !negative damp pde ;# acid species concentration solution add name=SOH2 solve !negative damp pde ;#positive interface charge
solution add name=Temp const val=300.0 #solution add name=Temp solve pde !negative continuous damp
# these are needed if donor or acceptor traps are included solution add name=ETemp solve const val = 300.0 continuous solution add name=HTemp solve const val = 300.0 continuous solution add name=Donor solve const val = 10.0 solution add name=Acceptor solve const val = 10.0
#---------------------------------------------------------------------------------------------------------------------------------------- #-------------------------------------------Specify the Doping (this includes static traps)---------------------------------------------- # the GaN doping is most important when fitting to an experimental IV curve; it is usually p-type #GaN Doping units are /cm3, negative sign is p-type, sel z= 2.0e14*Mater(GaN) name=GaN_Doping #AlGaN Doping sel z= 1.0e0*Mater(AlGaN) name=AlGaN_Doping #AlN doping sel z= 1.0e12*Mater(AlN) name=AlN_Doping
#SiC doping sel z= 1.0e12*Mater(SiC) name=SiC_Doping #GaN2 doping, GaN cap layer (no physics included) sel z= 1.0e0*Mater(GaN2) name=GaN2_Doping
#for new gate lengths set SDedge [expr (1.9+$gateLinc)]
#Source and Drain contact doping-from contact to 2DEG to make contacts ohmic (Gaussian profile is used in the expression) sel z=(1e19*(y>$SDedge)+(y<=$SDedge)*1.0e19*exp(-(y-$SDedge)*(y-$SDedge)/($SDedge*0.02*0.02)))*(exp(-(x*x)/($SDedge*0.03*0.03))) name=Drain_Doping sel z=(1e19*(y<-$SDedge)+(y>=-$SDedge)*1.0e19*exp(-(y+$SDedge)*(y+$SDedge)/($SDedge*0.02*0.02)))*(exp(-(x*x)/($SDedge*0.03*0.03))) name=Source_Doping
#Total doping sel z=GaN_Doping+AlGaN_Doping+Drain_Doping+Source_Doping+SiC_Doping+AlN_Doping+GaN2_Doping name=Doping #---------------------------------------------------------------------------------------------------------------------------------------- #------------------------------------------Specify the AlN ratio in the AlGaN------------------------------------------------------------ # this is used in the modelfile to calculate AlGaN material parameters sel z=0.25 name=AlN_Ratio
#---------------------------------------------------------------------------------------------------------------------------------------- #------------------------------------------Species Concentrations and Mobilities--------------------------------------------------------- #concentrations set Av 6.02e23 ;# Avogadro's number, ions/mol set cCl [expr (100.0e-3*$Av)*1e-3] ;# M*ions/mol*l/cm3 = ions/cm3 set cNa [expr (100.0e-3*$Av)*1e-3] ;# M*ions/mol*m3/cm3 = ions/cm3 set cH [expr (1.0e-1*$Av)*1e-3] ;# ions/cm3 set cA [expr (1.0e-1*$Av)*1e-3] ;# ions/cm3 set Ns 1.0e15 ;# surface interface site density /cm2
#mobilities and diffusivity constants set D_Na 1.96e-5 ;# cm2/s from Lopreore set D_Cl 2.03e-5 ;# cm2/s from Lopreore set D_H 8.24e-5 ;# cm2/s from Lopreore set D_A 2.00e-5 ;# cm2/s from Lopreore set Namob [expr {$D_Na/$Vt}] set Clmob [expr {$D_Cl/$Vt}] set Hmob [expr {$D_H/$Vt}] set Amob [expr {$D_A/$Vt}]
#assign mobility variable for each ion species pdbSetDouble Electrolyte Cl mob $Clmob pdbSetDouble Electrolyte Na mob $Namob pdbSetDouble Electrolyte H mob $Hmob pdbSetDouble Electrolyte A mob $Amob
#----------------------------------------------------------------------------------------------------------------------------------------- #-------------------------------------------Poisson in Electrolyte------------------------------------------------------------------------ proc Poisson_Electro {Mat} { global k q eps0 Vt pdbSetDouble $Mat DevPsi DampValue 0.025 pdbSetDouble $Mat DevPsi Abs.Error 0.001 pdbSetDouble $Mat DevPsi Rel.Error 0.01 set eqn " ($eps0 * [pdbDelayDouble $Mat DevPsi RelEps] * grad(DevPsi) / $q) + (- Cl + H - A + Na)" pdbSetString $Mat DevPsi Equation $eqn } ;#end Poisson proc #----------------------------------------------------------------------------------------------------------------------------------------- #------------------------------------------Continuity in Electrolyte---------------------------------------------------------------------- proc Continuity2 {Mat} { global Vt Namob Clmob Hmob Amob
#set eqn "ddt($species) - (([pdbDelayDouble $Mat $species mob]) * sgrad($species, -DevPsi / $Vt))" set eqnNa "ddt(Na) - ($Namob) * sgrad(Na, -DevPsi/$Vt)" set eqnCl "ddt(Cl) - ($Clmob) * sgrad(Cl, DevPsi/$Vt)" set eqnH "ddt(H) - ($Hmob) * sgrad(H, -DevPsi/$Vt)" set eqnA "ddt(A) - ($Amob) * sgrad(A, DevPsi/$Vt)"
pdbSetString $Mat Na Equation $eqnNa pdbSetDouble $Mat Na Abs.Error 1.0e-5 pdbSetDouble $Mat Na Rel.Error 1.0e-3 pdbSetString $Mat Cl Equation $eqnCl pdbSetDouble $Mat Cl Abs.Error 1.0e-5 pdbSetDouble $Mat Cl Rel.Error 1.0e-3 pdbSetString $Mat H Equation $eqnH pdbSetDouble $Mat H Abs.Error 1.0e-5 pdbSetDouble $Mat H Rel.Error 1.0e-3 pdbSetString $Mat A Equation $eqnA pdbSetDouble $Mat A Abs.Error 1.0e-5 pdbSetDouble $Mat A Rel.Error 1.0e-3
} ;#end Continuity proc #----------------------------------------------------------------------------------------------------------------------------------------- #------------------------------------------Call procedures describing Physics------------------------------------------------------------- #Poisson equation and trap ionization Poisson GaN2 Poisson AlGaN Poisson_Ins Nitride Poisson_Ins GaO Poisson SiC Poisson AlN Poisson GaN Poisson_Electro Electrolyte
#Continuity equations for electron, hole and transient trap simulation ElecContinuity GaN ElecContinuity AlGaN ElecContinuity SiC ElecContinuity AlN
HoleContinuity GaN HoleContinuity AlGaN HoleContinuity SiC HoleContinuity AlN Continuity2 Electrolyte ;#call proc for electrolyte continuity #-----------------------------------------------------------------------------------------------------------------------------------------
#--------------------------------------------Change in Ion Concentrations at Contact Proc------------------------------------------------- proc Dir.contact2 {Contact} { global cCl cNa cH cA
pdbSetBoolean $Contact Cl Flux 0 pdbSetBoolean $Contact Cl Fixed 1 pdbSetBoolean $Contact Na Flux 0 pdbSetBoolean $Contact Na Fixed 1 pdbSetBoolean $Contact H Flux 0 pdbSetBoolean $Contact H Fixed 1 pdbSetBoolean $Contact A Flux 0 pdbSetBoolean $Contact A Fixed 1
pdbSetString $Contact Cl Equation "Cl-$cCl" pdbSetString $Contact Na Equation "Na-$cNa" pdbSetString $Contact H Equation "H-$cH" pdbSetString $Contact A Equation "A-$cA" } ;#end electrolyte ion conc proc
#----------------------------------------------------------------------------------------------------------------------------------------- #---------------------------------------------Initialize all contacts to 0V--------------------------------------------------------------- #contact name=G Electrolyte voltage supply=3.0 contact name=B SiC voltage supply=0.0 contact name=S AlGaN voltage supply=0.0 contact name=D AlGaN voltage supply=0.0 pdbSetBoolean B Temp Fixed 0 pdbSetString B Temp Equation "(2.7*(Temp-300.0))/0.00125"
#----------------------------------------------------------------------------------------------------------------------------------------- #----------------------------------------------Run the Initial Guess Procedure------------------------------------------------------------ #Initial guess procedure, call for all materials proc Init {Mat} { newton $Mat eqn=Doping+Donor-Acceptor+Hole-Elec var=DevPsi damp=0.025 } Init GaN Init AlGaN Init AlN Init SiC
sel z=$cH*Mater(Electrolyte) name=H1 sel z=0 name=H2 sel z=H1+H2 name=H sel z=$cNa*Mater(Electrolyte) name=Na sel z=$cCl*Mater(Electrolyte) name=Cl sel z=$cA*Mater(Electrolyte) name=A sel z=6.1 name=DevPsi
Dir.contact2 G ;#call for ion concentration change at contact (electrolyte) proc #----------------------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------Run and Plot---------------------------------------------------------------------------------
set WinA [CreateGraphWindow] ;# absorbed charge v. pH (H+, A- and total) set WinB [CreateGraphWindow] ;# semiconductor potential v. pH set WinC [CreateGraphWindow] ;# Id-Vds curve (point measurement) set WinD [CreateGraphWindow] ;# net adsorbed charge v. position (y-direction) across pH range device ;# multiple device commands to help with convergence device device device
pdbSetString AlGaN_GaO DevPsi Equation " -3.26e12" ;# polarization charge for AlGaN-DL pdbSetString AlN_GaN DevPsi Equation "2.2e13" ;# polarization charge for AlN-GaN pdbSetString AlGaN_Nitride DevPsi Equation " -3.26e13" ;# polarization charge for AlGaN-Nitride pdbSetString AlGaN_GaN DevPsi Equation "1.06e13" ;# polarization charge for AlGaN-GaN
device init device device device
#--------------------------------------------Energy Band Diagram v. Position (X-Direction, DL/AlGaN)-------------------------------------------------------------------------- sel z=Econd plot.1d y.v=0.0 plot_name=Band label=Ec !cle sel z=Eval plot.1d y.v=0.0 plot_name=Band label=Ev !cle sel z=Qfp plot.1d y.v=0.0 plot_name=Band label=Qfp !cle sel z=Qfn plot.1d y.v=0.0 plot_name=Band label=Qfn !cle sel z=DevPsi plot.1d y.v=0.0 plot_name=Band label=DevPsi !cle sel z=Doping plot.1d x.v=0.0 plot_name=DopingX label=Doping !cle sel z=Doping plot.1d y.v=0.0 plot_name=DopingY label=Doping !cle #specify solution variable for negative oxide surface site SO solution add name=SO solve !negative damp pde
#-------------------------------------------pH increment and adsorbed charge derivation---------------------------------------------------- if {1} { #Kfa is a the forward reaction rate coefficient for the SO equation. set Kfa 2.58867e-11 #Kra is a the reverse reaction rate coefficient for the SO equation. set Kra 1.0e5 #Kfb is a the forward reaction rate coefficient for the SOH2 equation. set Kfb 2.58867e-11 #Krb is a the reverse reaction rate coefficient for the SOH2 equation. set Krb 1.0e2 #Ns is the number of available surface sites set Ns 1.0e15
# H interface equations for Electrolyte-DL pdbSetString Electrolyte_GaO SO Equation "ddt(SO) - $Kra*($Ns-SO-SOH2) + $Kfa*(H(Electrolyte))*(SO)" pdbSetString Electrolyte_GaO SOH2 Equation "ddt(SOH2) - $Krb*(SOH2) + $Kfb*(H(Electrolyte))*($Ns-SOH2-SO)" pdbSetString Electrolyte_GaO H Electrolyte Equation "+ $Krb*(SOH2) - $Kfb*(H(Electrolyte))*($Ns-SOH2-SO) + $Kra*($Ns-SO-SOH2) - $Kfa*(H(Electrolyte))*(SO)" pdbSetString Electrolyte_GaO DevPsi Equation "SOH2 - SO"
#ph increment for {set inc 0} {$inc<10.5} {set inc [expr $inc+1.0]} { set mult [expr pow(10,$inc)] ;# need to put in expr to evaluate right away to avoid syntax error in pdb equation pdbSetString G H Equation "H-($cH/$mult)" pdbSetString G A Equation "A-($cA/$mult)"
#drain bias ramp for {set Vds 0.05} {$Vds<1.1} {set Vds [expr $Vds+0.1]} { contact name=D supply=$Vds device init device device set cur [expr (1.0e6*(-[contact name=D sol=Qfn flux] + [contact name=D sol=Qfp flux]))] ;# plots the current versus time (mA/mm) AddtoLine $WinC IdVd.$inc $Vds $cur }
# ion distribution (X-direction, electrolyte/DL/AlGaN), p[ion] = -log10[ion conc] sel z=log10(Na+1.0) plot.1d y.v=0.0 !cle plot_name=electrolyte label=Na sel z=log10(Cl+1.0) plot.1d y.v=0.0 !cle plot_name=electrolyte label=Cl sel z=log10(H+1.0) plot.1d y.v=0.0 !cle plot_name=electrolyte label=H sel z=log10(A+1.0) plot.1d y.v=0.0 !cle plot_name=electrolyte label=A
#adsorbed charge derivation for electrolyte-DL sel z=SOH2 set nit_plus [interface Electrolyte /GaO y.v=0.0 val] puts $nit_plus sel z=SO set nit_minus [interface Electrolyte /GaO y.v=0.0 val] puts $nit_minus
set int_chrg [expr ($nit_plus-$nit_minus)] set pH 1+$inc AddtoLine $WinA Int_chrg $pH $int_chrg AddtoLine $WinA SOH2 $pH $nit_plus AddtoLine $WinA SO $pH $nit_minus #-------------------------------------------Electrostatic Potential and pH (Y-Direction)---------------------------------------------------- sel z=DevPsi set potential [interface Electrolyte /GaO y.v=0.0 val] AddtoLine $WinB Potential $pH $potential set potential [interface Electrolyte /GaO y.v=-0.25 val] AddtoLine $WinB Potential2 $pH $potential set potential [interface Electrolyte /GaO y.v=0.25 val] AddtoLine $WinB Potential3 $pH $potential
#-------------------------------------------Net Adsorbed Charge v Position (Y-Direction)---------------------------------------------------- #these points are defined for 1 um gate length. For any other gate length, the y.v values must be changed. if {1} { #positive oxide surface sites sel z=SOH2 set t1 [interface Electrolyte /GaO y.v=-0.5 val] set t2 [interface Electrolyte /GaO y.v=-0.375 val] set t3 [interface Electrolyte /GaO y.v=-0.25 val] set t4 [interface Electrolyte /GaO y.v=-0.125 val] set t5 [interface Electrolyte /GaO y.v=0.0 val] set t6 [interface Electrolyte /GaO y.v=0.125 val] set t7 [interface Electrolyte /GaO y.v=0.25 val] set t8 [interface Electrolyte /GaO y.v=0.375 val] set t9 [interface Electrolyte /GaO y.v=0.4 val] set t10 [interface Electrolyte /GaO y.v=0.5 val] set t11 [interface Electrolyte /GaO y.v=0.48 val] set t12 [interface Electrolyte /GaO y.v=0.5 val]
sel z=SO ;#negative oxide surface site set m1 [interface Electrolyte /GaO y.v=-0.5 val] set m2 [interface Electrolyte /GaO y.v=-0.375 val] set m3 [interface Electrolyte /GaO y.v=-0.25 val] set m4 [interface Electrolyte /GaO y.v=-0.125 val] set m5 [interface Electrolyte /GaO y.v=0.0 val] set m6 [interface Electrolyte /GaO y.v=0.125 val] set m7 [interface Electrolyte /GaO y.v=0.25 val] set m8 [interface Electrolyte /GaO y.v=0.375 val] set m9 [interface Electrolyte /GaO y.v=0.40 val] set m10 [interface Electrolyte /GaO y.v=0.45 val] set m11 [interface Electrolyte /GaO y.v=0.48 val] set m12 [interface Electrolyte /GaO y.v=0.5 val]
set T1 [expr $t1-$m1] set T2 [expr $t2-$m2] set T3 [expr $t3-$m3] set T4 [expr $t4-$m4] set T5 [expr $t5-$m5] set T6 [expr $t6-$m6] set T7 [expr $t7-$m7] set T8 [expr $t8-$m8] set T9 [expr $t9-$m9] set T10 [expr $t10-$m10] set T11 [expr $t11-$m11] set T12 [expr $t12-$m12]
AddtoLine $WinD Intchrg.$inc -0.5 $T1 AddtoLine $WinD Intchrg.$inc -0.375 $T2 AddtoLine $WinD Intchrg.$inc -0.25 $T3 AddtoLine $WinD Intchrg.$inc -0.125 $T4 AddtoLine $WinD Intchrg.$inc 0.0 $T5 AddtoLine $WinD Intchrg.$inc 0.125 $T6 AddtoLine $WinD Intchrg.$inc 0.25 $T7 AddtoLine $WinD Intchrg.$inc 0.375 $T8 AddtoLine $WinD Intchrg.$inc 0.4 $T9 AddtoLine $WinD Intchrg.$inc 0.45 $T10 AddtoLine $WinD Intchrg.$inc 0.48 $T11 AddtoLine $WinD Intchrg.$inc 0.5 $T12 } #-------------------------------------------SO/DevPsi v. Position Across pH Range---------------------------------------------- # SO v position (y-direction) sel z=SO plot.1d x.v=0.0005 plot_name=Intchrg label=SO.$inc !cle set nitT_minus [interface Electrolyte /GaO x.v=0.0005 val] puts $nitT_minus sel z=Econd plot.1d y.v=0.0 plot_name=Band2 label=Ec.$inc !cle sel z=Eval plot.1d y.v=0.0 plot_name=Band2 label=Ev.$inc !cle sel z=Qfp plot.1d y.v=0.0 plot_name=Band2 label=Qfp.$inc !cle sel z=Qfn plot.1d y.v=0.0 plot_name=Band2 label=Qn.$inc !cle
#DevPsi v position (x-direction, DL/AlGaN) sel z=DevPsi plot.1d y.v=0.0 plot_name=Band2 label=DevPsi.$inc !cle
#-------------------------------------------Current v. time and Carrier (E) Conc v. Position (X-Direction, DL/AlGaN)---------------------------------------------------------------------------- plot.1d y.v=0.0 plot_name=elec_conc label=elec.$inc !cle } ;#end for loop, increment pH } ;#end if{1}