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++, clone the repository and follow the installation steps below.

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

  • Windows (Visual Studio)

System Requirements

  • C++17 Compiler with OpenMP support

Dependencies (installed automatically)

The CMake configuration automatically checks if the dependencies are installed. If the dependencies are not found on the system, they will be built from source. To use local installations of the dependencies, the VIENNAPS_LOOKUP_DIRS variable can be set to the installation path of the dependencies.

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. However, following the steps below helps organize and manage dependencies more effectively:

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

cmake -B build && cmake --build build
cmake --install build --prefix "/path/to/your/custom/install/"

This will install the necessary headers and CMake files to the specified path. If --prefix is not specified, it will be installed to the standard path for your system, usually /usr/local/ on Linux-based systems.

Building the Python package

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

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 and may not work on all systems. 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.0.1-cp312-cp312-win_amd64.whl (33.7 MB view details)

Uploaded CPython 3.12Windows x86-64

viennaps-4.0.1-cp312-cp312-musllinux_1_1_x86_64.whl (78.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

viennaps-4.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

viennaps-4.0.1-cp312-cp312-macosx_11_0_arm64.whl (46.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

viennaps-4.0.1-cp311-cp311-win_amd64.whl (33.7 MB view details)

Uploaded CPython 3.11Windows x86-64

viennaps-4.0.1-cp311-cp311-musllinux_1_1_x86_64.whl (78.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

viennaps-4.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

viennaps-4.0.1-cp311-cp311-macosx_11_0_arm64.whl (46.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

viennaps-4.0.1-cp310-cp310-win_amd64.whl (33.7 MB view details)

Uploaded CPython 3.10Windows x86-64

viennaps-4.0.1-cp310-cp310-musllinux_1_1_x86_64.whl (78.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

viennaps-4.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: viennaps-4.0.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 33.7 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.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d133efe5d4adb6a86b4e83585c3f5e87572d87a2d88d64377e8d3211dee9d51c
MD5 ba7609ef669427b34963210510545e75
BLAKE2b-256 4f406d5433b406c22530e3e70f2dbe4a90a2aff843534e3616fa750bfd1e4a59

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for viennaps-4.0.1-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 67bf158ce9e1697fa47ce133d6baf306a4e2b8e902c75134e61e9d7837422c93
MD5 94aa84717f3e430e315c13883982c2f1
BLAKE2b-256 2ff74c44869064fc8cd6dbd201fcd112c5e144ea85903388bea288e59c26fbfd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for viennaps-4.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3b7b37e32f94707ef7b6cb675d92189c94e862bef7b2df4440ee66402f8eb7db
MD5 a002c40e08acdf7cd622bf9f75c7ba24
BLAKE2b-256 a179bdd3d8a0374efd5a4fba75e524f20e790d48c30b7c0e3245d026641409de

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for viennaps-4.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3583b1012a08e3dae709273e2aa3fcada8d8483fded96210d6317eb6cff99681
MD5 ecd11b5da355f8de5ee363589185a463
BLAKE2b-256 701717adea0db08d203612adce85da79f384565ffbb7130e9553491594a2afe2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: viennaps-4.0.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 33.7 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.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6292aade70ba4a2de092a2c1ddd695b9d67710a3913ae0057decf4c1ca57f1c9
MD5 1b7bc3b202a4d5ef29e9328ca77cc88f
BLAKE2b-256 7a32eb158e2288027dcf979232b1f48422d2c6ca96c08959f5503b518d59dca3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for viennaps-4.0.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 d79cb411316b73d6bb18b41fc0a38964bbc8c1cac4e7d5dd2849b2625472f6f0
MD5 03e8af8d1ab3840649d6dd4dee58dccf
BLAKE2b-256 aa8b42ee610482f5fcb12809c8dfdd8672d7ca9be0b62ab049f09528728b7248

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for viennaps-4.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8ba5d4c21377f8eaf692b3921d9b884d9e14b674410770e1d248a865b1a9fdf
MD5 932dbe2fbc735af4dc82619ab9c76c51
BLAKE2b-256 fcf1bc2371bbef06570d561ed8e9561098494ffcd75558552c775fec0720ef37

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for viennaps-4.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 04353216a3b96a99528fa3b922cfb6d61a4baa5270829556a94493ad47a9c8e7
MD5 ac583d50fe64d0b156f3373f7975250c
BLAKE2b-256 3b2068e49be31b01ad4058b7582bec55135c7d34b0d6d61f18940aa1be63db52

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: viennaps-4.0.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 33.7 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.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ba9f5a92001406c99c49a1086c7bf99b5071527b85f042f7a41439090d8cb868
MD5 6c4d2521d31fa92a45a209bae993c762
BLAKE2b-256 3eab4be893081f6b13e188aa2fd0d2bfb089b28befe4651600cdfe8b0c116b2c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for viennaps-4.0.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5407a8809ac801b4e2f4e6fe2429a0f3f9ee909b48430b9c18e4077e8e43326d
MD5 6f865cde061c1dba6e47719e8d423b21
BLAKE2b-256 dd35145cd651cef850eac2f4264c139657b304bb09096166d31367a09521df49

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for viennaps-4.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7d725001e3257e43eda96fb4999e9ae564a28e692568a26b2a0d194738061ba3
MD5 1550c410f958d20fda5f0b36669f95e6
BLAKE2b-256 05276f41e7f95baa88e45077be290e8d3f70048e0646ae46eab0d6ac723c81f7

See more details on using hashes here.

Provenance

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