Skip to main content

Topography simulation library for microelectronic fabrication processes

Project description

ViennaPS

🐍 Build Bindings 🧪 Run Tests PyPi Version

ViennaPS is a header-only C++ library for topography simulation in microelectronic fabrication processes. It models the evolution of 2D and 3D surfaces during etching, deposition, and related steps, combining advanced level-set methods for surface evolution with Monte Carlo ray tracing for flux calculation. This allows accurate, feature-scale simulation of complex fabrication geometries.

ViennaPS supports both physical process models and fast emulation approaches, enabling flexible and efficient development of semiconductor processes. It can be easily integrated into existing C++ projects and also provides Python bindings for use in Python-based workflows. The library is actively developed and continuously improved to address the needs of process and topography simulation in microelectronics.

Quick Start

To install ViennaPS for Python, simply run:

pip install ViennaPS

To use ViennaPS in C++ follow the CMake instructions below. A ready-to-use CMake template is also available for a quick start: ViennaPS CMake Template.

For full documentation, visit ViennaPS Documentation.

Releases

[!NOTE]
ViennaPS is under heavy development and improved daily. If you do have suggestions or find bugs, please let us know!

Releases are tagged on the master branch and available in the releases section.

ViennaPS is also available on the Python Package Index (PyPI) for most platforms.

Building

Supported Operating Systems

  • Linux (g++ / clang)

  • macOS (clang)

  • Windows (Visual Studio)

System Requirements

  • C++20 Compiler with OpenMP support

ViennaTools Dependencies (installed automatically)

ViennaPS is part of the ViennaTools ecosystem and depends on several lightweight, header-only ViennaTools libraries. During configuration, CMake will look for them and fetch them automatically as part of the ViennaPS build. No separate installation step is required for these dependencies:

External Dependencies

The following external dependencies are required to build ViennaPS. On most systems, installing them via a package manager (e.g. apt, brew, or vcpkg) is the fastest option:

CMake automatically checks for these dependencies during configuration. If they are not found, they can be built from source as part of the build.

To prefer a specific local installation, point CMake to it via VIENNAPS_LOOKUP_DIRS (a semicolon-separated list of prefixes):

cmake -B build -DVIENNAPS_LOOKUP_DIRS="/path/to/vtk;/path/to/embree"

Alternatively (or additionally), you can use CMAKE_PREFIX_PATH if that better matches your local setup.

Installing

[!NOTE]
For more detailed installation instructions and troubleshooting tips, have a look at the ViennaPS documentation.

ViennaPS is a header-only library, so no formal installation is required. To use ViennaPS in your C++ project, refer to the Integration in CMake projects section below.

Building the Python package locally

The Python package can be built and installed using the pip command:

git clone https://github.com/ViennaTools/ViennaPS.git
cd ViennaPS

pip install .

Some features of the ViennaPS Python module depend on the ViennaLS Python module. The ViennaLS is installed automatically as a dependency. Note: A locally built ViennaPS Python module is typically not compatible with the ViennaLS package from PyPI. For details and troubleshooting, see this guide.

Using the Python package

The ViennaPS Python package can be used by importing it in your Python scripts:

import viennaps as vps

By default, ViennaPS operates in two dimensions. You can set the dimension using:

vps.setDimension(2)  # For 2D simulations
vps.setDimension(3)  # For 3D simulations

For more details and examples, refer to the official documentation.

Integration in CMake projects

We recommend using CPM.cmake to consume this library.

  • Installation with CPM

    CPMAddPackage("gh:viennatools/viennaps@4.2.0")
    
  • With a local installation

    In case you have ViennaPS installed in a custom directory, make sure to properly specify the CMAKE_PREFIX_PATH.

    list(APPEND CMAKE_PREFIX_PATH "/your/local/installation")
    
    find_package(ViennaPS)
    target_link_libraries(${PROJECT_NAME} PUBLIC ViennaTools::ViennaPS)
    

    Note: If you installed ViennaPS to a custom location, GPU kernels can not be built, since the CMake configuration does not support this setup. If you need GPU support, please use CPM.cmake.

Shared Library

In order to save build time during development, dynamically linked shared libraries can be used if ViennaPS was built with them. This is done by precompiling the most common template specialisations. In order to use shared libraries, use

cmake -B build -DVIENNALS_PRECOMPILE_HEADERS=ON

If ViennaPS was built with shared libraries and you use ViennaPS in your project (see above), CMake will automatically link them to your project.

GPU Acceleration (Experimental)

As of version 3.4.0, ViennaPS supports GPU acceleration for the ray tracing part of the library. This feature is still experimental. Details on how to enable GPU functionality can be found in the documentation.

Basic Examples

