Release Notes IPKISS 3.4

The IPKISS 3.4 design platform brings significant improvements to the performance and stability of IPKISS.eda, our module to integrate IPKISS with EDA tools. In addition, it brings a long list of small quality improvements and bug fixes to IPKISS. In addition, it brings a long list of quality improvements and bug fixes to the IPKISS Integrated Photonics design platform. Highlights are shown below:

  1. Product structure
  2. IPKISS.eda module
  4. Documentation
  5. Complete list of improvements and bugfixes (link to online doc)

1. Product structure

From IPKISS 3.4 onwards, we work from a single design platform upon which several design modules are put into place. As such we want to offer design teams maximum flexibility. For existing users there will be no changes in the functionality we deliver. The new structure looks as following:

Version 3.3 and previous As of version 3.4
IPKISS.eda IPKISS + IPKISS.eda module


2. IPKISS.eda module

With IPKISS 3.4, you can continue your work using the most recent versions of L-Edit from Mentor Graphics (version 2019 and up) in a faster and more stable design environment:

  • The biggest change to the user experience is that it is no longer required to launch L-Edit through the Luceda Control Center. Any design you open in L-Edit with an IPKISS 3.4-compatible PDK will now properly recognize IPKISS out-of-the-box.
  • The launch time, as well as the waveguide generation and PCell generation times, have been reduced.
  • In terms of multilibrary support, you can now work with projects that contain both IPKISS- and PyCell-based libraries at the same time. In addition, multiple IPKISS libraries based on the same technology work together seamlessly in L-Edit (e.g. a new waveguide type defined in the new library is recognized by the original library). This is similar to what’s possible to achieve when using IPKISS in Python.
  • It’s easier to define your own waveguide routes for use in IPKISS.eda (see changelog for more details and documentation links).
  • New 'Join' macro (in L-Edit: 'Luceda' -> 'SDL' -> 'Join') that connects devices based on a specified netlist (either imported from S-Edit, or imported from a spice file). Similar to the i3.Join method. This was previously only available for selected PDKs, but is now available generally.

It’s important to note that, when using L-Edit 2019 or newer, you need to have the latest version of the PDK which is compatible with IPKISS 3.4. Please get in contact with your foundry to retrieve an IPKISS 3.4 compatible PDK: list of PDKs, or check the porting guide if you are building libraries yourself: porting guide.



Quality-of-life improvements include:

  • A faster startup time
  • In some cases, a significant speedup compared to IPKISS 3.3 when generating large layouts with IPKISS (with > 1000 components)
  • New documentation
  • Updated packages: matplotlib upgraded from 1.5.3 to 2.2.3
  • Handling of more complex use cases by our new placement engine

It’s also important to note that as of the next IPKISS version, we will completely remove old-style CapheModels. New-style models are easier to build, maintain, and are equally fast or faster. Please check the changelog for more information.


4. Documentation

These are the improvements we made to the IPKISS documentation:

  • Terminology is important. When working together, it’s essential that we use the same ‘language’ to reduce communication barriers. In this release, we’ve added a glossary for topics around design automation, photonics, IPKISS, and programming: Luceda glossary. Let us know if you think terms are missing and we’ll add them!
  • We’ve updated the documentation theme to a modern format that’s easier to read on your smartphone or tablet.
  • We added a new reference on how PDKs are structured in IPKISS: PDK structure.
  • We wrote a small guide on how to update your conda environment (in case you want to install additional packages): conda envrionment setup.


