Resistor example (1D): Difference between revisions

From Flooxs
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
Define solution variables
  DevicePackage
  DevicePackage
  solution name=Potential nosolve
  solution name=Potential nosolve
Line 5: Line 7:
  solution add name=Hole solve !negative
  solution add name=Hole solve !negative


Create 1D struture
  line x loc=0.0 spac=0.01 tag=Top
  line x loc=0.0 spac=0.01 tag=Top
  line x loc=1.0 spac=0.01 tag=Bottom
  line x loc=1.0 spac=0.01 tag=Bottom
Line 10: Line 13:
  init
  init


Create contacts
  contact name=VSS silicon xlo=-0.1 xhi=0.1 add
  contact name=VSS silicon xlo=-0.1 xhi=0.1 add
  contact name=GND silicon xlo=0.9 xhi=1.1 add
  contact name=GND silicon xlo=0.9 xhi=1.1 add
Line 15: Line 19:
  contact name=GND voltage supply=0.0
  contact name=GND voltage supply=0.0


 
Define constants
  set T 300
  set T 300
  set k 1.38066e-23
  set k 1.38066e-23
Line 26: Line 30:
  set Hmob 150.0
  set Hmob 150.0


Define Poisson's solution and continuity equations
  set eqnP "$eps * grad(DevPsi) + Doping - Elec + Hole"
  set eqnP "$eps * grad(DevPsi) + Doping - Elec + Hole"
  set eqnE "ddt(Elec) - ($Emob) * $Vt * sgrad(Elec, DevPsi/$Vt)"
  set eqnE "ddt(Elec) - ($Emob) * $Vt * sgrad(Elec, DevPsi/$Vt)"
  set eqnH "ddt(Hole) - ($Hmob) * $Vt * sgrad(Hole, -DevPsi/$Vt)"
  set eqnH "ddt(Hole) - ($Hmob) * $Vt * sgrad(Hole, -DevPsi/$Vt)"
  pdbSetDouble Si DevPsi DampValue $Vt
  pdbSetDouble Si DevPsi DampValue $Vt
  pdbSetString Si DevPsi Equation $eqnP
  pdbSetString Si DevPsi Equation $eqnP
Line 35: Line 39:
  pdbSetString Si Hole Equation $eqnH  
  pdbSetString Si Hole Equation $eqnH  


Doping
  sel z=1.0e19 name=ND
  sel z=1.0e19 name=ND
  sel z=1.0e15 name=NA
  sel z=1.0e15 name=NA
  sel z=ND-NA name=Doping
  sel z=ND-NA name=Doping


Define ohmic contact equations
  proc ohmic.contact {Contact} {
  proc ohmic.contact {Contact} {
  set vt 0.02558357
  set vt 0.02558357
Line 54: Line 60:
  pdbSetString $Contact Hole Equation "DevPsi + $vt*log((Hole)/$ni) -$Contact"
  pdbSetString $Contact Hole Equation "DevPsi + $vt*log((Hole)/$ni) -$Contact"
  }
  }
  ohmic.contact VSS
  ohmic.contact VSS
  ohmic.contact GND
  ohmic.contact GND


Initial guess procedure, assumes charge neutrality
  proc InitialGuess {Doping} {
  proc InitialGuess {Doping} {
  sel z= {(Doping>0.0)   
  sel z= {(Doping>0.0)   
Line 67: Line 73:
  InitialGuess Doping
  InitialGuess Doping


 
Run DC simulation and plot the current output vs. the source voltage
  set Win [CreateGraphWindow]
  set Win [CreateGraphWindow]
  set bias 0.0
  set bias 0.0

Revision as of 19:04, 15 September 2008

Define solution variables

DevicePackage
solution name=Potential nosolve
solution add name=DevPsi solve negative 
solution add name=Elec solve !negative
solution add name=Hole solve !negative

Create 1D struture

line x loc=0.0 spac=0.01 tag=Top
line x loc=1.0 spac=0.01 tag=Bottom
region silicon xlo=Top xhi=Bottom
init

Create contacts

contact name=VSS silicon xlo=-0.1 xhi=0.1 add
contact name=GND silicon xlo=0.9 xhi=1.1 add
contact name=VSS voltage supply=0.0
contact name=GND voltage supply=0.0

Define constants

set T 300
set k 1.38066e-23
set q 1.619e-19
set Vt [expr {$k*$T/$q}]
set ni 1.1e10
set esi [expr 11.8 * 8.85418e-14]
set eps [expr $esi / $q]
set Emob 350.0
set Hmob 150.0

Define Poisson's solution and continuity equations

set eqnP "$eps * grad(DevPsi) + Doping - Elec + Hole"
set eqnE "ddt(Elec) - ($Emob) * $Vt * sgrad(Elec, DevPsi/$Vt)"
set eqnH "ddt(Hole) - ($Hmob) * $Vt * sgrad(Hole, -DevPsi/$Vt)"
pdbSetDouble Si DevPsi DampValue $Vt
pdbSetString Si DevPsi Equation $eqnP
pdbSetString Si Elec Equation $eqnE
pdbSetString Si Hole Equation $eqnH 

Doping

sel z=1.0e19 name=ND
sel z=1.0e15 name=NA
sel z=ND-NA name=Doping

Define ohmic contact equations

proc ohmic.contact {Contact} {
set vt 0.02558357
set ni 1.1e10
pdbSetBoolean $Contact Elec Flux 1
pdbSetBoolean $Contact Hole Flux 1
pdbSetBoolean $Contact DevPsi Flux 1
pdbSetBoolean $Contact Elec Fixed 1
pdbSetBoolean $Contact Hole Fixed 1
pdbSetBoolean $Contact DevPsi Fixed 1
pdbSetDouble $Contact Elec Flux.Scale 1.619e-19
pdbSetDouble $Contact Hole Flux.Scale 1.619e-19
pdbSetString $Contact DevPsi Equation "ND - NA - Elec + Hole"
pdbSetString $Contact Elec Equation "DevPsi - $vt*log((Elec)/$ni) -$Contact"
pdbSetString $Contact Hole Equation "DevPsi + $vt*log((Hole)/$ni) -$Contact"
}
ohmic.contact VSS
ohmic.contact GND

Initial guess procedure, assumes charge neutrality

proc InitialGuess {Doping} {
	sel z= {(Doping>0.0)  
		?  ( 0.025*log( (Doping+1.0e10) / 1.0e10))
		:  (-0.025*log(-(Doping+1.0e10) / 1.0e10))} name = DevPsi
	sel z=1.0e10*exp(DevPsi/0.025) name=Elec
	sel z=1.0e10*exp(-DevPsi/0.025) name=Hole
} 
InitialGuess Doping

Run DC simulation and plot the current output vs. the source voltage

set Win [CreateGraphWindow]
set bias 0.0
for {set bias 0.0} {$bias < 1.01} {set bias [expr $bias+0.1]} {
	contact name=VSS supply = $bias
	device
	set cur [expr abs([contact name=VSS sol=Elec flux] - [contact name=VSS sol=Hole flux])]
	AddtoLine $Win I $bias $cur
}

Notes

This deck was successfully run by Daniel on 9/15/08 using TEC ~flooxs/linux64