Building

The examples can be built using CMake:

git clone https://github.com/ViennaTools/ViennaPS.git
cd ViennaPS

cmake -B build -DVIENNAPS_BUILD_EXAMPLES=ON
cmake --build build

The examples can then be executed in their respective build folders with the config files, e.g.:

cd build/examples/exampleName
./exampleName.bat config.txt # (Windows)
./exampleName config.txt # (Other)

Individual examples can also be build by calling make in their respective build folder. An equivalent Python script, using the ViennaPS Python bindings, is also given for each example.

Trench Deposition

This example focuses on a particle deposition process within a trench geometry. By default, the simulation presents a 2D representation of the trench. Nevertheless, users have the flexibility to conduct 3D simulations by adjusting the value of the constant D in trenchDeposition.cpp to 3. Customization of process and geometry parameters is achieved through the config.txt file. The accompanying image illustrates instances of the trench deposition process, showcasing variations in the particle sticking probability s.

SF6/O2 Hole Etching

This example demonstrates a hole etching process with a SF6/O2 plasma etching chemistry with ion bombardment. The process is controlled by various parameters, including geometry and plasma conditions, which can be adjusted in the config.txt file.

The image presents the results of different flux configurations, as tested in testFluxes.py. Each structure represents a variation in flux conditions, leading to differences in hole shape, depth, and profile characteristics. The variations highlight the influence of ion and neutral fluxes on the etching process.

[!NOTE] The underlying model may change in future releases, so running this example in newer versions of ViennaPS might not always reproduce exactly the same results.
The images shown here were generated using ViennaPS v3.6.0.

Bosch Process

This example compares different approaches to simulating the Bosch process, a deep reactive ion etching (DRIE) technique. The three structures illustrate how different modeling methods influence the predicted etch profile.

  • Left: The structure generated through process emulation, which captures the characteristic scalloping effect of the Bosch process in a simplified yet effective way.
  • Middle: The result of a simple simulation model, which approximates the etching dynamics but may lack finer physical details.
  • Right: The outcome of a more physical simulation model, leading to a more realistic etch profile.

This comparison highlights the trade-offs between computational efficiency and physical accuracy in DRIE simulations.

Wet Etching

This example demonstrates the wet etching process, specifically focusing on the cantilever structure. The simulation captures the etching dynamics and the influence of crystallographic directions on the etch profile.

Selective Epitaxy

This example demonstrates the selective epitaxy process, focusing on the growth of SiGe on a Si substrate. Similar to wet etching, the process is influenced by crystallographic directions, which can be adjusted in the config.txt file. The simulation captures the growth dynamics and the resulting SiGe structure.

Redeposition During Selective Etching

This example demonstrates capturing etching byproducts and the subsequent redeposition during a selective etching process in a Si3N4/SiO2 stack. The etching byproducts are captured in a cell set description of the etching plasma. To model the dynamics of these etching byproducts, a convection-diffusion equation is solved on the cell set using finite differences. The redeposition is then captured by adding up the byproducts in every step and using this information to generate a velocity field on the etched surface.

GDS Mask Import Example

This example tests the full GDS mask import, blurring, rotation, scaling, and flipping as well as the level set conversion pipeline. Shown below is the result after applying proximity correction and extrusion on a simple test.

Tests

ViennaPS uses CTest to run its tests. In order to check whether ViennaPS runs without issues on your system, you can run:

git clone https://github.com/ViennaTools/ViennaPS.git
cd ViennaPS

cmake -B build -DVIENNAPS_BUILD_TESTS=ON
cmake --build build
ctest -E "Benchmark|Performance" --test-dir build

Contributing

If you want to contribute to ViennaPS, make sure to follow the LLVM Coding guidelines.

Make sure to format all files before creating a pull request:

cmake -B build
cmake --build build --target format

Authors

Current contributors: Tobias Reiter, Lado Filipovic, Roman Kostal, Noah Karnel

Contact us via: viennatools@iue.tuwien.ac.at

ViennaPS was developed under the aegis of the 'Institute for Microelectronics' at the 'TU Wien'. http://www.iue.tuwien.ac.at/

License

ViennaPS is licensed under the MIT License.

Some third-party libraries used by ViennaPS are under their own permissive licenses (MIT, BSD, Apache-2.0).
See THIRD_PARTY_LICENSES.md for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

viennaps-4.2.0-cp312-cp312-win_amd64.whl (39.9 MB view details)

Uploaded CPython 3.12Windows x86-64

