Resistor example (1D): Difference between revisions

From Flooxs
Jump to navigation Jump to search
No edit summary
 
(13 intermediate revisions by one other user not shown)
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 =
== New Concepts ==
* Creating a structure (i.e. grid) with 1 material
* Creating a structure (i.e. grid) with 1 material
* Defining the 3 basic device solution variables
* Declaring the 3 basic device solution variables
* Defining tcl variables (set)
* Declaring and using tcl variables (set, expr, $), and tcl procedures
* Math in tcl (expr)
* Using a constant dopant profile
* Using a constant ionized dopant profile
* Storing "Equation" strings in the parameter database (pdb)
* Storing "Equation" strings in the parameter database (pdb)
* The importance of initial conditions, guesses, and solves
* Initial conditions, guesses, and solves
* "Ramping," i.e. consecutive DC solves
* "Ramping," i.e. consecutive DC solves


= 1D Resistor Deck =
== 1D Resistor Deck ==
Create 1D struture [[Resistor example 1D - Create 1D structure explanation | explanation]]
Create 1D struture - [[Resistor example 1D - Create 1D structure explanation | explanation]]
  line x loc=0.0 spac=0.01 tag=Top
#Grid
  line x loc=1.0 spac=0.01 tag=Bottom
  line x loc=0.0 spac=0.1 tag=Top
  line x loc=1.0 spac=0.1 tag=Bottom
  mater add name=Silicon
  mater add name=Silicon
  region Silicon xlo=Top xhi=Bottom
  region Silicon xlo=Top xhi=Bottom
  init
  init
 
Create contacts [[Resistor example 1D - Create contacts explanation | explanation]]
#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


Define solution variables [[Define solution variables explanation | explanation]]
Declare solution variables - [[Declare solution variables explanation | explanation]]
  DevicePackage
  DevicePackage
  solution add name=DevPsi pde solve negative damp
  solution add name=DevPsi pde solve negative damp
Line 29: Line 29:
  solution add name=Hole  pde solve !negative
  solution add name=Hole  pde solve !negative


Define constants [[Resistor example 1D - Define constants explanation | explanation]]
Define constants - [[Resistor example 1D - Define constants explanation | explanation]]
  set T 300.0
  set T 300.0
  set k 1.38066e-23
  set k 1.38066e-23
Line 41: Line 41:
  set small 1.0e-10
  set small 1.0e-10


Ionized dopant profile [[Resistor example 1D - Ionized dopant profile explanation | explanation]]
Ionized dopant profile - [[Resistor example 1D - Ionized dopant profile explanation | explanation]]
  set Nd 1.0e19
  set Nd 1.0e19
  set Na 1.0e15
  set Na 1.0e15
  set Doping [expr {$Nd-$Na}]
  set Doping [expr {$Nd-$Na}]


 
Bulk Equations - [[Resistor example 1D - Bulk Equations explanation | explanation]]
#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 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)"
#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
  pdbSetDouble Silicon DevPsi DampValue $Vt
  pdbSetString Silicon DevPsi Equation $eqnP
  pdbSetString Silicon DevPsi Equation $eqnP
Line 65: Line 55:
  pdbSetString Silicon Hole  Equation $eqnH  
  pdbSetString Silicon Hole  Equation $eqnH  


