Resistor example (1D): Difference between revisions
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