viennaps-4.2.0-cp312-cp312-musllinux_1_1_x86_64.whl (88.6 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

viennaps-4.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (90.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

viennaps-4.2.0-cp312-cp312-macosx_11_0_arm64.whl (59.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

viennaps-4.2.0-cp311-cp311-win_amd64.whl (39.9 MB view details)

Uploaded CPython 3.11Windows x86-64

viennaps-4.2.0-cp311-cp311-musllinux_1_1_x86_64.whl (88.6 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

viennaps-4.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (90.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

viennaps-4.2.0-cp311-cp311-macosx_11_0_arm64.whl (59.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

viennaps-4.2.0-cp310-cp310-win_amd64.whl (39.9 MB view details)

Uploaded CPython 3.10Windows x86-64

viennaps-4.2.0-cp310-cp310-musllinux_1_1_x86_64.whl (88.6 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

viennaps-4.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (90.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

File details

Details for the file viennaps-4.2.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: viennaps-4.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 39.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for viennaps-4.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cc0c8bac00ab2160e887a7fca1213db4f4517b151cc64978013815e3797256ec
MD5 67d93ccbcc36335b72c3f7b9e79e636f
BLAKE2b-256 8842c96f62847d625a0b29703b064beb2fafa9274d629d8ca3e49ed8e4455a60

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp312-cp312-win_amd64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.0-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ddf23cd6adf608dc79a73c412889bd60e99c61ecee27e215d4f6241e5900010a
MD5 b6d5860aed098faffd71784a85f0a871
BLAKE2b-256 2cb5eeb85257247153763dc5e43787837ff23d4dd5f5a1866adebf6ab93377da

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp312-cp312-musllinux_1_1_x86_64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b0545af1c7bf183d0b2c58ca4c4dc3d42bda6056ed84a8ce136f768514db86c5
MD5 c816429dffcec95628ea634e9aadbfe9
BLAKE2b-256 8ae7e68d5033fbd5c8d919b4dada2781269cfe6963e8bdd762b6ef83fdfc7fea

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b6ac5624bdf5b424ff191a2c1b1e6abb652c454a147861fd498f45444c04faba
MD5 8c9a0fd84ac94b6bf5052a6bcb1882eb
BLAKE2b-256 6e06356eccf9878d9db26bbaa5f7a9044f6bd3f7868f0e633e5e1c6aa4998083

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: viennaps-4.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 39.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for viennaps-4.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6f0ada1684f9858caf62946a65abe51d1ca6e1be489149658e1da6c46f158811
MD5 2eb8457cabda6de28f130e248cb12b3d
BLAKE2b-256 593576abe8177bf6bed8cf1e1aba4156bbdecb54dfe230ed9b1b52152b518120

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp311-cp311-win_amd64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 13d1115bd6e3e0324043b70dd1d9d769eee18d3ac80fbfda87ef1d44d97e7f9d
MD5 e999127ebb1cc8c115c15fff307cf41b
BLAKE2b-256 e3bc405e6ddcfd7c94ec3740aa0d8c6b5abb6238477a3b28b1d8eda85b85108d

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp311-cp311-musllinux_1_1_x86_64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24592c06b960002ee3d34650caa3c27cb6443a937c0cf6bdcdac8002eca90c00
MD5 e71ef6806a229c28737113c767051392
BLAKE2b-256 addb77264c9b415b2ccfb422e66256c81267c96a9befc8bd89dd5af5c42887ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e4045a611cd8176f88d60138dc0aa098bc8239c35dca05e2a8b9d4390837d1d
MD5 bad4f918d4e7e78fa968f4fccfb03dfc
BLAKE2b-256 634c7566c58baaea5d3fbe45704c393720c8c6e10711a9b8accb389897b36f3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: viennaps-4.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 39.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for viennaps-4.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 527dac92439f726079c17a0d820723322a9efc01432520efccf454ac80ce9a8b
MD5 40ac6bb23691d1ce7e5b7e377a580fd8
BLAKE2b-256 e8f6b61da2a8251b693a583d023ece04bdd1d4aacccc9e64b3eb289647ea037a

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp310-cp310-win_amd64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 706bd4f349480ee928c7dc9ce78d1bac37b66353befb2248e100c205239f559a
MD5 a89c5485e53a566764c2f2a4c863fb14
BLAKE2b-256 a88683c15912b7c25a3f670e935f84046d09846cf417c5c226a04d1ae26daa88

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp310-cp310-musllinux_1_1_x86_64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file viennaps-4.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6926bac2fd7213f526fde8bed00e2b145cbd7ddb3cc3d129d121a976e3a04848
MD5 5e105becb655974e1e45d79e7ffe8806
BLAKE2b-256 869da3ef43d294bb681893567f44dbbfa593553dfd1fd3ab6f27ed3e6b213ed8

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python.yml on ViennaTools/ViennaPS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page