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

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:

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 } ], "]"

The grammar for the types used in the above is:

INTEGER        ::= ['-'] digit { digit }

FLOAT          ::= ['-'] digit { digit } '.' [ digit { digit } ] | '.' digit { digit }

IDENTIFIER     ::= digit { digit } letter { letter | digit } | letter { letter | digit }

digit          ::= '0'..'9'

letter         ::= 'a'..'z' | 'A'..'Z' | '_'

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=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 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.

The dep function

This function 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 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.

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 function

This function 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. 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.