Hemt ph.tcl

From Flooxs
Revision as of 14:29, 15 July 2016 by Maddie (talk | contribs)
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

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

  1. -----------------------------------------------------------------------------------------------------------------------------------------
  2. ---------------------------------------------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"

  1. -----------------------------------------------------------------------------------------------------------------------------------------
  2. ----------------------------------------------Run the Initial Guess Procedure------------------------------------------------------------
  3. 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

  1. -----------------------------------------------------------------------------------------------------------------------------------------
  2. --------------------------------------------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

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


  1. specify solution variable for negative oxide surface site SO

solution add name=SO solve !negative damp pde

  1. -------------------------------------------pH increment and adsorbed charge derivation----------------------------------------------------

if {1} {

  1. Kfa is a the forward reaction rate coefficient for the SO equation.

set Kfa 2.58867e-11

  1. Kra is a the reverse reaction rate coefficient for the SO equation.

set Kra 1.0e5

  1. Kfb is a the forward reaction rate coefficient for the SOH2 equation.

set Kfb 2.58867e-11

  1. Krb is a the reverse reaction rate coefficient for the SOH2 equation.

set Krb 1.0e2

  1. Ns is the number of available surface sites

set Ns 1.0e15

  1. 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"

  1. 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)"

  1. 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 }

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

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

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

  1. -------------------------------------------Net Adsorbed Charge v Position (Y-Direction)----------------------------------------------------
  2. these points are defined for 1 um gate length. For any other gate length, the y.v values must be changed.

if {1} {

  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 }

  1. -------------------------------------------SO/DevPsi v. Position Across pH Range----------------------------------------------
  2. 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

  1. DevPsi v position (x-direction, DL/AlGaN)

sel z=DevPsi plot.1d y.v=0.0 plot_name=Band2 label=DevPsi.$inc !cle

  1. -------------------------------------------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}