Resistor example (1D): Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
This example shows how to create and simulate a simple 1D n-type resistor. After creating a 1D structure, we plot the output current as an external bias is applied. Once you run and understand this example, you should study the [[PN Diode example (1D | This example shows how to create and simulate a simple 1D n-type resistor. After creating a 1D structure, we plot the output current as an external bias is applied. Once you run and understand this example, you should study the [[PN Diode example (1D)]]. | ||
= New Concepts = | |||
* Creating a structure (i.e. grid) with 1 material | |||
* Defining the 3 basic device solution variables | |||
* Defining tcl variables (set) | |||
* Math in tcl (expr) | |||
* Using a constant ionized dopant profile | |||
* Storing "Equation" strings in the parameter database (pdb) | |||
* The importance of initial conditions, guesses, and solves | |||
* "Ramping," i.e. consecutive DC solves | |||
= 1D Resistor Deck = | |||
Create 1D struture [[Resistor example 1D - Create 1D structure explanation | explanation]] | |||
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 | ||
region | mater add name=Silicon | ||
region Silicon xlo=Top xhi=Bottom | |||
init | init | ||
Create contacts | Create contacts [[Resistor example 1D - Create contacts explanation | explanation]] | ||
contact name=VSS | contact name=VSS Silicon xlo=-0.1 xhi=0.1 add | ||
contact name=GND | contact name=GND Silicon xlo=0.9 xhi=1.1 add | ||
Define solution variables [[Define solution variables explanation | explanation]] | |||
DevicePackage | |||
solution add name=DevPsi pde solve negative damp | |||
solution add name=Elec pde solve !negative | |||
solution add name=Hole pde solve !negative | |||
Define constants | Define constants [[Resistor example 1D - Define constants explanation | explanation]] | ||
set T 300 | set T 300.0 | ||
set k 1.38066e-23 | set k 1.38066e-23 | ||
set q 1.619e-19 | set q 1.619e-19 | ||
Line 31: | Line 39: | ||
set Emob 350.0 | set Emob 350.0 | ||
set Hmob 150.0 | set Hmob 150.0 | ||
set small 1.0e-10 | |||
Ionized dopant profile [[Resistor example 1D - Ionized dopant profile explanation | explanation]] | |||
set eqnP "$eps * grad(DevPsi) + Doping - Elec + Hole" | set Nd 1.0e19 | ||
set Na 1.0e15 | |||
set Doping [expr {$Nd-$Na}] | |||
#sel z=1.0e19 name=ND | |||
#sel z=1.0e15 name=NA | |||
#sel z=ND-NA name=Doping | |||
Bulk Equations (Poisson, Electron/Hole Continuity Equations) [[Resistor example 1D - Bulk Equations explanation | explanation]] | |||
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)" | ||
Doping | #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 Silicon DevPsi DampValue $Vt | |||
proc | pdbSetString Silicon DevPsi Equation $eqnP | ||
pdbSetString Silicon Elec Equation $eqnE | |||
pdbSetString Silicon Hole Equation $eqnH | |||
Ohmic contact equations using a procedure [[Resistor example 1D - Ohmic contact procedure explanation | explanation]] | |||
proc OhmicContact {Contact} { | |||
#set vt 0.02558357 | |||
#set ni 1.1e10 | |||
global Vt ni Nd Na | |||
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 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" | |||
} | } | ||
OhmicContact VSS | |||
OhmicContact GND | |||
Initial | Initial conditions [[Resistor example 1D - Initial conditions explanation | explanation]] | ||
#Initial Guess of DevPsi, Elec and Hole | |||
proc InitialGuess {Doping} { | proc InitialGuess {Doping} { | ||
sel z= {(Doping>0.0) | sel z= {(Doping>0.0) | ||
Line 73: | Line 96: | ||
sel z=1.0e10*exp(-DevPsi/0.025) name=Hole | sel z=1.0e10*exp(-DevPsi/0.025) name=Hole | ||
} | } | ||
InitialGuess Doping | #InitialGuess Doping | ||
sel z=(-$Vt*log(-($Doping+$small)/$ni)) name=DevPsi | |||
sel z=$ni*exp(DevPsi/0.025) name=Elec | |||
sel z=$ni*exp(-DevPsi/0.025) name=Hole | |||
#Bias Voltage on the Contacts | |||
contact name=VSS voltage supply=0.0 | |||
contact name=GND voltage supply=0.0 | |||
DC solve / plot Id-Vg as output [[Resistor example 1D - DC solve explanation | explanation]] | |||
set Win [CreateGraphWindow] | set Win [CreateGraphWindow] | ||
set bias 0.0 | set bias 0.0 | ||
Line 86: | Line 118: | ||
== Notes == | == Notes == | ||
This deck was successfully run by | This deck was successfully run by Nicole on 10/26/10 using TEC ~flooxs/linux64 |
Revision as of 17:56, 26 October 2010
This example shows how to create and simulate a simple 1D n-type resistor. After creating a 1D structure, we plot the output current as an external bias is applied. Once you run and understand this example, you should study the PN Diode example (1D).
New Concepts
- Creating a structure (i.e. grid) with 1 material
- Defining the 3 basic device solution variables
- Defining tcl variables (set)
- Math in tcl (expr)
- Using a constant ionized dopant profile
- Storing "Equation" strings in the parameter database (pdb)
- The importance of initial conditions, guesses, and solves
- "Ramping," i.e. consecutive DC solves
1D Resistor Deck
Create 1D struture explanation
line x loc=0.0 spac=0.01 tag=Top line x loc=1.0 spac=0.01 tag=Bottom mater add name=Silicon region Silicon xlo=Top xhi=Bottom init
Create contacts explanation
contact name=VSS Silicon xlo=-0.1 xhi=0.1 add contact name=GND Silicon xlo=0.9 xhi=1.1 add
Define solution variables explanation
DevicePackage solution add name=DevPsi pde solve negative damp solution add name=Elec pde solve !negative solution add name=Hole pde solve !negative
Define constants explanation
set T 300.0 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 set small 1.0e-10
Ionized dopant profile explanation
set Nd 1.0e19 set Na 1.0e15 set Doping [expr {$Nd-$Na}]
#sel z=1.0e19 name=ND #sel z=1.0e15 name=NA #sel z=ND-NA name=Doping
Bulk Equations (Poisson, Electron/Hole Continuity Equations) explanation
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)"
#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 Silicon DevPsi DampValue $Vt pdbSetString Silicon DevPsi Equation $eqnP pdbSetString Silicon Elec Equation $eqnE pdbSetString Silicon Hole Equation $eqnH
Ohmic contact equations using a procedure explanation
proc OhmicContact {Contact} { #set vt 0.02558357 #set ni 1.1e10 global Vt ni Nd Na 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 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" } OhmicContact VSS OhmicContact GND
Initial conditions explanation
#Initial Guess of DevPsi, Elec and Hole 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
sel z=(-$Vt*log(-($Doping+$small)/$ni)) name=DevPsi sel z=$ni*exp(DevPsi/0.025) name=Elec sel z=$ni*exp(-DevPsi/0.025) name=Hole
#Bias Voltage on the Contacts contact name=VSS voltage supply=0.0 contact name=GND voltage supply=0.0
DC solve / plot Id-Vg as output explanation
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 Nicole on 10/26/10 using TEC ~flooxs/linux64