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 (MSVC)

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

To build the Python package with GPU support, use the install script in python/scripts folder. On Linux, e.g., run:

python3 -m venv .venv # create virtual environment (optional, but recommended)
source .venv/bin/activate # activate virtual environment 
python python/scripts/install_ViennaPS.py

A CUDA toolkit and driver compatible with your GPU must be installed on your system to use the GPU functionality.

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.1")
    
  • 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.1-cp312-cp312-win_amd64.whl (39.9 MB view details)

Uploaded CPython 3.12Windows x86-64

viennaps-4.2.1-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.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (90.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

viennaps-4.2.1-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.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (90.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

viennaps-4.2.1-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.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (90.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: viennaps-4.2.1-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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1ab640ddfe1358ca57b3408f794db2796de5f974b35b4bade383abd9188221df
MD5 1f650310e4951ac35a5e0577d249136f
BLAKE2b-256 73cd09d05c95b65874205063ff19daec280fec220d21a68a5bda26fff48f29e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.1-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 0bbc1e1cb75d5c3c60a63599a651650a20b4b708d5e2eac991940842e01e358a
MD5 8b9b7e783ebe91e2c1ea4406a7d34105
BLAKE2b-256 0f442e5355d03bb758cfc4885bf1a2c3bd0846d27930056feb1cb3323b79868c

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2e5abaf57f14e0542c7fa8699922f356fa8583faa123b6134ae400ddea36df4f
MD5 ed4e4ff1b0f541548d095a9de0d66e21
BLAKE2b-256 1c1415ccf67fbc525236eec1eec8adaced45ea2a86087066c350cfe0d9bec8b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3591f28895af3fb7e6aaaae4ab87829f3e378cf2e5e7f31f5f4465dd079d94c4
MD5 9fe0d7f2850b89aef4e2ebda6e85bc49
BLAKE2b-256 90c0a03c25bd4f234ca5a9106d40d9438b52515c7b5b1fc457b29ccdd5b2e5ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: viennaps-4.2.1-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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 17c4ca002c396a6ead908d39008a6100fdbe01d3d83349b021bd82d7315366b8
MD5 0218f54ccffe90662468c4927e23f3d3
BLAKE2b-256 7ca7ae255030b461b6c12167c62b79683988286028d57ddfbbc15f560e3d1d4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 3f9779aa99c98b8049c9fe1dd6e3fa34c1323ce767e75dd5d78dc5cf5ab5c76c
MD5 f4416da0a43567f4b64cc91fff11227c
BLAKE2b-256 d0e96cb1bdd2e833eb84942b5775ea5c0c6a145741074b4bad2a8a95d074ae7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 99c11c0d2f37586e07e392b4727074ab48668c93da463f0b2b4b93d836c68a64
MD5 f5ed57774dfec18ef69b769b2bfb71c0
BLAKE2b-256 be44eb92104de11b5c0ddd6c835d680c702369cb84f0a94edabd353986080f4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4ce1b93ba0dbd3ddcb88cf007da4a683dd3aba834d2e870130fdfa5bbe5feb79
MD5 c0f1517a6e99562242090a810ad41090
BLAKE2b-256 9cd63941c562559e3a46ad52f179e054f8c40c687efc929fec2ea0626f006720

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: viennaps-4.2.1-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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 86d7caa6f056a91c36ceff79e5403d494da08d72c27cbed17d9cdca94a65cd4f
MD5 cc0fcf9f7512a1aa4063f1a9533a6139
BLAKE2b-256 4d2e0b7fd6e4531d2f5e281cba5432eb2d9f5713ae1fd5257acc3fa9617f64ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 80124d116a9cf3c7dc8c667c00df00bd3b72d8dbb898f3075a6a062e86aa089f
MD5 9c49372dda968b110fcb6886857e055a
BLAKE2b-256 66ff275a73b935e31556a6e7d0c7097676bea25dac44eae41c1be7252dd79a05

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for viennaps-4.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a8655c8be58580af4744b9cc00397f5df5b9e5a0d6c787ffad72605607f608e0
MD5 78fd6422dadc86f3377dd17c51c0e98b
BLAKE2b-256 b6857f44c7a7e1e473e9b7bd5e25229f93b42bd253b7597a39357390ce345ade

See more details on using hashes here.

Provenance

The following attestation bundles were made for viennaps-4.2.1-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