The files provided here enable openEMS EM simulation with layouts created for the IHP SG13G2 RFIC technology.
An extensive User's Guide of this GDSII to openEMS workflow is available in PDF format here:
Using OpenEMS Python with IHP SG13G2 v2
An overview of the EM solver ecosystem (tools and utilities) for IHP SG13 can be found here:
https://github.com/IHP-GmbH/IHP-Open-PDK/tree/main/ihp-sg13g2/libs.doc/doc
This workflow is based on the Python workflow for OpenEMS,
please refer to https://www.openems.de/
and https://docs.openems.de/python/install.html#python-linux-install
In addition to OpenEMS, the Python module gdspy must be installed.
Two meshing methods are available in this workflow. In the examples, automatic meshing based on geometry is enabled, which tries to detect edges and diagonal areas that need local refinement. Mesh lines that are too close (resulting in slow simulation) will be removed or merged automatically.
The screenshot below shows a minimum configuration, which consists of the XML technology stackup, the GDSII layout, one simulation model file (here named run_inductor_diffport.py) and the utility modules with all the “behind the scenes” code that you don’t need to modify.
For all models, the output directory contains the *.XML file for preview in the AppCSXCAD viewer. You can use this to inspect the model and preview the mesh that is generated by this model code.
This model simulates a simple thru line, with via ports on both ends. Excitation is only from one side, the reverse path is "faked" for S2P export assuming symmetry. The EM stackup does not include the lossy substrate, because that is shielded by the ground layer anyway.
Note that the Metal1 ground plane is modelled and meshed explicitely. It is not recommended to use the bottom PEC boundary for this, because that is a lossless boundary and the Metal1 resistance would not show up in results. Also note that port size will lead to parasitic inductance, port de-embedding is not implemented so far.
This model simulates a thru line with GSG pads on both ends. To properly simulate this, we use a composite port from two in-plane openEMS ports, one to each side from signal line to the ground pad. To drive the center conductor in-phase between these two ports, one is defined with opposite polarity. Both ports are in parallel, so each of then is defined with 2x the normal impedance. The resulting S-parameters for each GSG port are calculated in the evaluation code section, combining the data from the "sub-ports" into one effective GSG port result on each end of the line.
In the model code, layout pre-processing is enable to properly handle the cutouts (holes) in polygons. Without that pre-processing, openEMS polygons would not create the proper shape, due to self-intersecting polygons.
This model simulates an octagon inductor. There is only one in-plane port, placed between the inductor terminals. Results are valid for differential model of operation, and the code plots differential L and Q as well as numerical value for series L and series R at one extraction frequency. That extraction frequency is defined in the evaluation code section.
This is the 2-port simulation of the same inductor as mentioned above. Here, two via ports are created down to an artifical common ground reference placed at the surface of the silicon. This ground polygon was added manually in the GDSII file, just like the port polygons.
The resulting S-parameters can be used for simulation, but you can also extract a narrowband lumped element pi model using the pi-from-s2p tool.
This is an example for antenna simulation, based on a design by IHP authors Klaus Schmalz et al: K. Schmalz, W. Ruoyu, J. Borngräber, W. Debski, W. Winkler , and C.Meliani, “245 GHz SiGe transmitter with integrated antenna and external PLL,” in IEEE IMS, 2013, pp. 1–3
An additional layer of air is added all around the drawn layout, and PML_8 absorbing boundaries are defined instead of the PEC metal box walls in most other models. To enable antenna pattern calculation, a NF2FF field sampling box is added to the model. The data evaluation code demonstrates various details of antenna pattern calculation as well as radiation efficiency etc.
This is an example for MIM capacitor modelling, demonstrating features like via array merging. The ultra thin MIM dielectric in the stackup is replaced by a thicker dielectric with larger permittivity, resulting in the same area capacitance. This is to prevent an ultra-small time step in simulation that would be required to resolve the ultra-thin MIM dielectric, slowing down simulation.
The resulting S-parameters can be used for simulation, but you can also extract a lumped element pi model using the mim-from-s2p tool.
For all models listed above, polygons for layout and port shape are read from GDSII files. This model is different, it shows how rectangles and polygons can be added by code lines. This can be used in addition to GDSII layout, or instead of GDSII layout.
This is a template to simulate a PCB using this flow to provide automatic mehsing.
- Export your PCB as Gerber-Files (Gerber X2 are preffered).
- Open KLayout and import your Gerber-Files.
- A window to choose Gerber-Files and map them to GDS-Layers would pop up. Map them as you will.
- Klayout creates polygon from the Gerber-Files. Modify them and merge polygons to delete unnecessary nodes.
- Define your ports and save the GDS.
- Adjust the "STACK_PCB.xml" file according to your PCB-stack.
- (Optional) Define your field dumps in "run_PCB_Line.py".
- Run simulation!
Results are attached to the simulation. Dumps were deleted to avoid exploding the storage. Gerber files could also be found in doc/PCB_Line directory.
If you simulate the same example, you will get these results:













