With TFSim (Microsoft Store)
you can simulate and visualize 3D cross sections for semiconductor and MEMS thin film and patterning processes.
You can save the cross section after each process step in bitmaps. Each layer can also be saved in the 3D STL format.
This image shows a simplified semiconductor device cross section of a FINFET device produced with TFSim.
Such cross sections are difficult to draw by hand, in particular with many films and complicated mask layers. With TFSim you automate this based on the mask layout and the process flow to build the device.
How to run TFSim
The image below shows the main window of TFSim after it is launched:
The top window will show the rendered images when running a process script and the bottom window displays a console with relevant information. The status bar on the bottom displays the GDS and process script file currently loaded.
To run a session follow these steps:
Make a working folder on your PC. For example C:\TFSim\My-first-finfet\.
Prepare a process script file and store it in the working directory. This is a text (*.txt) file with the process steps. Here the process script file that works with the above GDS file to make the cross section in the introduction:
download the example process script file
.
Prepare the GDS file with your layout. Here an example GDS layout for the FINFET device in the introduction section:
download the example GDS file
. The GDS does not need to be stored in the working folder but it’s convenient to do so.
Select Load GDS in the menu and select the GDS file that you just prepared.
Select Run Process in the menu. The program will load the process script and will run through the process steps displaying the images after every step. Possible errors in the process script are reported in the console window. In that case, edit the process script file and select ‘Run Process" again.
When the process simulation is completed, you can navigate with the arrow keys through the cross sections after each process step.
Based on the results, you can modify the process script and run the process again. You do not need to reload the GDS file.
If you’re satisfied with the results, you can save the renderings to images or 3D STL files by selecting the Save Images menu. Also, you can save some basic statistics like the film thickness and area coverage of the film stack to a simple text file.
TFSim’s output files will be stored as a newly created subfolder in the working directory with the time of creation in the subfolder name. Besides the image files, it also holds a copy of the process script file used.
The Process Script File
A process script is a text (*.txt) file with process commands you can create with any text editor. It contains a few commands with settings, followed by commands that describe the process flow to build the thin film stack. This is an example process file:
# GENERAL SETTING
set(N = 1400, angle = 25, heights = False, legend = True)
# CELL NAME IS "TOP"
gds(cell = TOP)
# CROSS SECTION LOCATION
loc(x = 0.000, y = -0.015, dx = 0.105, dy = 0.090)
# BUFFER OXIDE
dep(mat = OX, type = SIO2, t = 11, sc = 0.6, color = [0.16, 1.00, 0.16])
# SOURCE/DRAIN DEPOSITION
dep(mat = SD, type = AL, t = 55, sc = 0.3, color = [0.59, 0.59, 1.00])
# SOURCE/DRAIN PATTERNING: depth = 0
pat(mask = SD, id = 0, type = Dark, res = 0.001, taper = 89, bias = 0.0, mxdepth = None, targets = [AL])
# GATE INSULATOR DEPOSITION
dep(mat = GI, type = SIN, t = 11, sc = 0.6, color = [0.70, 0.70, 0.00])
# GATE METAL DEPOSITION
dep(mat = GM, type = AL, t = 11, sc = 0.3, color = [0.00, 0.00, 1.00])
# GATE METAL PATTERNING
pat(mask = GM, id = 3, type = Dark, res = 0.001, taper = 89, bias = 0.0, mxdepth = 15, targets = [AL])
# DEMONSTRATES A BLANKET ETCH
bla(mxdepth = None, targets = [SIN])
Here a short explanation:
Lines in the process script consist of a command name (dep, pat, etc.) followed between parentheses by named arguments with values. The arguments are seperated by kommas.
Unlike in Python, all arguments are mandatory. You do not need to give them in order, but it is
recommended you do for consistency.
Empty lines are ignored. Text following the comment symbol # are ignored and can be used for comments.
The available types for the parameter values are the BOOLEAN (True or False), INTEGER, FLOAT, and IDENTIFIER. Some parameters require a list like in Python except that lists can not be nested. For example a list is used to specify the colors of a film: color = [1.0, 1.0, 1.0]. This will specify the RGB values with each component from 0.0 to 1.0.
An IDENTIFIER is defined as in Python but it allows a leading digit. For example, the cell name in the gds command can be 0TOP. Identifiers are used to specify material names and types. E.g. ILD and SIO2. Also they’re used to specify the targets of an etch during patterning.
Unlike Python, no type conversion takes place e.g. from FLOAT to INTEGER or vice versa. This means you need to be very strict in entering the right type. A FLOAT needs to contain a decimal period. For example, “0.5”, “5.” or “-.1”. An INTEGER can not contain a decimal period.
The grammar of a process file script is as follows:
program :: = {line}
line :: = [ command ] [ comment ] NEWLINE
command :: = IDENTIFIER "(" [argument_list] ")"
argument_list :: = argument{"," argument}
argument :: = IDENTIFIER, "=", value
value :: = primitive | list
primitive :: = IDENTIFIER | INTEGER | FLOAT
list :: = "[", [ primitive, { ",", primitive } ], "]"
Below are all the available functions in the TFSim process script.
A valid process script needs to contain at least one occurrence of the set, gds, and loc functions, since these give basic settings required for the program to run a session.
The set function
This function specifies some basic settings for the simulation session.
Specifies the number of columns for the process simulation. This needs to be from 400 (fastest execution but low resolution) to 2000 (slowest execution, high resolution, and high memory use). Around 1200 already gives good results.
angle
Specifies the camera angle with respect to the horizon in degrees. Needs to be from 0 (front view) to 90 (top view). The front view will render the cross section as follows:
heights
Specifies if heights are shown. The heights are shown in Angström at regularly spaced locations in the cross section as illustrated here:
legend
Specifies if a legend with all materials present in the film stack is shown.
The gds function
This function sets the cell to take the cross section from. It needs to be a cell in the GDSII file loaded by the Load GDSII menu.
gds(cell=IDENTIFIER)
cell
Specifies the cell name. The IDENTIFIER, as will all identifiers, cannot contain spaces.
The loc function
This function sets the cross-section location in the cell specified through the gds command above. Its arguments are.
loc(x=FLOAT, y=FLOAT, dx=FLOAT, dy=FLOAT)
x
Specifies the x coordinate in um of the cross section in the GDS cell specified by the gds function above.
y
Specifies the y coordinate of the cross section in um
dx
Specifies the horizontal width of the cross section in um
dy
Specifies the horizontal depth of the cross section in um. This needs to less or equal to the width dx. If not, dy will be truncated to dx with a warning.
Specifies the name of this layer. The name is used as label of the layer in the image output files. The name can not be used in an earlier deposition or coating step.
type
The material type of this layer. Different layers can have the same material type. For example, a device with 3 metals M1 to M3 can all be of material type aluminum which you canabreviate to the IDENTIFIER AL for the type.
t
Specifies the thickness of the material in Angström.
sc
Specifies the step coverage of the layer as ratio of the layer thickness. It needs to be from 0.0 from 1.0. For example, with 1.0 the entire film thickness will be deposited on vertical sidewalls of the underlayer.
color
A Python style list of 3 floats each from 0.0 to 1.0 determining the color in the RGB format.
The coa function
This function specifies a coating step. The arguments are mostly the same as for the dep function but instead it does not have a sc step argument and it contains an argument dop related to the degree of planarization.
Specifies the degree of planarization of the coating from 0.0 to 1.0.
This parameter determines how well the coating step covers the underlying topography.
The image below is a coating with a degree of planarization close to 1.0 resulting in a close to flat surface:
The pat function
This function executes a pattern and etch step combining a single mask step of photolithography, etch, and photoresist strip.
Specifies the name of the mask used in the patterning step. This is only used in the naming of the process step. The number of the mask
layer in the process file is specified by the next parameter and that one is used in the simulation.
id
Specifies the layer number in the GDSII database from 0 to 65535.
type
Specifies the mask type which is either Dark (data is dark) or Clear (data is clear)
res
Specifies the photolitho resolution in um. For example, for 13.5 nm you enter 0.0135. A typical I line stepper for OLED or LCD manufacturing with resolution 1.5 um you enter 1.5.
taper: Specifies the taper angle of the etch after patterning. See the figure below in the bias argument.
mxdepth
The maximum depth in Angström or None if there’s no maximum.
bias
The double-sided CD bias of the patterning step. The bias together with the CD on the mask determines the top opening of a feature. Together with the taper angle and the film thickness it determines the bottom opening. This is illustrated here:
targets
A list of identifiers specifying the material types to be etched in this patterning step. The material types need to have been defined as the type argument of one or more deposition or coating steps.
The bla function
This function executes a blanket etch without photo mask. The two arguments are the same as that of the pat function.
bla(mxdepth=INTEGER, targets=list[IDENTIFIER])
The rel function
This function executes a release process common in MEMS manufacturing. The difference with a blanket etch is that also the film is removed if it’s located in the middle of the stack. The argument is the same as the targets argument of the pat function.
rel(targets=list[IDENTIFIER])
Versions
The latest version is 1.3.1 with several bug fixes including a fix for frozen console windows if the content exceeds a certain number of lines and and a fix for a potential program crash with odd image aspect ratios.