Process Tutorial: Difference between revisions
(Created page with "=Process Tutorial= FLOOPS is the subset of FLOOXS that deals with process modeling of electronic devices. This page serves as an introduction to the commands and concepts used ...") |
|||
(35 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
FLOOPS is the subset of FLOOXS that deals with process modeling of electronic devices. This page serves as an introduction to the commands and concepts used by FLOODS to model electronic device fabrication. The goal of process modeling is to use physics informed models to predict how different process parameters change the structure of electronic devices | |||
. | |||
FLOOPS | ==Semiconductor Process Tutorial== | ||
Each step in the device fabrication process is modeled by a FLOOPS command that uses the LevelSet method to compute the structure. Once the structure is computed a new mesh is generated and another process step can be applied to the mesh. Each command will be explained and an example will be given. | |||
== | ===Base Layer and Gas=== | ||
In order to preform any device fabrication we need to start with a base layer. This base layer can be a silicon wafer, oxide, or some other material that thin films can be processed on. To begin modeling another material called Gas is needed. Gas is a region of the mesh that allows FLOOPS to keep track of some region outside the base layer. To create these two materials run the following commands: | |||
line x loc=-1.5 spac=0.1 tag=GasTop | |||
line x loc=0.0 spac=0.1 tag=Top | |||
line x loc=1.0 spac=0.1 tag=Bottom | |||
line y loc=-2.0 spac=0.1 tag=Left | |||
line y loc=2.0 spac=0.1 tag=Right | |||
region Gas xlo=GasTop xhi=Top ylo=Left yhi=Right | |||
region Silicon xlo=Top xhi=Bottom ylo=Left yhi=Right | |||
init | |||
window row=1 col=2 width=800 height=800 | |||
plot2d grid gas | |||
The line commands define spatial locations that need to be in increasing order in each xyz dimension. The region command creates a box region of the specified material in the line tags. Init generates the mesh based on the specified regions. | |||
To plot the grid we use the window command to open up a window with 2 plot columns of with 800 pixels and height 800 pixels. The two columns will be useful later. To actually plot the grid the 'plot2d grid gas' command plots the grid and the gas. You should get the following result: | |||
[[File:initial.png|center]] | |||
===Deposit=== | |||
The next step we are going to deposit an oxide isotopically. Using the -help command that works on all commands, we see the deposit command has the following options: | |||
deposit -help | |||
Result of above command: | |||
Deposit | |||
Length Scale Default is microns which can be changed with the option command | |||
Name Type Default Information | |||
mater Switch material specification | |||
rate Float 1.000000e-01 isotropic deposition rate default length scale/min | |||
time Float 1.000000e+00 isotropic deposition time min | |||
spacing Float 1.000000e-02 spacing in the level set mesh | |||
grid Int 1 grid steps in the deposition | |||
tolerance Float 1.000000e-02 grid accruacy tolerance in default length scale | |||
plot.surface Boolean 0 plot the surface step by step | |||
From the list of these options we see that to deposit a material we only need to specify the material name. However, we probably want to specify the rate and time to match our exact process. For this example we will run the following command after our Base Layer and Gas example. | |||
deposit oxide time= 5.0 spacing= 2.0e-2 | |||
plot2d grid gas | |||
This deposits an oxide that is about 500nm thick. The spacing command is something you can play around with. It is a command that defines the spacing of the LevelSet grid and has the following tradeoff, making it larger decreases computation time but makes the computation less accurate. The results of this deposition: | |||
[[File:deposit.png|center]] | |||
===Etch=== | |||
To perform an etch we need to define a mask before we etch. A mask needs a name, to know if it is positive or negative, and an exposed region defined by left and right. A negative mask will remove what is between the markers while a positive mask will remove everything but what is in between. By default the mask command creates a positive mask. To make a negative mask specify the word negative. The following commands set the mask, etch, and plot. | |||
mask name= mask1 negative left=-1.500 right= -0.500 | |||
etch oxide aniso mask= mask1 time=6.5 spacing= 3e-2 | |||
plot2d grid gas | |||
The results of the tutorial so far plus the three commands are as follows: | |||
[[File:etch.png|center]] | |||
After over etching for a bit, we were able to etch a hole through the oxide to the silicon base layer. Now in a typical fabrication process, we would probably dope the wafer at this point. To illustrate this, we will use the implant command. | |||
===Implant=== | |||
The implant command has many capabilities so it is best if we start by looking at the options given by the -help command. | |||
implant -help | |||
Results of above command: | |||
mater Switch material specification | |||
species String species name | |||
file String data file location | |||
min.conc Float 1.000000e+10 minimum concentration to use | |||
name String Data Field name | |||
mod Switch what model this file is used for | |||
pearson Boolean | |||
gaussian Boolean | |||
tasch Boolean | |||
dualpearson Boolean | |||
adapt Boolean 1 adapt the mesh to fit the implant | |||
energy Float 0.000000e+00 energy in keV | |||
dose Float 0.000000e+00 dose in cm-2 | |||
angle Float 0.000000e+00 wafer tilt to beam | |||
tilt Float 8.000000e+00 wafer tilt to beam | |||
rotation Float 3.000000e+01 wafer rotation | |||
sliceang Float 0.000000e+00 2d slice angle | |||
mult_rot Int 1 rotate the wafer | |||
dop Switch species | |||
boron Boolean | |||
arsenic Boolean | |||
phosphorus Boolean | |||
bf2 Boolean | |||
antimony Boolean | |||
mask String mask for the implant | |||
By default FLOOPS detects what materials are present and has values preloaded for the dopants displayed above. The mask becomes unnecessary in our case. Only the dopant, dose, and energy need to be given for most calculations. Let's now run the implant with typical values and see what the results are. | |||
implant boron dose=1.0e15 energy=20 | |||
sel z= Boron*material(Silicon) | |||
plot2d levels=100 graph= Boron | |||
The reulsts of the implant can be seen with the sel z= command. This command creates a string buffer that is plotted using the plot2d command. The tag levels=100 specifies the number of color levels used in the tow dimensional plot. The results are as follows: | |||
[[File:implant.png|center]] | |||
===Diffusion=== | |||
Diffusion simulation is accomplished by solving Fick's law diffusion using the partial differential equation solver available in FLOOXS. Thus far, the user has been exposed to FLOOXS as an extension of the TCL programming language. Performing Fick's law Diffusion requires the use of the alagator scripting language to solve partial differential equations. | |||
First, the diffusion species must be defined as an alagator partial differential equation solution variable with the solution command. We will use Boron as an example. | |||
solution add name=Boron pde solve !negative | |||
Second, the governing equation can be written in the alagator scripting language. For Fick's law diffusion, two special operators are needed: ddt() for a single time derivative and grad() for the Laplacian operator (two spatial derivatives are implied). All alagator pde equations are written implicitly equal to zero. Thus the Newton-Raphson method is used to find the solution by finding the roots of the equations. Units are cgs units. The diffusion constant of 1e-17 has units cm^2/s. | |||
pdbSet Si Boron Equation "ddt(Boron) - 1e-17*grad(Boron)" | |||
Lastly, the diffusion simulation must be run on the finite element grid. This is accomplished with the diffuse command. Two arguments are given to this command, time and movie. Time is the amount of time to run the diffusion simulation in seconds. Movie is a TCL code block that will be run every time step and is primarily used for plotting. The movie command is unnecessary for those interested in seeing the results of diffusion after a fixed time. The data after each diffuse step is stored as a field under the solution variable name. Any FLOOXS post-processing techniques can be used on the field data. | |||
diffuse time=10 movie = { | |||
sel z=Time | |||
set current_time [interpolate silicon x.val=0.1] | |||
... | |||
} | |||
[[File:diffuse.png|center]] | |||
===Sputter=== | |||
Metal can be sputtered with the sputter command. This command accounts for the visibility of each surface node to a hypothetical sputter target. | |||
sputter metal time=6 | |||
[[File:sputter.png|center]] |
Latest revision as of 18:32, 1 June 2023
FLOOPS is the subset of FLOOXS that deals with process modeling of electronic devices. This page serves as an introduction to the commands and concepts used by FLOODS to model electronic device fabrication. The goal of process modeling is to use physics informed models to predict how different process parameters change the structure of electronic devices .
Semiconductor Process Tutorial
Each step in the device fabrication process is modeled by a FLOOPS command that uses the LevelSet method to compute the structure. Once the structure is computed a new mesh is generated and another process step can be applied to the mesh. Each command will be explained and an example will be given.
Base Layer and Gas
In order to preform any device fabrication we need to start with a base layer. This base layer can be a silicon wafer, oxide, or some other material that thin films can be processed on. To begin modeling another material called Gas is needed. Gas is a region of the mesh that allows FLOOPS to keep track of some region outside the base layer. To create these two materials run the following commands:
line x loc=-1.5 spac=0.1 tag=GasTop line x loc=0.0 spac=0.1 tag=Top line x loc=1.0 spac=0.1 tag=Bottom line y loc=-2.0 spac=0.1 tag=Left line y loc=2.0 spac=0.1 tag=Right region Gas xlo=GasTop xhi=Top ylo=Left yhi=Right region Silicon xlo=Top xhi=Bottom ylo=Left yhi=Right init window row=1 col=2 width=800 height=800 plot2d grid gas
The line commands define spatial locations that need to be in increasing order in each xyz dimension. The region command creates a box region of the specified material in the line tags. Init generates the mesh based on the specified regions. To plot the grid we use the window command to open up a window with 2 plot columns of with 800 pixels and height 800 pixels. The two columns will be useful later. To actually plot the grid the 'plot2d grid gas' command plots the grid and the gas. You should get the following result:

Deposit
The next step we are going to deposit an oxide isotopically. Using the -help command that works on all commands, we see the deposit command has the following options:
deposit -help
Result of above command:
Deposit Length Scale Default is microns which can be changed with the option command Name Type Default Information mater Switch material specification rate Float 1.000000e-01 isotropic deposition rate default length scale/min time Float 1.000000e+00 isotropic deposition time min spacing Float 1.000000e-02 spacing in the level set mesh grid Int 1 grid steps in the deposition tolerance Float 1.000000e-02 grid accruacy tolerance in default length scale plot.surface Boolean 0 plot the surface step by step
From the list of these options we see that to deposit a material we only need to specify the material name. However, we probably want to specify the rate and time to match our exact process. For this example we will run the following command after our Base Layer and Gas example.
deposit oxide time= 5.0 spacing= 2.0e-2 plot2d grid gas
This deposits an oxide that is about 500nm thick. The spacing command is something you can play around with. It is a command that defines the spacing of the LevelSet grid and has the following tradeoff, making it larger decreases computation time but makes the computation less accurate. The results of this deposition:

Etch
To perform an etch we need to define a mask before we etch. A mask needs a name, to know if it is positive or negative, and an exposed region defined by left and right. A negative mask will remove what is between the markers while a positive mask will remove everything but what is in between. By default the mask command creates a positive mask. To make a negative mask specify the word negative. The following commands set the mask, etch, and plot.
mask name= mask1 negative left=-1.500 right= -0.500 etch oxide aniso mask= mask1 time=6.5 spacing= 3e-2 plot2d grid gas
The results of the tutorial so far plus the three commands are as follows:

After over etching for a bit, we were able to etch a hole through the oxide to the silicon base layer. Now in a typical fabrication process, we would probably dope the wafer at this point. To illustrate this, we will use the implant command.
Implant
The implant command has many capabilities so it is best if we start by looking at the options given by the -help command.
implant -help
Results of above command:
mater Switch material specification species String species name file String data file location min.conc Float 1.000000e+10 minimum concentration to use name String Data Field name mod Switch what model this file is used for pearson Boolean gaussian Boolean tasch Boolean dualpearson Boolean adapt Boolean 1 adapt the mesh to fit the implant energy Float 0.000000e+00 energy in keV dose Float 0.000000e+00 dose in cm-2 angle Float 0.000000e+00 wafer tilt to beam tilt Float 8.000000e+00 wafer tilt to beam rotation Float 3.000000e+01 wafer rotation sliceang Float 0.000000e+00 2d slice angle mult_rot Int 1 rotate the wafer dop Switch species boron Boolean arsenic Boolean phosphorus Boolean bf2 Boolean antimony Boolean mask String mask for the implant
By default FLOOPS detects what materials are present and has values preloaded for the dopants displayed above. The mask becomes unnecessary in our case. Only the dopant, dose, and energy need to be given for most calculations. Let's now run the implant with typical values and see what the results are.
implant boron dose=1.0e15 energy=20 sel z= Boron*material(Silicon) plot2d levels=100 graph= Boron
The reulsts of the implant can be seen with the sel z= command. This command creates a string buffer that is plotted using the plot2d command. The tag levels=100 specifies the number of color levels used in the tow dimensional plot. The results are as follows:

Diffusion
Diffusion simulation is accomplished by solving Fick's law diffusion using the partial differential equation solver available in FLOOXS. Thus far, the user has been exposed to FLOOXS as an extension of the TCL programming language. Performing Fick's law Diffusion requires the use of the alagator scripting language to solve partial differential equations.
First, the diffusion species must be defined as an alagator partial differential equation solution variable with the solution command. We will use Boron as an example.
solution add name=Boron pde solve !negative
Second, the governing equation can be written in the alagator scripting language. For Fick's law diffusion, two special operators are needed: ddt() for a single time derivative and grad() for the Laplacian operator (two spatial derivatives are implied). All alagator pde equations are written implicitly equal to zero. Thus the Newton-Raphson method is used to find the solution by finding the roots of the equations. Units are cgs units. The diffusion constant of 1e-17 has units cm^2/s.
pdbSet Si Boron Equation "ddt(Boron) - 1e-17*grad(Boron)"
Lastly, the diffusion simulation must be run on the finite element grid. This is accomplished with the diffuse command. Two arguments are given to this command, time and movie. Time is the amount of time to run the diffusion simulation in seconds. Movie is a TCL code block that will be run every time step and is primarily used for plotting. The movie command is unnecessary for those interested in seeing the results of diffusion after a fixed time. The data after each diffuse step is stored as a field under the solution variable name. Any FLOOXS post-processing techniques can be used on the field data.
diffuse time=10 movie = { sel z=Time set current_time [interpolate silicon x.val=0.1] ... }

Sputter
Metal can be sputtered with the sputter command. This command accounts for the visibility of each surface node to a hypothetical sputter target.
sputter metal time=6
