Introduction

TFSim (Microsoft Store) is to simulate and visualize 3D cross sections for semiconductor or MEMS thin film and patterning processes for output in bitmaps and in the common STL format.

This image shows a simplified semiconductor device cross section of a FINFET device.

These are difficult to draw by hand in particular with many films and a complicated mask layuout. TFSim is to automate this based on the mask layout and the process steps to build the device. All you need is a GDS file for the mask layout and a process script and TFSim will produce the images as bitmaps and 3D model files.

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:

The Process Script File

A process script is a text (*.txt) file with process commands you can create with any text editor. The process commands are the functions that TFSim requires to create 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])

Lines in the process script consist of a function name followed between parentheses by a list of named arguments with values. Unlike in Python, all arguments are required, and the order of the arguments is important. Empty lines are ignored. As in Python, text followingthe comment symbol # are ignored and can be used for comments.

The available types for the parameter values are the bool (True or False), int, float and list types as in Python. Unlike Python, no type conversion takes place e.g. from float to int.

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.

set(N=int, angle=int, heights=bool, legend=bool)
N
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=string)
cell
Specifies the cell name. The string 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.

The dep function

This function executes a deposition step.

dep(mat=string, type=string, t=int,  sc=float, color=list)
mat
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 string 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.

coa(mat=string, type=string, t=int, dop=float, color=list)
dop
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.

pat(mask=string, id=int, type=Dark|Clear, res=float, taper=int, bias=float, mxdepth=None|int, targets=list)
mask
Specifies the name of the mask used in the patterning step.
id
Specifies the layer number in the GDSII database from 0 to 65535.
type
Specifies the mask type which is either Dark or 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 strings 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=int, targets=list)

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)

Versions