Release notes IPKISS 3.1.3

IPKISS 3.1.3 provides a new compact model framework. In addition, it contains several bugfixes and small improvements. Please check the changelog for the full list of changes.

The highlights are shown below:

New compact model framework

Redesigned model syntax

We redesigned the syntax to define compact models, to make it simpler to define, and more reliable to use. In addition, the definition of the compact model has been separated from the PCell, allowing better reuse, better performance and better scaling. The framework is backward compatible, allowing people to gradually convert to the new framework.

We did many changes in the backend to increases the robustness, performance, and stability of our compact models.

Here’s a peek preview on how a waveguide model looks like in the new syntax:

import ipkiss3.all as i3

class WaveguideModel(i3.CompactModel):
    """First-order dispersion waveguide model."""

    parameters = [

    terms = [

    def calculate_smatrix(parameters, env, S):
        dneff = -(parameters.n_g - parameters.n_eff) / parameters.center_wavelength
        neff_total = parameters.n_eff + (env.wavelength - parameters.center_wavelength) * dneff
        loss = 10 ** (-parameters.loss_dB_m * parameters.length * 1e-6  / 20.0)
        S['in', 'out'] = S['out', 'in'] = exp(1j * 2 * pi / env.wavelength * neff_total * parameters.length) * loss

Adding circuit models to libraries and PDKs

With IPKISS 3.1.3, it now becomes easier to augment a PDK or library with your own compact models (or reuse existing ones). They can be defined in a separate file and linked through the new CircuitModelView of a PCell.

Demolib has been upgraded to explain how models can be added. We also have a dedicated circuit model tutorial to help device engineers get started building their own models.

Time-domain API

There is now a simple time-domain API to set up test benches and run transient simulations. See the tutorial to learn how to define time-domain models and how to run time-domain simulations.

Overall improvements on the simulation side

Besides the improved syntax, there are several other improvements

  • Model compilation is now much faster and robust, and supports more of the Python language features,
  • models can be easily debugged interactively,
  • better exception handling,
  • models that are converted to the new syntax on average run faster. For example, on the filter toolbox, a speed improvement of ~ 25% is measured for running frequency-sweep simulations.

Bundled editor

In our continuous effort to make IPKISS easier to use, PyCharm IDE now becomes our default editor of choice. For users unfamiliar with PyCharm IDE: PyCharm is an Python editor with several important features that are useful for designing with IPKISS: powerful code completion, debugging tools, project management etc. Because of this, it fits well with our vision that photonics designers can build up their core IP as a set of modules and reuse throughout multiple projects.

By opening PyCharm from our Luceda Control Center, you have immediate access to all the code samples, and you can start new projects which are automatically set up to use the IPKISS interpreter:

Project in PyCharm

By default, samples are now installed in the user home folder, under <USER_HOME>/luceda/samples. When you create a new project in PyCharm, the default suggested location is <USER_HOME>/luceda/projects/project_name.

Custom routing in IPKISS.eda

PDK developers now have complete control over the way waveguides are generated inside their PDK when used in IPKISS.eda (i.e., triggered when pressing the ‘generate all waveguides’ macro). Different routing strategies can be defined and encoded in the PDK. See the changelog for more information on how to use it.

Routing in IPKISS.eda