5. Full list of improvements and bugfixes


  • During the installation of IPKISS, the installer sets the LUCEDA_PYEVAL environment variable (default option = on). For more info, check IPKISS environment variables.


  • New function: i3.polyval(coefficients, x_array) implements a fast polynomial evaluation which can take both discrete numbers as well as 1D or multidimensional arrays as input. This function can be used inside i3.CompactModel, see Polynomial dependent variables and coefficients.
  • Improvement: The cover layer of a TraceBundle no longer has zero-width spikes (present in some cases), which caused some DRC checkers to crash.
  • Improvement: When IPKISS is imported, matplotlib is no longer loaded, improving the IPKISS import time. Matplotlib is now only imported when necessary.
  • Improvement: Updated matplotlib 1.5.3 to 2.2.3.
  • Improvement: There is no longer an exponential increase in time with increasing number of PCells stored in i3.Library.
  • Improvement: IPKISS 3.4 is now compatible with Ansys Lumerical 2020 and later.
  • Improvement: GDSCell: better error message in case a certain cell is not found in the GDS.
  • Improvement: Properties which are defined on a PCell and are locked (locked=True), are now also locked on views (LayoutView, NetlistView, …).
  • Bugfix: Magnification now takes magnification_center into account.
  • Improvement: GDSCell now has a layer_map attribute, this allows you to specify a custom GDS input layer map.
  • Bugfix: The heuristic for calculating the default height of a port-monitor is now only invoked when this information is not specified.
  • Bugfix: CST Studio Suite ®: z_max of the simulation bounding box is now correctly used.
  • Bugfix: i3.device_sim.CSTTDSimulation and i3.device_sim.LumericalFDTDSimulation objects could not be reloaded after pickling to a file.
  • Bugfix: Shape.encloses() would sometimes give the wrong answer if the points of the shape were defined counterclockwise and inclusion was set to True.
  • Bugfix: Shape.remove_identicals() would sometimes remove points close together even though the points formed a valid, yet very small, shape.
  • Bugfix: BSplineSModel.from_smatrix() can now handle S-parameter sweeps with multimode terms.
  • Bugfix:BoundaryCutFilter (used in the GDSII output of most PDKs) did not preserve the transformation of the Boundary being cut.
  • Bugfix: place_insts can now Join and Align ports with names equal to the instances they connect and align to.
  • Bugfix: place_insts will now correctly honor the specs in more complex situations.
  • Bugfix: i3.NetlistFromLayout: unconnected ports will no longer be extracted in the netlist. A warning is given when unconnected ports are present.
  • Bugfix: SplineRoundingAlgorithm will no longer give an error when pickled. This means it can now be used from IPKISS.eda enabled applications such as L-Edit.
  • Change: ‘created’, ‘modified’ and ‘comment’ were removed as Properties on i3.PCell, but are kept as object attributes on LayoutViews imported from GDSII. The time of writing to GDSII is now used as timestamp by default, rather than the time of instantiating the Python PCell object. See Timestamps: created, modified for further information. Change: The ‘unit’, ‘grid’, ‘grids_per_unit’, ‘units_per_grid’ properties of LayoutView are now locked to the TECH settings. These were seldomly used. If you need a custom unit and/or grid for a specific LayoutView, you can still override its _default_unitand/or_default_grid methods`.
  • Removed the defunct ‘genericpdk’ package.


  • Significant improvements in performance and stability. More specifically:
    • The startup time of IPKISS inside an EDA tool is significantly reduced.
    • No timeouts occur when instantiating large parametric designs.
    • Waveguide generation is faster and more responsive.
    • L-Edit can be launched directly from the start menu, it doesn’t have to be launched from the Luceda Control Center.
    • Several synchronization issues when saving a design in L-Edit have been fixed.
  • Improvement: Waveguide routes are now defined as functions that take start_port, end_port and shape as input, and return a (shape, waveguide) tuple. It’s now also documented how to add them to the technology: Routing settings.
  • Change in L-Edit: Waveguide instance naming has changed, they are now called wg0, wg1, … This does not have an effect on generated GDS files, but only on the instance names inside L-Edit.
  • Improvement: A daily rotating log file is now used. The location of the log files is by default %APPDATA%\luceda\logs on Windows and $HOME\.luceda\logs on Linux.
  • Improvement: A tanner exporter has been introduced in the <pdkname>.cfg file. This exporter specifies that you want to use the autoload.tanner which loads the IPKISS.eda macros in L-Edit. If you want to make a custom autoload.tanner you must use the files exporter to copy it to the right location (<pdkname>/openaccess/<pdkname>/autoload.tanner) and not use the ‘tanner’ exporter in the <pdkname>.cfg file.
  • Bugfix: Extra files can now be copied to the exported OpenAccess database using the files exporter in the <pdkname>.cfg file. This is useful for copying tool-specific settings data or scripts which need to be in the same location as the OA data. Previously, there was an interaction which caused lib.defs not to be generated. This has been fixed.
  • Change: The location of the log files can now be overridden using the LUCEDA_LOG_DIR environment variable. LUCEDA_IPKISSEDA_LOGFILE is not used anymore.
  • Bugfix: The library name as defined in libs.def does not have to be the same name as the IPKISS library to import.
  • Bugfix: A custom technology location (other than pdkname/technology) is now supported in the lib.yml Contents File generated by IPKISS.eda, when specified in the <pdkname>.cfg Config File. As a result, a custom technology location can now effectively be used.


  • New: Managing conda virtual environments and installing extra packages.
  • The Glossary has been extended.
  • New: PDK reference guide.

Backward compatibility notes

  • IPKISS.eda: the following combinations are valid:

    • PDKs built with IPKISS <= 3.3 can be used with L-Edit <= 2018
    • PDKs built with IPKISS >= 3.4 can be used with L-Edit >= 2019
  • The “Luceda -> Pin propagation” macro will no longer generate nets in the layout.

  • For PDK developers: waveguide routes for use in EDA tools are now defined as functions. They need to return a (shape, waveguide) tuple. See also Routing settings.

  • The LUCEDA_IPKISSEDA_LOGFILE environment variable has been deprecated and replaced by LUCEDA_LOG_DIR. A daily rotating file log is now used, and the LUCEDA_LOG_DIR environment variable now controls the directory where the logs should be stored. When not set, %APPDATA%\luceda\logs (typically C:\users\yourusername\AppData\Roaming\luceda\logs) on Windows or $HOME/.luceda/logs on Linux will be used.

  • This is the last release to still support old-style CapheModels. Defining old-style models (CapheModelView) will be disabled in the next IPKISS version. New-style models are easier to create, faster to compile, and more robust. If you haven’t done yet, please check Porting circuit models and user code from IPKISS 3.1.2 to IPKISS 3.1.3 on how to convert your models from old-style to new-style.

Starting from our extensive validated component library, we can assist you in the creation and validation of new model libraries