Python package to simplify substrate stackups and export them for use in Momentum and Sonnet

substrate, stack, ADS, Momentum, Sonnet, em
pip install substratestack==0.3




substratestack is a Python module that helps simplifying substrate stackups for use in Momentum and Sonnet. It was initially written for use in an MMIC design methodology, but it might also be useful for PCB design.

The design of MMIC passives such as planar inductors and transmission lines requires simulations using electromagnetic solvers, for instance ADS Momentum or Sonnet em. These require an accurate definition of the substrate stack in order to output correct models. The user typically copies the substrate stack definition from the documentation provided by the IC foundry into the solver by means of its GUI. Often the stack needs to be simplified to keep simulation times down. The simplification and manual entry of the stack is a tedious and error-prone process. substratestack tries to make this process quicker and less error-prone.

substratestack takes the detailed definition of a substrate stackup describing the oxide layers and metals of an IC or PCB technology. Optionally, metals can be removed from the stack to reduce simulation times. substratestack can then merge oxide layers, automatically taking care of calculating the equivalent permittivity. It can also write out a visualization of the stack, before and after oxide merging, so the correctness can be verified.

Finally, the simplified stack definition can be exported to a Momentum slm file or a Sonnet project for direct inclusion in these solvers.


The substratestack package requires at least version 2.4 of Python. Python 3.x is not supported at the moment. In addition, the ReportLab Toolkit is required for rendering the stacks to PDF. On Windows, you should install ReportLab using the provided Windows installers.

The most convenient option for getting substratestack is by using pip or easy_install. To automatically download the archive from PyPI install it, run

pip install substratestack


easy_install substratestack

If you have instead downloaded the source package, you can install it by unpacking the archive and running

python install


Disclaimer: While substratestack has been successfully used in MMIC-design by the author, there is no guarantuee that it is bug-free. Be sure to double and triple-check its output.

A documented example is included in the examples directory. contains the substrate definition of a hypothetical six-metal-layer CMOS process. Run to have substratestack render the stack to PDF:

python imports the stack from and removes all metal layers but the top two. It simplifies the resulting stack and writes substrate definition files in the Momentum and Sonnet formats. Run to generate the PDFs and substrate definition files:


Refer to the and for specific documentation on how to define, simplify and render substrate stacks. The wiki offers sample PDFs generated by and