Ohmic contact equations using a procedure [[Resistor example 1D - Ohmic contact procedure explanation | explanation]]
Contact Equations - [[Resistor example 1D - Ohmic contact procedure explanation | explanation]]
  proc OhmicContact {Contact} {
  proc OhmicContact {Contact} {
    #set vt 0.02558357
    #set ni 1.1e10
     global Vt ni Nd Na
     global Vt ni Nd Na
     pdbSetBoolean $Contact Elec Flux 1
     pdbSetBoolean $Contact Elec Flux 1
Line 78: Line 66:
     pdbSetDouble $Contact Elec Flux.Scale 1.619e-19
     pdbSetDouble $Contact Elec Flux.Scale 1.619e-19
     pdbSetDouble $Contact Hole 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 DevPsi Equation "$Nd - $Na - Elec + Hole"
     pdbSetString $Contact Elec Equation "DevPsi - $Vt*log((Elec)/$ni) -$Contact"
     pdbSetString $Contact Elec Equation "DevPsi - $Vt*log((Elec)/$ni) -$Contact"
Line 86: Line 73:
  OhmicContact GND
  OhmicContact GND


Initial conditions [[Resistor example 1D - Initial conditions explanation | explanation]]
Initial Conditions - [[Resistor example 1D - Initial conditions explanation | 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
  #Bias Voltage on the Contacts
  contact name=VSS voltage supply=0.0
  contact name=VSS voltage supply=0.0
  contact name=GND voltage supply=0.0
  contact name=GND voltage supply=0.0
#Initial Guess at Zero Bias
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
#DC Solve at Zero Bias
device


 
DC solve / plot I-V as output - [[Resistor example 1D - DC solve explanation | explanation]]
DC solve / plot Id-Vg as output [[Resistor example 1D - DC solve explanation | explanation]]
  window
  set Win [CreateGraphWindow]
  set bias 0.0
  set bias 0.0
  for {set bias 0.0} {$bias < 1.01} {set bias [expr $bias+0.1]} {
  for {set bias 0.0} {$bias < 1.01} {set bias [expr $bias+0.1]} {
Line 114: Line 93:
  device
  device
  set cur [expr abs([contact name=VSS sol=Elec flux] - [contact name=VSS sol=Hole flux])]
  set cur [expr abs([contact name=VSS sol=Elec flux] - [contact name=VSS sol=Hole flux])]
  AddtoLine $Win I $bias $cur
  chart graph=IV curve=IV xval=$bias yval=$cur
  }
  }
== Full Deck Without Explanations ==
Copy-paste [[Resistor example 1D - full deck | this entire deck]] into a file (for example, 1dres.tcl) to make running it easy. Use the [[Startup Script | startup script]] to alias your paths to the floods executable. Then, on the BASH and then flooxs command line type:
$ floods
flooxs> source 1dres.tcl
== Exercises ==
* This was an n-type resistor. Now make a p-type resistor.
* Read the [[Plotting Examples - new short version | plotting examples section]]. Use the plot.1d method to plot the electron and hole profiles on the same plot (Elec vs x and Hole vs x). Then use the [CreateGraphWindow] method to do the same thing.
* The [[PN diode example (1D) | 1D PN diode]] is next


== Notes ==
== Notes ==
This deck was successfully run by Nicole on 10/26/10 using TEC ~flooxs/linux64
This deck was successfully run by Nicole on 10/26/10 using TEC ~flooxs/linux64

Latest revision as of 14:19, 12 March 2019

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
  • Declaring the 3 basic device solution variables
  • Declaring and using tcl variables (set, expr, $), and tcl procedures
  • Using a constant dopant profile
  • Storing "Equation" strings in the parameter database (pdb)
  • Initial conditions, guesses, and solves
  • "Ramping," i.e. consecutive DC solves

1D Resistor Deck

Create 1D struture - explanation

#Grid
line x loc=0.0 spac=0.1 tag=Top
line x loc=1.0 spac=0.1 tag=Bottom
mater add name=Silicon
region Silicon xlo=Top xhi=Bottom
init

#Contacts
contact name=VSS Silicon xlo=-0.1 xhi=0.1 add
contact name=GND Silicon xlo=0.9  xhi=1.1 add

Declare 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}]

Bulk 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)"
pdbSetDouble Silicon DevPsi DampValue $Vt
pdbSetString Silicon DevPsi Equation $eqnP
pdbSetString Silicon Elec   Equation $eqnE
pdbSetString Silicon Hole   Equation $eqnH 

Contact Equations - explanation

proc OhmicContact {Contact} {
    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 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

#Bias Voltage on the Contacts
contact name=VSS voltage supply=0.0
contact name=GND voltage supply=0.0

#Initial Guess at Zero Bias
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

#DC Solve at Zero Bias
device

DC solve / plot I-V as output - explanation

window
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])]
	chart graph=IV curve=IV xval=$bias yval=$cur
}

Full Deck Without Explanations

Copy-paste this entire deck into a file (for example, 1dres.tcl) to make running it easy. Use the startup script to alias your paths to the floods executable. Then, on the BASH and then flooxs command line type:

$ floods
flooxs> source 1dres.tcl

Exercises

  • This was an n-type resistor. Now make a p-type resistor.
  • Read the plotting examples section. Use the plot.1d method to plot the electron and hole profiles on the same plot (Elec vs x and Hole vs x). Then use the [CreateGraphWindow] method to do the same thing.
  • The 1D PN diode is next

Notes

This deck was successfully run by Nicole on 10/26/10 using TEC ~flooxs/linux64