Resistor example (1D): Difference between revisions

From Flooxs
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)]] and the [[Resistor example (2D)]].
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


Define solution variables [[Define solution variables explanation | explanation]]
= 1D Resistor Deck =
DevicePackage
Create 1D struture [[Resistor example 1D - Create 1D structure explanation | explanation]]
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=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 silicon xlo=Top xhi=Bottom
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 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
  contact name=VSS voltage supply=0.0
 
  contact name=GND voltage supply=0.0
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


Define Poisson's solution and continuity equations
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)"
pdbSetDouble Si DevPsi DampValue $Vt
pdbSetString Si DevPsi Equation $eqnP
pdbSetString Si Elec Equation $eqnE
pdbSetString Si Hole Equation $eqnH


Doping profile
#set eqnP "$eps * grad(DevPsi) + Doping - Elec + Hole"
  sel z=1.0e19 name=ND
  #set eqnE "ddt(Elec) - ($Emob) * $Vt * sgrad(Elec, DevPsi/$Vt)"
  sel z=1.0e15 name=NA
  #set eqnH "ddt(Hole) - ($Hmob) * $Vt * sgrad(Hole, -DevPsi/$Vt)"
sel z=ND-NA name=Doping


Define ohmic contact equations
pdbSetDouble Silicon DevPsi DampValue $Vt
  proc ohmic.contact {Contact} {
pdbSetString Silicon DevPsi Equation $eqnP
set vt 0.02558357
pdbSetString Silicon Elec  Equation $eqnE
set ni 1.1e10
pdbSetString Silicon Hole  Equation $eqnH
pdbSetBoolean $Contact Elec Flux 1
 
pdbSetBoolean $Contact Hole Flux 1
Ohmic contact equations using a procedure [[Resistor example 1D - Ohmic contact procedure explanation | explanation]]
pdbSetBoolean $Contact DevPsi Flux 1
  proc OhmicContact {Contact} {
pdbSetBoolean $Contact Elec Fixed 1
    #set vt 0.02558357
pdbSetBoolean $Contact Hole Fixed 1
    #set ni 1.1e10
pdbSetBoolean $Contact DevPsi Fixed 1
    global Vt ni Nd Na
pdbSetDouble $Contact Elec Flux.Scale 1.619e-19
    pdbSetBoolean $Contact Elec Flux 1
pdbSetDouble $Contact Hole Flux.Scale 1.619e-19
    pdbSetBoolean $Contact Hole Flux 1
pdbSetString $Contact DevPsi Equation "ND - NA - Elec + Hole"
    pdbSetBoolean $Contact DevPsi Flux 1
pdbSetString $Contact Elec Equation "DevPsi - $vt*log((Elec)/$ni) -$Contact"
    pdbSetBoolean $Contact Elec Fixed 1
pdbSetString $Contact Hole Equation "DevPsi + $vt*log((Hole)/$ni) -$Contact"
    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"
  }
  }
  ohmic.contact VSS
  OhmicContact VSS
  ohmic.contact GND
  OhmicContact GND


Initial guess procedure, assumes charge neutrality
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
 


Run DC simulation and plot the current output vs. the source voltage
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 Daniel on 9/15/08 using TEC ~flooxs/linux64
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