Introduction

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 standard STL format for 3D models.

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:

The Process 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 SETTINGS
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.0, color = [0.16, 1.00, 0.16])

# SOURCE/DRAIN DEPOSITION
dep(mat = SD, type = AL, t = 55, sc = 0.0, 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 the explanation and considerations:

All Commands

The following gives all available commands in the TFSim process script.

The set command

This mandatory command specifies the settings for the simulation session:

set(N=INTEGER, angle=INTEGER, heights=BOOLEAN, legend=BOOLEAN)
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 1000 is generally a good choice.
angle
Specifies the camera angle with respect to the horizon in degrees. Needs to be from 0 (front view) to 90 (top view). This is front view of the FinFET example of the introduction:
while this is the top view:
heights
Specifies if height values of the top surface are shown. The heights are in Angström placed at regularly spaced locations in the cross section as illustrated here:
legend
Specifies if a legend with layer names for each color is shown.

The gds command

This command sets the cell to take the cross section from. It needs to be a cell in the GDSII file loaded by the Load GDS menu:

gds(cell=IDENTIFIER)
cell
Specifies the cell name. The name, as will all identifiers, cannot contain spaces. Be sure to enter the correct cell name or the results can be unexpected.

The loc command

This command sets the cross-section location in the cell specified through the gds command above:

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 command 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. Also, its value can not be less than 10% of the width.

It’s good practice to double check the coordinates since it’s easy to enter wrong one leading to unexpected results. Also, for the cross section width dx do not enter too small or too large values:

The dep command

This command executes a deposition step:

dep(mat=IDENTIFIER, type=IDENTIFIER, t=INTEGER,  sc=FLOAT, color=list[FLOAT])
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.
t
Specifies the thickness of the material in Angström. Be sure to enter the right number or the results can be unexpected.
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. Note: use 0.0 for flat layers since higher values are meaningless but result in unneccesary computing times.
color
A Python style list of 3 floats each from 0.0 to 1.0 determining the color in the RGB format. For example [1.0, 1.0, 1.0] is white and [1.0, 0.0, 0.0] is red.

The coa command

This command specifies a coating step. The arguments are mostly the same as for the dep command but instead it does not have a sc step argument and it contains an argument dop specifying the degree of planarization:

coa(mat=IDENTIFIER, type=IDENTIFIER, t=INTEGER, dop=FLOAT, color=list[FLOAT])
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 command

This command executes a pattern and etch step combining a single mask step of photolithography, etch, and photoresist strip:

pat(mask=IDENTIFIER, id=INTEGER, type=Dark|Clear, res=FLOAT, taper=INTEGER, bias=FLOAT, mxdepth=None|INTEGER, targets=list[IDENTIFIER])
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 (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. For 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 command

This command executes a blanket etch without photo mask. The two arguments are the same as that of the pat command:

bla(mxdepth=INTEGER, targets=list[IDENTIFIER])

The rel command

This command 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 command:

rel(targets=list[IDENTIFIER])

Versions

The latest version is 1.5 with bug fixes and an improved material legend layout. Also the triangles in the STL files are not pre-merged anymore to allow the user for more options for downstream processing. Memory usage might and STL file sizes might get larger.