A basic semiconductor process simulator

By: [email protected]

Please download and install version 3.3.0 with bug fixes and many improvements such as improved GDS cell flattening speed and mask digitizing speeds. Basic information about the process simulation are now more clearly displayed.


Process cross sections for semiconductor or MEMS fabrication can be difficult to draw by hand. The layout can have many overlapping layers that can stack up in a complicated way. We have different film thicknesses, taper angles, and etch biases. Photolithography generally introduces corning rounding which again is hard to visualize.

This software is for process or device engineers that do not want to spend a lot of time drawing process cross sections by hand.

It is used to make 3D process cross sections from a cell in a GDS layout file. The 3D layers are built with process steps listed in a custom process file.

The process file specifies the process steps in building the cross section. Layers can be deposited, coated with planarization, patterned with mask from a GDS layout, and released. Etch bias and effects due to litho resolutions can be simulated.

The process file also needs to contain the GDS cell name and the location of the cross section in the GDS cell.

Besides of use for semiconductor and MEMS fabrication, this software can be relevant for Photonics fabrication, TFT display fabrication, Flexible Printed Circuits (FPC), Printed Circuit Boards (PCB) and Multi Chip Modules (MCM) and other technologies that use photolithography.

A simple GDS layout for a FinFET transistor created for example by KLayout could look as follows:

Even with only a few layers the resulting layer stack after fabrication is generally difficult to visualize due to the overlapping layers. If we run this through the process simulator program, the cross section comes out as follows:

The process file is a simple text file with all the processing commands. Parameters like the film thicknesses can be specified and for example the color that is used to display them. Also, parameters like pattern and etch bias or photo resolution can be entered. Layers can be shown with transparency.


PSim is currently only available for Windows 64 bit. Check the version of your installed Gdsviewer through the About menu. The latest version is 3.3.0.

How to run PSim

  1. Download and run the Microsoft Software Installer: Download Setup File 3.3.0
  2. For some it might be necessary to install Microsoft C/C++ redistributable for 64 bit windows: Download MS Redistributable
  3. Create a working folder and move the example process file TFT example.txt and GDSII file Simple TFT.gds to it.
  4. Run PSim and load the GDS file through the menu
  5. Then run the process file:
  6. This will start the process simulation. The console window will display relevant information including possible errors found.
  7. The output bitmap files with the 3D cross sections will be placed inside a subfolder in the working folder with date and time in the name.

Be sure to double check that the location of the cross section in the cell is correct. If wrong, you will just see a stack of blanket films.

Commands in the process file

Empty lines and lines starting with a # are ignored and can be used for commenting out lines. Below are all the commands that can be used with available named arguments. Arguments can be provided following the command in arbitrary order unless indicated otherwise. Arguments between square brackets [] are optional.

The gen command specifies some general settings:

-cam Integer from 10 to 40 specifying the viewing angle
-map Integer 1 or 0 specifying if the top heights are shown (1) or not (0)
-N Integer from 100 to 2000 specifying the number of columns in the grid used for the process simulation. The number of columns can be up to 2000 but the simulation can take longer. Something like 1400 gives reasonable quality at faster simulation time. For very fast test execution runs, use something like 400.

The gds command to specify the gds cell:

-cell Character string specifying the cell name to use from the GDS II database loaded (no spaces allowed). The cut command below will further specify the target rectangle inside this cell. To limit memory allocation, the target rectangle should contain less than a million polygons which is way more than meaningfully can be displayed.

The cut command specifies the target rectangle of the cross section:

-x Float specifying the bottom left x coordinate in um
-y Float specifying the bottom left y coordinate in um
-dx Float specifying the cross section's horizonal size. Note that if the horizonal size is too large the grid spacing can exceed the smallest resolution of the layout structures (the so-called CD or critical dimension). In that case a message will ask you to decrease the cross section size or increase the number of columns via the gen -N argument introduced above.
-dy Float specifying the cross section's vertical size. Truncated if larger then the horizonal size.

The dep command to specify a deposition step:

-name Character string specifying the name of the material (no spaces allowed)
-thickness Float specifying the thickness of the material in nm
[-sc] Float from 0.0 (default) to 1.0 specifying the step coverage as fraction of the film thickness. A sc of 1.0 will deposit the entire film thickness on vertical sidewalls.
[-alpha] Float from 0.0 to 1.0 (default) specifying the the material transparency
-color 3 integers from 1 to 255 specifying R, G, and B and 1 integer from 0 to 100 specifying an overall brightness scaling percentage

The coa command to specify a coating step:

-name Character string specifying the name of the material (no spaces allowed)
-thickness Float specifying the thickness of the material in nm
[-dop] Float 0.0 to 1.0 (default) to specify the degree of planarization. A degree of planarization of 1.0 (default) will result in a flat film regardless of the underlying topography while 0.0 will result in a conformal film.
[-rr] Float larger or equal to 0.0 specifying a reflow radius in um. The default is 0.0. It's roughly the radius in which the coated material will reflow.
[-alpha] Float from 0.0 to 1.0 (default) specifying the the material transparency
-color 3 integers from 1 to 255 specifying R, G, and B and 1 integer from 0 to 100 specifying an overall brightness scaling percentage

The pat command to specify a patterning (photo & etch) step:

-mask_name Character string specifying the mask name. Mask names are in a diffent name space from deposited and coated materials. If the mask_name is omitted, then it’s assumed to be a just a blanket etch and only the target materials should be entered.
-id Integer specifying the layer number (integer from 0 to 255) of the mask in the GDS file
-type Integer 0 or 1 specifying the mask type with 0 indicating clear type and 1 dark type.
[-res] Float larger or equal to 0.0 (default) specifying the resolution of the litho tool in um. This can be for example 1.5 um for a I line stepper from a TFT line.
[-bias] Float larger or equal to 0.0 (default) specifying the total pattern and etch bias of the patterning. It’s a double sided and measured on top of the feature.
-taper Integer specifying the taper angle in degrees in the interval (0, 90].
[-depth] Integer specifying the maximum depth in nm. The default is 0 in which case there is no maximum and the etch will complete till a etch stop layer is found.
-targets A list of character strings (each without space) seperated by a space that will be etched. Each must be a material previously deposited or coated. Materials not in this list will not be etched. This argument needs to be the last argument of this command.

The rel command to specify a material release:

-target A character string with the target material to be released. This must be a material previously deposited or coated.

The sto specifies to stop execution. All following commands in the process file are ignored. This is useful if you want to debug the process and stop execution somewhere halfway.

Example process file

The followings gives and example process commands with most of commands introduced in the previous section and obtains the example the cross section given above. The GDSII layout file that can be used with this is Layout Example You can copy and paste the commands into a text file and load it in the program


gen -map 0 -cam 40 -N 1400

gds -cell TOP

cut -x -0.007 -y -0.015 -dx 0.1 -dy 0.08 


dep -name OX -thickness 1 -color 40 255 40 100

dep -name SD -thickness 5.5 -sc 1.0 -color 150 150 255 100
pat -mask_name SD -id 0 -type 1 -res 0.0 -bias 0.0 -taper 90 -targets SD

dep -name GI -thickness 1 -sc 1.0 -color 255 255 0 50

dep -name GM -thickness 1 -sc 1.0 -color 0 0 255 100
pat -mask_name GM -id 3 -type 1 -res 0.0 -bias 0.0 -taper 60 -targets GM GI