The first stages of deposition of CVD Al on TiN:
A simple atomistic simulation.
Presented by: Michal Avinun
Materials Engineering Department
Technion – Israel Institute of Technology
Haifa 32000, Israel
This Fortran program uses Pgplot graphics to present cross section images during the first stages of deposition of CVD Al on TiN, as an attempt to simulate some of the phenomena in my research about nucleation and growth of CVD Al from DMAH decomposition on different types of TiN [2,3]. I used the ``Minerva1'' computer to run this simulation.
Chemical Vapor Deposition is one of the current methods to deposit a thin film, which follows complex texture (conformal deposition), enables deposition at relatively low process temperature, of various materials. 
In this process the substrate is heated to a certain process temperature, a gas precursor, sometimes carried by a carrier gas, is insert to the chamber. The pressure is kept constant, (usually it is a sub-atmospheric pressure, but not a high vacuum pressure).
The precursor molecule is a complex molecule, which can decompose in certain conditions. One of the byproducts is the desired material for depositing the thin film. In most applications it is desired that this decomposition occurs only on the surface, and the resultant thin film contains only one byproduct, with minor presence as possible of the other byproducts. The microstructure of the thin film is very sensitive to the deposition parameters, and the substrate chemical and structural properties.
Since this CVD process is a very complex one, which is affected by many parameters (as the reaction control mechanism and kinetics, the chemical potentials, the total and partial pressure of the different components, the temperature of the substrate and the precursor, the surface properties, the pumping system efficiency, and more… we have tried to concentrate only on some basic parameters, and simplify the whole process.
We assumed flat surface of TiN single grain. The precursor molecule assumed to be in the same size and properties as the Al product, and the other byproducts are not taking into account at all. One molecule like this is released from the upper line of the picture, and moves in two-dimensional random walk until it meets a ``stable '' surface or enters a dead end position. The random walk step was calculated according to the mean free path of the precursor according to its size and the deposition parameters.
After a certain steps of the last precursor molecule, which was released, all the others “Al atoms” can diffuse in the gas or on the surface. The probability of these events is calculated as a function of the type and number of the surrounding atoms.
The main program saves a file with the Al-atoms positions every some steps, and another program plots this images.
List of files, & their backup positions:
List of Subroutines:
Paint- (center_x, center_y, index, atom_size, c, color, center_index)
Paint paints a square box with length size of “atom_size” with color “c” in the “color” array, that its center position has the coordinates of “center_x” and “center_y” in the array. The colors are representing the type of atom (1 = Al , 2 = TiN, and 3 = empty). It also paints the same box in the “center_index” array with the index of this atom. (TiN atomes have indexes from 1 through to No_TiN and Al atoms have indexes from No_TiN + 1 through to No_TiN + No_Al)
Startpoint -(xn, sp, pict_size_x, Al_size)
This subroutine chooses randomly the x position of the next precursor molecule that is released from the top of the image. “sp” is the resultant X position of this atom, while the real randomizer function “urand” uses “xn” as the integer seed.
gas_walk(center_x, center_y, mflag, color)
This subroutine is responsible for the two-dimensional gas diffusion of the precursor. It gets the current position of this molecule (“center_x” and “center_y”), chooses randomly the direction (in a gravitation field with preferential propagation down), and tries to perform a step in this direction if the way is free. The step is equal to the mean free path of the precursor in the deposition conditions. p*q is the probability of choosing movement down, p*(1-q) for movement up, and (1-p)*r for movement left.
IsFreePlace(center_y, center_x, d, free, step, color)
”free” is a flag. It is equal 0 if the way is free to perform a movement in “step” pixels towards “d” direction. (d=0 to check only the starting place of the precursor, d=1 movement up, d=2 down, d=3 right, d=4 left)
The values of pict_size_x, pict_size_y, Al_size should be updated here if someone changes them in the main program.
The subroutine CheckArea is used to find whether the area of the way through to the destination, and the destination itself is free. IsFreePlace sends the lower and upper values of x & y coordinates that should be checked (FormX, ToX, FromY, ToY) and gets back the value of “free”.
If the way is not free, free can get two values: 1 for unstable position and 2 for stable position. A stable position was defined as a position that more than 4 underlying neighboring pixels are occupied. The subroutine check_edge calculates this. Only in the case of propagation down, if the way is blocked in the middle, CheckArea returne the first occupied Y as “OcY” and IsFreePlace calculates the new step, that is free.
CheckArea(FormX, ToX, FromY, ToY, color, pict_size_x, pict_size_y, OcY, free)
The subroutine CheckArea is used to find whether the area of the way through to the destination, and the destination itself is free. IsFreePlace sends the lower and upper values of x & y coordinates that should be checked (FormX, ToX, FromY, ToY) and gets back the value of “free”. Only in the case of propagation down, if the way is blocked in the middle, CheckArea returne the first occupied Y as “OcY”.
The edge conditions of the x axis of the image are kept to be periodical. For example, if step + center_x is bigger than pict_size_x, the atom will try to come from the other side, with low x coordinates. This is applicable by using “mod” command, in this subroutine as well as in others.
check_edge(occupied, center_x, y, color, center_index)
“occupied” is the sum of the occupied pixels under the atom, which its center is in center_x, and its bottom is in y+1.A change in the Al-Size should be updated here also.
“stico” calculates the sticking coefficient “stic” (a real number between 0 and 1) of an Al atom placed in center position of x & y , depending on the number of the occupied neighboring pixels and their type. A change in the Al-Size should be updated here also.
MoveAllAtoms(Al_count, color, center_index, pict_size_x, pict_size_y)
The subroutine chooses Al_count-1 atoms from the atoms that were already thrown, and try to move them one step. It calculates first the sticking coefficient by using stico, and then choose the direction. If the atom got low sticking coefficient, then the probabmoving down is high, and the step is fitted to mean free step in the gas, otherwise, the step would represent a surface diffusion length, and would be preferentially to the left or right. There is an opportunity here to change it to something, which is more realistic and complicated.
List of variables, & their meaning:
The main program:
integer pict_size_x, pict_size_y
The number of pixels in the image in x and y directions respectively.
integer Al_size, TiN_size, atom_size
The size of the box in pixels for the Al and “TiN” atoms. It was calculated related to the distance between (111) planes in each structure.
(The films were found to be (111) textured)
integer center_x, center_y, x_old, y_old
The x, and y positions (in pixels) of the center of the box, represents an atom, and the previous positions, respectively.
Free is a flag. It is equal 0 if the way is free to perform a movement in “step” pixels towards “d” direction If the way is blocked it returns the value of 1 for unstable position and 2 for stable position. (See subroutine IsFreePlace)
The number of precursors that were released from the top of the image untill this stage of the simulation
integer No_TiN, No_Al
The total number of TiN atoms and Al atoms that participate in the simulation.
TiN atomes have indexes from 1 through to No_TiN and Al atoms have indexes from No_TiN + 1 through to No_TiN + No_Al, according to the order of appearance.
integer sp, xn
Random numbers. sp represents the first x position of the precursor.
counts the entries to “gas_ walk”, and every fixed number of them send to “MoveAllAtoms”
mflag turns to be 1 when the last precursor can’t move anymore or got to a stable position. Then the next precursor will be released.
The image is painted with colors: The colors are representing the type of atom
(1 = Al , 2 = TiN, and 3 = empty).
The image is painted with indexes of the atoms according to their position.
The first seed number for the randomizer. It is raed from “rand2.dat” file
integer TiN_x(50), TiN_y(50)
Arrays of the coordinates of the center- position of the TiN atoms
integer Al_x(500), Al_y(500)
Arrays of the coordinates of the center- position of the Al atoms
The sticking coefficient
A randomizer function.
The program Output – an example:
Varying the parameters:
The picture size can be increased to 900. Higher values require more memory than what was available in "minerva1".
The number of Al atoms can be increased, in an image of 500x500 pixels, upto 900. If there is enough diffusion during this process (see the next paragraph) , it is possible to get some crystalline atomic layers, with this amount of Al atoms.
Changing the condition in line 96:
if (CountWalks.eq.10) then
will change the number of times that there is opportunity to move the atoms (except the current atom, which is "Al_count" ). Decreasing the number in this if statement (10) will allow more diffusion to occur, which is typical for higher temperatures, while extremely increase will give very low process temperature, which is more typical for PVD process. If we allow more diffusion to occur, it increases density and the crystallinity of the yielded Al atomic packing. Trying to move all the atoms with a Al_count-1 loop size is sufficient: it yielded the same image as was obtained when the loop was set to (Al_count-1)2 trials.
Changing the "surf_step_al" causes decrease in the density and the crystallinity of the yielded Al atomic packing, because the current version of the program does allow partial step. Therefore the larger the step, the lower the probability to perform it, and the total effect is similar the one that was described in the previous paragraph.
An attempt to examine the structure of the TiN surface was made by creating a dome shape grain. The following image is a first result of this structure, but to cover this subject more structures and conditions should be compared.
The main conclusion of this project is that even a very simple simulation, that ignores a lot of the parameters in a CVD process, can give qualitatively results, that are in good agreement with the physical expected behavior.