Changelog
Luceda Photonics Design Platform
Luceda Photonics Design Platform 2024.09.1
IPKISS
Improvement: The performance of placement and routing selectors (e.g. ‘@N’, ‘@E’), as well as other functionalities that need to access the size of a layout element, has improved.
Bugfix: Fixed a routing bug where some connections were not generated due to a naming conflict, all connections have unique names now.
Improvement: removed some unnecessary polygon operations during boolean operations between IPKISS elements. This can significantly improve performance of boolean operations in certain cases. In some cases, when i3.Path is used, cutting of closed shapes after boolean operations can be slightly different, but XOR-equivalent and without effect on the layout. See Boolean operations (2024.09.1) for an example.
Canvas
Improvement: The execution of a codelet can be interrupted now.
Improvement: When closing canvas, all running codelet processes will be properly terminated.
Improvement: When opening a new schematic, the circuit will now be centered in the middle of the screen.
Improvement: When creating or editing a codelet, error messages are removed upon correction of int/float errors and invalid parameter values disable the create/save button.
Improvement: The codelet output window is now resizable.
Bugfix: The project is marked with unsaved changes when making a change to a codelet in the project or a schematic.
Bugfix: When editing an existing codelet, the correct image is now displayed in the dropdown menu
Bugfix: Undoing dragging a codelet onto a schematic will no longer crash when the properties pane is open.
Luceda Link for Tidy3D
Improvement: New section in the Tidy3D tutorial that explains how to change the medium of the chosen structure in the Tidy3D simulation to an arbitrary one supported by Tidy3D (with a Sellmeier model as example).
Improvement: warnings of Tidy3D engine are now appearing, even if the code executes without errors
Improvement: The distributed version of Tidy3D has been updated to 2.7.1
Improvement: Tidy3D backend does not rely on code generation anymore, improving flexibility
Bugfix: Running Tidy3D FDTD Simulations using
i3.device_sim.Tidy3DFDTDSimulation
in notebooks is fixed.
Luceda control center
Improvement: Added Tidy3D license to license tab.
Improvement: Handling of Luceda IPKISS licenses is made more robust. This should fix occasional errors when adding a new license.
Luceda Photonics Design Platform 2024.09.0
IPKISS
New Feature: the connectors:
i3.ConnectBend
,i3.ConnectManhattan
, andi3.ConnectManhattanTapered
now accept optional start_taper_length and end_taper_length parameters, allowing to set the respective transition lengths.New Feature:
i3.join_shapes
joins shapes together. See Join shapes.New Feature:
i3.ShapeCoupler
is a new shape, that can be used for a coupler.New Feature: Two new S-bends have been added:
i3.ShapeHermiteSBend
andi3.ShapeEulerSBend
.New Feature:
i3.Codelet
is a new class that has been added to write your own codelets for use in your IPKISS script and IPKISS Canvas. Inherit from this class and implement the run function to create your custom codelet.New Feature:
i3.SMatrixSweepCodelet
has been added to IPKISS as a builtin codelet for quickly running a frequency domain circuit simulation on your design.New Feature: Loading a custom codelet directly from a file (without having to import it in Python) with the new
i3.load_codelet
helper function.Improvement: Visualization improvement for Basic shapes in documentation.
Improvement:
i3.RestrictType
does not accept None as a valid value anymore. See RestrictType does not allow None.Improvement:
i3.ShapeEllipseArc
and all subclasses have a default set value for start_face_angle and end_face_angle.Bugfix: 90-, 180- and 270-degree rotated instances of
i3.SoftRotationARef
are now correctly exported to GDSII.Bugfix: Instance parameters overridden in Canvas are correctly passed to views/top level PCell when loading the schematics in IPKISS (using
ConnectComponents.from_canvas
orload_design
).Bugfix: A memory access violation when visualizing zero length shapes is now resolved.
Bugfix: the default material stack in vfabrication is now derived instead of relying on the first entry in the process_to_material_stack_map list.
Bugfix: Port lists support indexing with numbers.Integral types, and throws exception for unsupported index type. Previously, ports[np.int64(0)] would return None.
Bugfix:
i3.ShapeRound
now correctly tightens the bends where there is not enough space to fit a bend with the desired radius. The behavior now is as it was before 3.10.Bugfix: Visualizing an empty layout no longer throws an exception.
Deprecation: ipcore.tree.FallbackConfigTree and ipkiss.technology.technology.TechAdminTree are deprecated. Use TechnologyTree instead.
Removal: StackARef was removed.
Removal: Removed duplication and deprecated modules and symbols in ipkiss3.core and ìpcore.types. See backward compatibility notes.
Removal: Removed deprecated module ipkiss3.core.moduleloader.
Removal: Deprecated ipkiss.aspects.matplotlib_figure was removed, use ipkiss.visualization.matplotlib_figure instead.
Removal: Deprecated ipkiss.aspects.port was removed, use ipkiss3.pcell.layout.port instead.
Luceda Academy
New Example: Optical Transceiver design using OpenLight PDK.
New Example: MMI optimization using Luceda Link for Tidy3D.
Improvement: si_fab.iclib is regenerated. Most notable change is the removal of the cladding_offset parameter from the DirectionalCoupler classes.
Improvement: The advanced example in the Circuit Layout tutorial was modified to provide a better explanation on the relative placement and routing features in IPKISS.
Improvement: A visual representation of the various anchor points of an instance was added to the Symbol API reference page.
Improvement: The sample gallery example on using the advanced placement and routing features of IPKISS was converted into a tutorial in the IPKISS guides.
Bugfix: The error in the frequency domain simulation of phaseshifter is now fixed.
Change: Default location got changed from C:/Users/[NAME]/luceda/luceda_academy/luceda_[VERSION]/ to C:/Users/[NAME]/luceda/luceda_academy/luceda_academy_[VERSION]/
Canvas
New Feature: Added Cross-platform start menu entry to launch canvas.
New Feature: Codelets have been added to Canvas. Codelets allow running small code snippets straight from your Canvas schematic. For example, you can now run a circuit simulation using the builtin SMatrixSweep codelet (stored in the generic_devices library), or you can create your own custom codelets in a library.
Luceda Link for Tidy3D
New Feature: Tidy3D FDTD Simulations can be run using
i3.device_sim.Tidy3DFDTDSimulation
.
IP Manager
Improvement:
ip_manager.testing.ComponentReferenceTest
’s Compare.GdsToGds now ignores differences between polygons that are only due to a different start or end point.
Installer
Improvement: We’ve transitioned to using Conda Constructor for our installer, offering a smoother and more reliable setup process.
Improvement: The uninstaller process is now more comprehensive, ensuring complete removal of all related files.
Change: Default location for the ipkiss3 environment got changed from C:/luceda/luceda_[VERSION]/python/envs/ipkiss3 to C:/luceda/luceda_[VERSION]/envs/ipkiss3.
Luceda Photonics Design Platform 3.12.2
IPKISS
Bugfix: Removing consecutive identical points from shapes works correctly when a shape starts with more than two identicals.
Bugfix:
i3.PolygonText
is now correctly flattened ini3.get_layer_elements
.Bugfix: Using merge_with_klayout in additional_utils will correctly merge designs with the same unprefixed cells.
Bugfix: Using merge_with_klayout in additional_utils now works on linux as well.
Performance improvement: numba is now only loaded when needed, speeding up the import time of IPKISS.
Performance improvement: transformations on numpy arrays have been optimized.
Performance improvement: Optical netlist extraction on large circuits has been significantly improved.
Change: Joblib is no longer installed as part of the luceda conda environment. For saving and loading smatrices, please use
to_touchstone
andi3.circuit_sim.SMatrix1DSweep.from_touchstone
instead.
Luceda Academy
Luceda Academy was restructured to make it easier to find the relevant information. Learning material for each product, examples and API documentation are now each in their own navigation section.
New Feature: Luceda ADK for PHIX gets distributed with Luceda Academy.
Canvas
Bugfix: Clicking the new tab button no longer crashes when cards are present on the current schematic.
Caphe
Performance improvement: Significant speedup for frequency based simulations on circuits with > 1500 ports.
Luceda Photonics Design Platform 3.12.1
This is a minor bugfix release.
IPKISS
Bugfix: Driver for the Luceda Ansys Lumerical Link is not loaded when loading IPKISS, to avoid license key checkout.
Luceda Photonics Design Platform 3.12.0
In Luceda 3.12 we extend the functionality of our P&R engine with new type of anchors and relative waypoints. There is also a new electrical bundle connector. Layouts can be verified for overlaps between layers, and can be exported to 3D formats (stl, obj). New visualization routines are available for circuit simulation, and compact models now natively support a temperature environment variable.
IPKISS
New Feature: A
i3.get_layer_overlaps
to return elements of all the overlapping shapes in a specified list of layers.New Feature: A new type of connector,
i3.ConnectElectricalBundle
, to easily connect multiple start and end ports together using electrical wires.New Feature: A
i3.device_sim.SimulationGeometry
can now be written to Wavefront OBJ file withwrite_obj
.New Feature: A
i3.device_sim.SimulationGeometry
can now be written to STL files withwrite_stl
.New Feature: The visualize method of
i3.LayoutView
now accepts an optional grid parameter allowing the user to switch the grid lines on/off.New Feature:
SMatrix1DSweep
has two new methods to visualize the S-matrix:visualize
andvisualize_2d
. See example Loading a touchstone file and plotting scatter matricesNew Feature: The size_info functions accept an optional layers parameter where relevant, allowing for selecting the layers to be taken into account when calculating the SizeInfo, see the sample:
samples/ipkiss/basic_layout/sizeinfo_layers.py
.New Feature:
i3.Place
now has sub-specifications which allow for the X, Y and rotation parameters to be specified individually (i3.Place.X
,i3.Place.Y
,i3.Place.Angle
).New Feature:
i3.Place
now accepts a relative_to arguments which can be used for placing instance or ports relative to another instance or port. See Symbols and placement and routing tutorial for more information about symbolic references with relative_to.New Feature: Control points in connectors (i3.H, i3.V, i3.CP, i3.VIA) now support the
relative_to
argument. This enables routing relative to instances/ports for obstacle avoidance. See Symbols and placement and routing tutorial for more information..New Feature:
i3.EyeDiagram
provides eyediagram visualization based on time-domain simulation results.Change: i3.PlaceRelative has been deprecated in favour of using the new relative_to argument of
i3.Place
. See the compatibility notes for more information.Improvement: The required numpy version has been updated to 1.26, a few deprecated functions and methods have been removed. You can check the numpy release notes to see if this impacts you: NumPy 1.26.0 Release Notes.
Improvement: The shapely and geos packages were updated to 2.0.2 and 3.12 respectively. The numerical value of vertices of boolean operations will remain the same, but the order might change.
Improvement: Rotations of
i3.Label
objects will apply to their position.Improvement: Exporting of
i3.Box
objects to XML aligned with exporting to GDSII, i.e. rotated objects exported asi3.Boundary
.Improvement: pdk_tools can now build a PDK without checking out an oascript license when no OpenAccess library is exported
Bugfix: When visualizing a layout that had a polygon that exceeded 65536 points, the polygon was cut off at that mark. This has been fixed. This bug only impacted visualization.
Bugfix: For some combinations of coordinate and defining properties of
i3.SizeInfo
objects, the move method was resulting in an incorrect transformation. This has been fixed.Bugfix:
i3.device_sim.SimulationGeometry
will now exclude zero-area polygons while creating 3D structures.
Canvas
New Feature: DEMUX1x2 symbol is added.
Improvement: Added a home button to quickly close the current project and go back the main menu, without having to restart the application.
Improvement: Symbol editor: option to copy exposed terms from schematic, option to add and/or remove terms by clicking on the symbol (with option to change the snap distance), highlight term on symbol when hovering its row, more compact layout, and show grid behind symbol.
Improvement: The behavior of MirrorX/Y when combined with rotations is made consistent with FlipH/V specs in IPKISS Place&Route engine. The code generated from Canvas schematic will result in the same layout in IPKISS.
Improvement: Cards now take take into account parameter visibility when determining their initial size
Improvement: Components defined in a script are now properly exported.
Improvement: Components defined within namespace packages can now be exported, though we encourage to use regular python packages whenever possible.
Improvement: Cards now take take into account parameter visibility when determining their initial size.
Bugfix: Fix error that occurred when deleting an already connected term in the symbol editor.
Bugfix: Fix label positioning of rotated symbol instances.
Bugfix: Fix error that occurred when deleting a term in the symbol editor that has a connected on the Schematic.
Bugfix: Fix rotated component instance label positioning.
Bugfix: The generic_devices grating coupler center_wavelength parameter now correctly converts from micrometer to meter when running a circuit simulation.
Luceda Academy
New example: Temperature-dependent simulation of a MZI.
New example: Analyzing Kerr nonlinearity in optical ring resonators.
Improvement: Placement and routing specifications tutorial is updated to cover more options when placing and/or routing your components using
i3.Circuit
.Improvement: Specification summary is added to Placement and Routing Reference.
Improvement: The tutorial “Arrayed waveguide grating (AWG) demultiplexer” has been reorganized into two tutorials: Designing an AWG and Maintaining an AWG for tape out.
Improvement: The DirectionalCoupler components have been improved to avoid self intersecting shapes in certain edge cases.
Improvement: The tutorial “Temperature sensing with SOI waveguide Bragg gratings” has been reworked to use the external temperature from environment at the level of get_smatrix, not as a model parameter.
New design: A new design involving an IQ modulator has been introduced. This design investigates an IQ modulator packaged using the phix ADK and operating in various modulation formats. Additionally, the design presents simulation results for RF signals, eye diagrams, and constellation diagrams.
IPKISS Link for Siemens EDA
Improvement: The supported OpenAccess version has been updated to 22.60. As a result you need to use L-Edit 2023 or later.
Compact Model Library
New Feature: A new waveguide model,
i3.cml.WG3
, that allows the effective index to vary with wavelength and temperature and works in both time and frequency domain.
Caphe
New Feature: get_smatrix and get_time_response methods of
i3.CircuitModelView
now accept an optional temperature parameter and pass it to Caphe so that temperature-dependent simulations are possible.New Feature: progress_bar and verbose added to
get_smatrix
and verbose added toget_time_response
to show a progress bar and print timing information in Caphe simulations.
Installer
Improvement: The bundled Python version has been updated to 3.12.
Luceda Photonics Design Platform 3.11.2
This is a minor bugfix release.
IPKISS
Bugfix: fixed a bug where
i3.NumpyArrayProperty
would raise warning when calling to_canvas.Bugfix: Fixed a bug where
i3.LayerFilterAllow
andi3.LayerFilterDelete
would not work withi3.ProcessPurposeLayer
.Bugfix: Fixed a bug where
i3.RouteManhattan
would not correctly use get_bend90_size in some cases.Bugfix: Fixed a bug in
i3.ConnectManhattan
andi3.ConnectManhattanTapered
where fixed_bend90 in some cases got replaced by an autogenerated bend.
IP Manager
The default ref_time reference timestamp in GDSII reference files (configurable with the ref_time fixture) is now June 10th 2014, 10h10m10s UTC, instead of January 1st 1970, 00h00m00s. In this way timezone-related issues are avoided when using IP Manager.
Luceda Academy
Bugfix: Corrected the waveguide connections in the MZI PCell in pteam_library_si_fab.
Bugfix: Corrected the names of the parameters of the grating coupler in the exercise in the tutorial: Component layout.
Luceda Photonics Design Platform 3.11.1
This is a minor release featuring bugfixes and small improvements.
IPKISS
Bugfix: The created attribute of views such as LayoutView is now using UTC timezone, just like layout views read from a GDSII file. As a result, both can be combined again into output GDSII files.
Improvement: The behavior of
i3.Box
objects under rotations is defined. Rotated objects will be converted toi3.Boundary
on GDSII I/O to ensure consistent layout visualization between IPKISS and GDSII tools (e.g. KLayout).
Canvas
Improvement: Check for duplicate names when creating a library or cell, while typing.
Luceda Academy
New example: how to extract a netlist from a layout with multiple metal layers and vias.
Bugfixes: removed references to Python tutorial and updated description of the support portal.
Improvement: si_fab: Fixed the waveguide cladding layers for the crossing, directional coupler and Y-branch cells.
Improvement: si_fab: Use a smaller cladding around the directional coupler waveguides and demonstrate how to avoid acute angles. Removed the cladding_offset property and use the cladding width of the trace template instead.
Improvement: si_fab: The cover_layers property is now defined on the waveguide templates. Specifying the manhattan=True argument to RoundedWaveguide and the cover_bends argument to ConnectManhattan will now generate rectangles in the bends.
Installer
Improvement: the ipympl and ipytree notebook widgets have been added.
Bugfix: the ipykernel jupyter notebook kernel is now properly registered on Windows.
Luceda Photonics Design Platform 3.11.0
In Luceda 3.11, Luceda Academy and the software reference documentation, tutorials, guides and examples were merged into a single training and documentation platform, Luceda Academy.
General
IPKISS
New Feature: A new type of control point,
i3.VIA
, that allows to place vias and change layers when used withi3.ConnectElectrical
.New Feature: A new type of control point,
i3.CP
, that unifiesi3.H
,i3.V
and tuple-like control points.New Feature: added a new type of fanout
i3.ManhattanFanout
used with a bundle connectori3.ConnectManhattanBundle
New Feature: a to_lyp method has been added to
DisplayStyleSet
to export the ipkiss display settings to a .lyp file that can be read by KLayout.New Feature: added fixed_bend90 option to
i3.ConnectManhattan
andi3.ConnectManhattanTapered
which allows reuse of a defined 90 degree bend inside the connector.New Feature: added fixed_bend90 option to
i3.TaperedWaveguide
which allows reuse of a defined 90 degree bend inside the waveguide.Improvement: A performance limitation was removed in dictionary objects such as InstanceDict, when a lot of elements (1000s) are inserted into the dictionary.
Improvement: from_canvas provides a better error message in case an IPKISS cell cannot be found. This may happen if the iclib file and all.py are not in the same location.
Improvement:
write_gdsii
now has a timestamp argument which can be used to set the GDSII timestamp. This makes it easier to track changes when managing your library. The underlyingFileOutputGdsii
already supported this.Improvement: expand_transform of the BoundaryPath element will not apply a transformation on the centerline_shape when the transformation is an IdentityTransform.
Improvement:
i3.ConnectManhattan
andi3.ConnectManhattanTapered
have the properties cover_bends and cover_layers which allows the configuration of covers on top of bends.Change: TypedDict, TypedAttrDict, NamedTypedDict, NamedTypedAttrDict and TypedDictProperty have been retired in favor of classes with the same name but with an Ordered prefix (e.g. OrderedTypedDict). They are still present (hence code relying on it will keep on working) but are identical to the Ordered classes. Since python3.7, all dictionaries remember insertion order, the remaining classes expose the full OrderedDict behavior (mainly for comparing objects).
Change: ProcessorTypeCast will return the original value in case casting raises an exception. This way validation can raise the appropriate error for incorrect input. This behavior is now similar to for example ProcessorFloat.
Change: TimeProperty now stores the time as a datetime.datetime object instead of a number. If a float value (timestamp, number of seconds since the January 1st 1970), it will be converted automatically. If no default is provided, the current date and time in UTC timezone will be taken. If you have been using TimeProperty actively, please see TimeProperty.
Change: When reading GDSII files, the Library and Structure (Layout view) timestamps in GDSII files are now interpreted as UTC time. When writing GDSII files, the timestamps are written as UTC time.
Change: from_canvas now prioritises diving through the entire schematic hierarchy as described in the IPKISS Canvas project, over instantiating symbols
Change: numpy is upgraded to version 1.23. You might have to update your scripts to be compatible with this version, see our compatibility notes for more information.
Change: Intermediate ports used in a
i3.Connector
must now always be assigned a unique name. You might have to update your scripts to be compatible with this version, see our compatibility notes for more information.Change: Updated to_canvas so term positions on IPKISS Canvas symbols are now defined relative to the center of the symbol instead of its south-west corner.
Change: the Netlist generation for
i3.TaperedWaveguide
is based on NetlistFromLayout. This is done to support fixed bends. The instance names and term names will differ because of this.Bugfix: Nested json files are now correctly parsed in from_canvas.
Bugfix: Passing incorrect input to Coord2 will return a proper error message.
Bugfix:
i3.TaperedWaveguide
andi3.ConnectManhattanTapered
now won’t generate straight waveguides that are smaller than min_straight_section_length (defaults to i3.TECH.WG.EXPANDED_STRAIGHT). In tapered AWG bundles, we ensure the original behavior is kept, i.e., min_straight_section_length is set to 0 for the TaperedWaveguide. This is to ensure each waveguide in the bundle has a taper.Bugfix:
i3.ARef
will now use the default of the origin property when not passed to the constructor.Bugfix:
i3.Box
elements are now exported to and imported from GDSII with their correct GDSII layer datatype.Bugfix: GDSII files created with a timestamp on January 1st 1970 can now be read from a more eastern timezone.
Bugfix: The locked t_max parameter of
i3.RadialSBend
has been corrected to be 1.0. This does not affect the shape generation.Bugfix: _default_spread_angle method of picazzo3 fiber coupler gratings is now using wide_trace_template property instead of end_trace_template
Bugfix: Using an
i3.ElectricalPort
without a specified angle ini3.ConnectElectrical
will not cause a crash anymore.Bugfix: avoid a double calculation of center_line_shape property of RoundedWaveguide
Bugfix: Visualising a layout that uses an
i3.ARef
with a rotation transformation applied to it will show correctly.Improvement: The documentation of the visualize method of
i3.LayoutView
has the box input parameter removed as the functionality is removed.Bugfix: RouteManhattan will now not crash on some edge cases when routing through control points
Improvement: The position of the legends for LayoutView.visualize_2d and MaterialStackGeometry2D.visualize are now configurable and will be to the right of the figure by default.
Canvas
Bugfix: Added validation to not allow existing or incorrect names when creating a project, library or cell, nor when renaming a library, cell or optical term. Existing names respectively within the same project, the same library or same schematic.
Bugfix: Allow the minus sign to be entered in the position field (properties pane symbol instances / external terms) to start typing negative values.
Bugfix: Corrected symbol position when rotated 90° or 270°. This fixes the position displayed in the properties pane, selection with the the selection rectangle, alignment of the symbols, positioning of symbol labels, and the result of show whole schematic.
Bugfix: Disable form submit when there is an invalid name.
Bugfix: Duplicating a cell and then removing the original cell no longer removes the terms of the duplicated cell.
Bugfix: Fix label background clipping that occurs with some single letters.
Bugfix: Fix to no longer show symbol image mirrored vertically.
Bugfix: Label size and positioning now update correctly when zooming in and out
Bugfix: Let tablist extend full width.
Bugfix: Made it possible to always reach the zoom limits. And added validation to the zoom limit input fields to only allow values in discrete steps.
Bugfix: Made resizing a card follow the mouse movements also when zoomed in or out.
Bugfix: Make a net’s card associations always connect to the middle of the net.
Bugfix: Make all references update when renaming a library.
Bugfix: Make the selection box to correctly select Manhattan routes.
Bugfix: Code template ‘Circuit simulation’: during plotting, plot from the first defined optical port to all other ports (S[‘A’, ‘B’] means transmission from port B to port A).
Improvement: Allow horizontal scrolling in the tablist without pressing shift.
Improvement: Changed the reference for placing symbols and terms. Symbols now rotate and are placed with respect to their center, and instance terms are positioned relative to the symbol center. Symbol and instance term positions will be automatically adjusted when saving an older project/library in the new version of IPKISS Canvas.
Improvement: Greying-out the zoom buttons when you can’t zoom in/out anymore.
Improvement: Improve layout, to: not have error messages break or change layout; generalise dialog widths; not have longs paths enlarge dialogs; align input text and error message.
Improvement: Made error message clearer: message when loading a newer .iclib file in an older canvas.
Improvement: Made pasted and duplicated items to be selected.
Improvement: No longer have clicking on the library rename input toggle the collapsible.
Improvement: Rename ‘Library path’ to ‘library location’.
New Feature & change: Panning via a trackpad is now possible. This can be enabled by holding shift and/or ctrl or set to be default with a new configuration option. For more explanation, users can hover over the information icon in the configuration menu.
New Feature: Added context menu option in the Library pane to open library files in the file explorer.
New Feature: Added the option to open a project or add a library by drag and drop of the .icproject or .iclib file.
New Feature: Added the option to remove projects in the recent projects list or clear all.
IP Manager
New feature: For Layout regression testing (comparing to reference GDSII or XML files), polygons can now be compared using a XOR test. This avoids that polygons that are functionally identical but have a different cut face, starting point or direction are seen as different.
Change:
ip_manager.testing.ComponentReferenceTest
will now compare polygons with a XOR test by default. A fixture is available for turning off this behavior and do a more exact comparison, see Exact polygon comparison.
Picazzo
Bugfix: Passing of transition parameters from
AutoTransitionPorts
to the transitions now also works if the straight_extension parameter is set to None.Bugfix: Auto-transitioning between 2
SocketWaveguideTemplate
or between 2SlotWaveguideTemplate
now creates a transition with nonzero default length. New transition classes were added for the two cases, see Socket Waveguides and Slot Waveguides.
Luceda Academy
si_fab: The demonstration silicon photonics PDK has been extended to support the PCells in the Picazzo library.
si_fab: The waveguide cladding layers were changed: SiWireWaveguideTemplate and SiNWireWaveguideTemplate now have a dedicated cladding layer (TECH.PPLAYER.SI_CLADDING and TECH.PPLAYER.SIN_CLADDING, respectively). This layer is not visualized but is taped out to GDSII.
si_fab: A layer TECH.PPLAYER.SI_TRENCH was added to allow gratings to be etched into silicon waveguides, for use with Picazzo waveguide gratings.
Improvement: Use
i3.ConnectElectrical
for electrical routing in various examples.Bugfix: si_fab: Set the correct metal layer and trace template on electrical ports of the ProbePad cell.
Examples in the ipkiss3, picazzo3 and awg_designer reference documentation were updated to use si_fab.
Improved search experience with better search results.
si_fab: Added trace_template to electrical ports of PhaseShifterWaveguide, BondPad, HeatedWaveguide and Resistor.
Luceda Photonics Design Platform 3.10.1
This is a minor release featuring bugfixes and small improvements.
Luceda Academy
Bugfix: Every property that returns a PCell uses as default method instead of a default value (e.g. _default_grating(self): return MyGrating() method is used instead of default=MyGrating()).
Bugfix: Fixed the incorrect default property definition of UnitCellRectangular and UniformWBG in pteam_library_siepic.
Improvement: WaveguideBend in si_fab uses SWG450 as the default trace template.
Improvement: Added build_iclib.py and IPKISS Canvas .iclib file with symbol drawings for the pteam_library_cornerstone_sin,`pteam_library_si_fab` and pteam_library_siepic.
Improvement: Mux2` definition from wdm_transmitter_mzi training is moved to pteam_library_si_fab.
Luceda Photonics Design Platform 3.10.0
Luceda 3.10 marks the first release to feature IPKISS Canvas, a new graphical user interface to visualize existing designs and assist the user in creating new designs. In addition, Luceda IPKISS 3.10 contains a new drawing primitive, improved electrical routing, multilayer electrical netlist extraction, several performance improvements, updates to several core dependencies.
General
Improvement: Various packages used by our software platform are updated. Among others, we bumped conda from 4.12.0 to 23.3.1, shapely from 1.6.4 to 2.0.1, numpy from 1.16.6 to 1.21.0, scipy from 1.6.1 to 1.10.1, matplotlib from 3.4.3 to 3.7.1, numba from 0.47.0 to 0.57.0, atom from 0.8.1 to 0.8.2.
IPKISS
New Feature:
i3.ConnectElectrical
, a connector that usesi3.RouteManhattan
to connect two electrical ports and returns an instance ofi3.ElectricalWire
. Any start and end angle can be provided for the route.New Feature: Netlist extraction can now extract the full electrical nets (before only optical nets were extracted and overlapping electrical ports). This feature can be enabled with extract_electrical_netlist of
i3.NetlistFromLayout
. To customize the netlist extraction (i.e., define VIAs), you can use the newi3.NetlistExtractionSettings
.New Feature: added support for curve shapes defined by a parametric function:
i3.ParametricShape
.New Feature: added raised sine, cosine and radial s-bends. See S-bend Shapes.
New Feature: A figure can now be passed to every visualize method with .visualize(figure=figure), meaning that that figure will be reused. See Overlaying multiple plots for an example.
Change: the port_angle_decision property of any classes with a port list was removed. Use e.g. get_west_ports(angle_decision=80.0) instead.
Change: shapely symbols (e.g. Polygon, MultiPolygon, GeometryCollection) are not in ipkiss3.all anymore. If you use these, import them from shapely directly.
Change: The ipkiss2 backward compatibility packages have been removed. This only affects code from before 2014. Refer to Porting from Ipkiss 3.9 to Ipkiss 3.10 for details.
Change: The remaining ipkiss2 classes with define_<propertyname> methods have been migrated to use _default_<propertyname>. Users inheriting from such classes will get a deprecation warning. See Removal of IPKISS 2.4 define_ methods inside IPKISS for details.
Change: The use of the term property on Port was deactivated. It can still be assigned for backward compatibility reasons but will have no effect anymore.
Change: The default installation path on Windows changed from C:lucedaipkiss_[VERSION] to C:lucedaluceda_[VERSION].
Removal: Library.visualize_structures_2d and Library.visualize_structures_3d were removed.
Improvement:
i3.MaterialFactory
andi3.MaterialStackFactory
have an improved repr().Improvement: Performance improvement for boolean operations such as
i3.get_elements_for_generated_layers
,i3.merge_elements
andi3.subtract_elements
, by avoiding unnecessary copies.Improvement: The shapely and geos packages were updated. This may lead to polygons being cut differently during operations on polygons such as boolean operations as well as virtual fabrication. See Known changes and backwards incompatibilities in 3.10.0 for more information.
Improvement: many performance improvements were made, leading to an overall faster IPKISS (depending on the specific design, it can be about 0.5 - 2x faster). See below for more details.
Improvement: performance improvements GDS-input
Improvement: several algorithms which are in the critical path for design definition, waveguide drawing and GDSII export have been made faster. For medium and large sized designs this can give noticeable speed improvements of layout generation and export.
Improvement: suppressing certain properties during initialization of a StrongPropertyInitializer is disabled by default. This makes initialization faster. See Disabled SUPPRESSED for details.
Improvement: Various classes were made more lightweight, which means then can only have IPKISS Properties (such as DefinitionProperty, NumberProperty, …) and no vanilla python attributes. See Simplified basic classes for a full list of classes affected and potential impact on your code if you inherit from those.
Improvement: the visualization engine has been improved and made significantly faster. The visualization will now also take the stipple property of the
DisplayStyle
into account. To visualize a layout the old way, use visualize(legacy=True).Improvement: Transformations (Rotation, Translation, …) as well as ARef, ARefX and ARefY were adapted not to use the SUPPRESS feature anymore.
Improvement: SRef is not a MRef anymore and does not have the _positions and _untransformed_positions methods and the positions property anymore.
Improvement: Added filter argument to
i3.LayoutView.write_gdsii
to be able to override the default GDSII filter.Improvement: If a port list is indexed with a North/East/South/West label for a non-existent port, a more relevant error message is shown. Eg. if there are 2 west-oriented ports and the user asks for port “E4”.
Improvement:
i3.Material
,i3.MaterialFactory
,i3.MaterialStack
,i3.MaterialStackFactory
are now available in ipkiss3.all.Improvement: documented the layout filter classes.
Improvement: numpy.polyval can now be accelerated with numba. This makes ipkiss3.numerical.polyval obsolete. The function is still here for backward compatibility but may be removed in the future. Please check the porting guide for more details.
Improvement: the ipkiss3 conda environment is now better isolated and won’t pick up Python packages placed in the usersite directory.
Improvement: get_nets_for_instance will now do a name-based search instead of doing full comparison.
Improvement:
ElectricalWire
is now a RoundedTrace and accepts rounding parameters like rounding_algorithm and bend_radius.Improvement: Several routing utilities (get_bend_size, get_bend90_size, maximum_bend_radii, get_bend_segment, get_rounded_trace_shape) accept a value of None for rounding_algorithm
Improvement: GDSII files with large polygons (>8191 vertices) can now be imported. Note this is not officially part of the GDSII standard but some 3rd party tools write multiple coordinate datasets into one polygon to circumvent the limits. When writing a GDSII file, IPKISS will by default always cut large polygons into GDSII-compatible chunks.
Bugfix: Control points can now accept symbols without having to add a constant (e.g. i3.H(i3.END)).
Bugfix: Labels, SRefs and ARefs are now correctly snapped to a custom defined grid on GDS export.
Bugfix:
UniformLineGrating
now correctly uses its origin parameter so that the grating can be positioned within the waveguide socket.Bugfix: the id of i3.Layer is made more robust to reduce the probability of collisions.
Bugfix: A
i3.ToggledCompoundFilter
(like TECH.GDSII.FILTER) can now be used if all its filters are disabled or if it has no filters at all.Bugfix: The line_width property of a Path now survives copying of the Path by means of copy() or Path.modified_copy().
Bugfix: Iteration over a MaterialFactory was broken in python 3.
Bugfix: Changing overwrite_allowed of a ConfigTree (or TechnologyTree) object does not change overwrite_allowed of other ConfigTree (TechnologyTree) objects anymore.
Bugfix: The instance name of connectors connecting to a port object now takes into account the required precision of the port coordinates and angle. This ensures reproducibility during regression testing but does not affect exported layout.
Bugfix: Luceda control center no longer requires PyCharm to be installed to run properly.
Bugfix: multiple specifications of ConnectManhattanBundle are not grouped unintendedly into one anymore.
Bugfix: A regression in Shape.insert has been fixed.
Bugfix: Netlist extraction from Layout has been fixed for circuits with top-level electrical ports (was raising an exception).
Bugfix: ConnectBend could give a wrong result when the angle between the two ports was very small, this has been fixed.
Bugfix: A
i3.ToggledCompoundFilter
(like TECH.GDSII.FILTER) can now be used if all its filters are disabled or if it has no filters at all.Bugfix: removed port properties (e.g. optical_ports, west_ports, …) from shape elements such as Boundary and Path.
Bugfix: The rotation_center property of Rotation is now correctly taken into account when writing GDSII files.
Bugfix: adding transformations with += gave the wrong result when rotations with off-origin rotation center were added. e.g. transform = i3.Rotation(rotation=45., rotation_center=(10., 0.)) + i3.Rotation(rotation=20.0, rotation_center=(0., 10.0)) gave the correct result but transform = i3.Rotation(rotation=45., rotation_center=(10., 0.)); transform += i3.Rotation(rotation=20.0, rotation_center=(0., 10.0)) did not.
Bugfix: When a new
i3.ToggledCompoundFilter
is created, it doesn not inherit the subfilters from previously created ToggledCompoundFilter objects anymore.Bugfix: A
i3.ToggledCompoundFilter
(like TECH.GDSII.FILTER) can now be used if all its filters are disabled or if it has no filters at all.Bugfix: AutoTransitionPorts (and classes inheriting from it, such as the picazzo MMI classes) now properly passes on the parameter straight_extension.
Bugfix: i3.expose_ports<ipkiss3.all.expose_ports> and i3.NetlistFromLayout<ipkiss3.all.NetlistFromLayout> correctly transform the shape of electrical ports. Previously, instance transformations could wrongly flag ports as connected / unconnected.
Bugfix: :py:class`i3.BendPath<ipkiss3.all.BendPath>`, :py:class`i3.RelativeBendPath<ipkiss3.all.RelativeBendPath>`, :py:class`i3.ArcPath<ipkiss3.all.ArcPath>` and :py:class`i3.EllipseArcPath<ipkiss3.all.EllipseArcPath>` have their face angles (returned by get_face_angles() set correctly based on the provided input parameters. When used for creating custom waveguide devices with large bend radius, this avoids snapping errors.
Bugfix: GDSII import now works if the library name in the GDSII file is empty (
""
) and GDSII export warns if the user has specified an empty library name.Bugfix: the :py:class`SizeInfo<ipkiss3.all.SizeInfo>` of :py:class`Box<ipkiss3.all.Box>` has been fixed.
Bugfix: The != (__ne__) operator of
i3.NoDistortTransform
now correctly returns True when comparing to an instance of another type.Bugfix: Shape now preserves a closed is False (open shape) status when copying from another shape also if the first and last point of the shape are identical.
Canvas
IPKISS Canvas, a graphical copilot that assists you in the overall PIC design process has been added to our design platform. In this first release, the focus is on visualizing and verifying existing designs. In addition, users can create designs and generate a variety of code snippets for them, and read designs back into IPKISS.
IP Manager
New feature: Added
CanvasLibraryTest
, a reference test for IPKISS Canvas library files (.iclib extension).Improvement: Improved error reporting when comparing netlists via XML (display more info in case nets are removed/added).
CAMFR
Bugfix: A regression in Stack.plot() has been fixed.
Picazzo
Improvement:
AutoTransitionPorts
now has a parameter _transition_parameters to pass arbitrary parameters to its transitions.Improvement:
AutoTransitionPorts
now has a parameter flatten_transitions to flatten its transitions.Improvement:
WireRibWaveguideTransitionLinear
now has a parameter wire_only_cladding_width to control the width of the cladding of the wire waveguide part.
Documentation
All training material and samples are now installed under a luceda_academy folder (Windows:
%USERPROFILE%\luceda\luceda_academy\luceda_academy_2024091
, Linux:~/luceda/luceda_academy/luceda_academy_2024091
). This includes the snapshot of the Luceda Academy training material as well as the samples for IPKISS and the different product modules and third party links.The basic layout tutorial now uses the si_fab PDK instead of the older demolib.
Bugfix: Setup instructions for PyCharm now refer to Conda Environment instead of Virtualenv Environment.
Improvement: The documentation on how to acquire your hostid for obtaining a software license from Luceda has been updated.
The product names have been slightly changed to clarify the structure and increase readibility of the documentation:
IPKISS AWG Designer → Luceda AWG Designer
IPKISS IP Manager → Luceda IP Manager
IPKISS Link for Siemens EDA → Link for Siemens EDA
IPKISS Link for Ansys Lumerical → Link for Ansys Lumerical
IPKISS Link for Dassault Systèmes Simulia → Link for Dassault Systèmes Simulia
IPKISS PDK → Luceda PDK
The Elements and Layers reference now explains which elements can be returned from
_generate_elements
and which can be returned from_generate_instances
.Added documentation to
i3.PolygonText
andi3.Label
. They are now listed among the available elements in the Elements and Layers reference.
IPKISS Photonics Design Platform 3.9.0
IPKISS 3.9 is the first version of IPKISS that is available for Python 3. IPKISS 3.9 is also available in a Python 2 flavor, but newer versions of IPKISS will be developed for Python 3 only. To migrate your code to Python 3, check out the IPKISS Python 3 migration guide. No major changes or new features have been introduced in this release because the focus was on upgrading to Python 3.
General
On Python 3, all software was upgraded to use numpy version 1.16.
IPKISS
New Feature: S-matrices can be exported to Touchstone format using
export_touchstone_smatrix
. Useto_touchstone
to export a matrix directly from ai3.circuit_sim.SMatrix1DSweep
object.LongIntProperty is now an alias for DefinitionProperty and is deprecated. Python 2 will automatically convert int to long where necesssary. In Python 3, all integers are long integers.
ProcessorLongInt, processor_longint and RESTRICT_LONG are removed from ipcore for Python 3 compatibility.
StringProperty, FilenameProperty, and NameProperty only accept strings from the ISO/IEC 8859-1 (py3) and (non-extended) ASCII (py2) character sets.
The deprecated PlaceComponents and picazzo’s PlaceAndConnect and PlaceAndAutoRoute now sort their instances according to name. This does not affect the layout and simulation. It only affects the order in which instances may be exported.
The picazzo3 containers such as FanoutPorts, IoFibcoup and RoutePortsAroundCorner now have a netlist with a deterministic order of terms across Python 2 and Python 3.
The functionality to add examples to PCells has been moved into the ipcore package. Imports from ipkiss.plugins.documentation have been deprecated.
Added
i3.VFabricationProcessFlow
to ipkiss3.all.Improvement: The array references SoftRotationARef, SoftARef and StackARef, which break themselves down into single references or simpler array references, are not inheriting from Group anymore. They are conceptually reference elements and did not share much of the behavior of a Group. They still have an elements data property to access their broken down representation, which is used upon export, but other Group behavior is removed.
Improvement: Added magnification_center property to
i3.NoDistortTransform
.Improvement: Added string representations for multiple property restrictions.
Improvement: The i3 namespace no longer includes certain symbols from internal libraries. For a full list, see Removed symbols from i3.
Improvement:
i3.ConnectBend
and routing classes such asi3.RouteToParallelLine
now give a reproducible result across different platforms and Python versions when the specified distance is close to the minimum distance given by the routing parameters.Improvement:
i3.ProcessLayer
,i3.PatternPurpose
andi3.ProcessPurposeLayer
can now be sorted reproducibly. They are compared by extension.Improvement: Updated The tutorial on setting up a new project to reflect the current PyCharm and IPKISS workflow.
Improvement: During boolean operations, if an IPKISS element does not have a valid polygon representation (e.g. because it is self-overlapping), first an attempt to fix it (e.g. by splitting) will be made. If that fails, an exception will be raised. In some cases this may have an impact on the result of boolean operations, and GDSII files exported with results of boolean operations, such as the result consisting of multiple polygons instead of one.
Improvement: the waveguide instance names generated by connectors that automatically taper or transition is now just ‘connection’. (Automatic tapering happens in case one of the ports has a different waveguide template than that of the connector). Previously, in some cases, the instance name could be e.g. ‘out_out_connection’.
Bugfix: Copying routes made with relative control points gave the wrong result. This has been fixed.
Bugfix:
i3.NoDistortTransform
now does not overwrite a user-specified translation when setting a rotation, magnification or mirror center or mirror axis. Direct use ofi3.NoDistortTransform
is discouraged and user input when directly used nevertheless is checked against incompatible parameter combinations.Bugfix: ipkiss3.simulation.circuit.interpolation.smatrix_splrep fixes the k (spline degree) array returned: it returns a 2-dimensional k (degree) array with shape (n_ports, n_ports) instead of a 3-dimensional array with shape (n_ports, n_ports, 1). The array is of type int instead of float. This should not have an effect for users, who should use BSplineModel.from_smatrix.
Bugfix: fixed a possible infinite recursion in Shape.convex_hull() due to rounding errors close to 0.
Bugfix: fixed a possibly wrong intersection between straight lines when the two slopes are almost equal (to a numerical precision). This resolves potential issues in
i3.RouteArcBend
, and consequently ini3.ConnectBend
.
IPKISS IP Manager
Bugfix: XML-based tests (layout and netlist) did not compare the full layout in some cases. This has been fixed, so now the full layout and netlist are compared.
Change: SVG files are no longer saved as reference files in virtual fabrication tests (
VFab2DReferenceTest
).Improvement: S-matrix reference files are saved in the Touchstone format. This makes them human readable, and consistent across different versions of Python.
Improvement: GDS reference files are exported by default with a fixed timestamp (1/1/1970, 0:00) instead of the time when the file is generated. This does not have an impact on the comparison (IP Manager doesn’t compare timestamps), but it avoids modifying the GDS file in case the layout is identical. Timestamp can be customised by specifying the ref_time fixture in a class that inherits from
ip_manager.testing.ComponentReferenceTest
.Improvement: Netlist instances, terms and nets are now sorted alphabetically based on domain and name in the XML reference files. This does not have an impact on the comparison (by default, IP Manager does not compare the order), but it avoids modifying the XML files in case the layout is identical. This does not impact testing.
Improvement: The x/y coordinate precision for text label elements in layout XML input has been reduced to the grid precision.
IPKISS AWG Designer
Bugfix:
SlabFieldProfile1D
andSlabFieldProfile2D
: all overloaded operators now work as intended.
IPKISS Link for Siemens EDA
Our IPKISS Link for Siemens EDA is working on both Python 2 and Python 3 versions of IPKISS 3.9.
Updated OpenAccess / oascript.
On Windows: oascript v4.1, with OpenAccess 22.50, available for Python 2 + Python 3.
On Linux: oascript v4.1, with OpenAccess 22.60, available for Python 2 + Python 3.
Bugfix: PCell evaluation now does not override all PCell properties. This makes the overall OpenAccess behavior more consistent, but in practice it would only be noticed if a user would make explicit use the overridden state of properties (which we do not recommend doing).
Bugfix: Designs based on connectors that use relative waypoints are now correctly evaluated.
Documentation
Improvement: Added
i3.lock_properties
,i3.StrongPropertyInitializer
,i3.OpticalTerm
,i3.OpticalLink
,i3.ConnectLogical
,i3.FileInputGdsii
,i3.FileOutputGdsii
,i3.Group
,i3.MRef
,i3.Line
,i3.EllipseArcPath
,i3.BendPath
,i3.ArcPath
,i3.ShapeBendRelative
,i3.RingSegment
,i3.ShapeDodecagon
,i3.ModelInstance
,i3.Coord2
,i3.Coord3
,picazzo3.phc.generic.cell.PhCLayout
,picazzo3.filters.ring.cell.RingShape
, andpicazzo3.filters.ring.cell.RingTraces
to the reference documentation.
IPKISS Photonics Design Platform 3.8.0
IPKISS
New Feature: Analyze transmission spectra and calculate spectral measures such as insertion loss, FSR (Free Spectral Range), crosstalk, and so on:
i3.SpectrumAnalyzer
andi3.Spectrum
.New feature: Added
i3.circuit_sim.map_terms
to map Terms of predefined models to desired names.New Feature: Waveguide model
i3.cml.WG2
with polynomial dependence of effective index and loss on wavelength.New Feature: Connect multiple start and end ports with a manhattan waveguide bundle using
i3.ConnectManhattanBundle
andi3.SBendFanout
.Improvement: Compact models are organized in 1 location in a CML library which includes documentation.
Improvement: Added a new parameter use_effective_radius to
i3.EulerRoundingAlgorithm
. By default all rounding algorithms interpret their radius parameter as the minimum radius of curvature, which could lead to some confusing behavior when using Euler bends. Setting use_effective_radius to True causes the radius to be interpreted as the effective radius instead.Improvement: A list or other sequence can be passed as parameter values of a CompactModel and will be converted internally to a numpy array.
Improvement: Clarified in the documentation that the default trace template used by FanoutPorts is TECH.PCELLS.WG.DEFAULT. The
trace_template
property can be set to None to use the trace templates of the ports of the contents.Bugfix:
i3.TaperedWaveguide
now supports cases where there are no straight sections if the available distances between control points are filled by the bends.Bugfix: Ensure the unit and grid parameters of a LayoutCell and a cell read from GDSII are recognized as parameters, since a GDSII file can have a different grid or unit. In this way, GDSCell can be used within the IPKISS Link for Siemens EDA.
Bugfix: modified_copy() can now be used correctly on a transformation (e.g. Rotation). Previously, not all properties of the original transformation were copied.
Bugfix:
i3.NetlistFromLayout
now supports array references (ARef) correctly. An error in the array indexing was fixed. See Netlist extraction with array references for more information.Bugfix: The convex_hull() method of LayoutView now correctly takes the instances (hierarchy) into account.
Bugfix: The use of
i3.H
andi3.V
controlpoints could in certain cases violate the set bend radius. This has been fixed.Bugfix: The
mpl_figure()
method ofShape
and ShapeModifiers was broken. These methodes can be used again for plotting Shapes and modified Shapes (such as the output ofShapeRound
).Bugfix: Fixed a bug in the generation of S-bends with
ConnectBend
that in certain cases would add extra duplicate points.
IPKISS AWG Designer
The filter analysis functions in AWG Designer are deprecated in favor of the new
i3.SpectrumAnalyzer
. See Porting filter analysis functions for details.
IPKISS IP Manager
New IPKISS module ip_manager added. See the IPKISS IP Manager documentation.
Caphe
Bugfix: input_signals now properly accept integer indices when doing time-domain simulations.
IPKISS Photonics Design Platform 3.7.1
IPKISS
New Feature:
i3.LayoutView
now contains optical port attributes likeoptical_north_ports
,get_optical_ports_from_labels
, …New Feature: Control points for manhattan routes can now be placed relative to the start and end port using
i3.START
andi3.END
, respectively. A control point can also be placed relative to the previous one by usingi3.PREV
.New Feature: Use the Euler bend algorithm for rounding using
i3.EulerRoundingAlgorithm
.New Feature: Extract the peaks in a power spectrum using
i3.spectrum_peaks
.New Feature: Shortcut functions
i3.signal_power
andi3.signal_power_dB
to calculate the power (linear or in dB) for each wavelength/frequency in a spectrum.Improvement: Picazzo W1 waveguides now have a reproducible default port trace template name.
Improvement: When a layout is exported to GDSII that contains cells with the same name originating from different libraries, renaming is done in the GDSII file to avoid name collisions. This happens mostly when reading cells or circuits from multiple GDSII files and writing them out again to a larger design file. Previously, the GDSII file contained multiple cells with the same name, which is now avoided. If all cell layouts with the same name are identical, then a single cell is exported without renaming. In this way, unique versions of fixed foundry PDK cells can be kept.
Improvement: The creation time of a cell (in an IPKISS script) is now stored on the cell (created attribute) and written to GDSII file.
Improvement: We standardized the Touchstone exporter format so that we can import S-parameters into IPKISS that preserve the port order/names. Please check
import_touchstone_smatrix
for an example and more information.Change: Exported Touchstone files for the “IPKISS Link for Ansys Lumerical” no longer contain references to “Lumerical” in the port mapping. They use the standard IPKISS Touchstone format.
Bugfix: Duplicate cell definitions in GDSII files are now avoided.
Bugfix:
TemplatedRoundedWaveguide
had a wrongtrace_template
property value when created by calling aRoundedWaveguideTemplate
.Bugfix: The process property of OpticalPort is now read-only. Since this property refers to the process of its trace_template, setting it could lead to undesired modification of the trace template.
Bugfix: The shape cutting algorithm now correctly cuts a shape with a hole when the hole touches the top of the shape.
Cleanup: Removed the ipkiss 2.4 compatibility layer, including
i3.Structure
,i3.InOpticalPort
,i3.OutOpticalPort
, waveguide definitions,ipkiss.plugins.photonics
andipkiss.plugins.electronics
. These have been replaced by native ipkiss3 primitives and properties. See Porting from Ipkiss 3.7 to Ipkiss 3.7.1.
IPKISS Photonics Design Platform 3.7
IPKISS
New Feature:
i3.place_and_route
for placing instances and routing between them by using placement and connector specifications.New Feature:
i3.Circuit
is a convenience cell aroundi3.place_and_route
.New Feature:
i3.ConnectManhattan
, a connector that usesi3.RouteManhattan
to connect two ports and returns an instance ofi3.RoundedWaveguide
(for optical ports) ori3.ElectricalWire
(for electrical ports).New Feature:
i3.ConnectManhattanTapered
, a connector that usesi3.RouteManhattan
to connect two ports and returns an instance ofi3.TaperedWaveguide
.New Feature:
i3.ConnectBend
allows to connect two ports with basic bends (s-bend, u-bend or single bend segment)New Feature:
i3.RouteSBend
,i3.RouteArcBend
andi3.RouteUBend
can be used for calculating routes between 2 ports.New Feature: All manhattan routing classes (
i3.RouteManhattan
,i3.ConnectManhattan
andi3.ConnectManhattanTapered
) also accept horizontal (i3.H
) and vertical (i3.V
) control points.New Feature:
i3.maximum_bend_radii
allows to calculate the maximum bend radius for each turn in a given shape.New Feature: Added exponential taper transitions for waveguides (
i3.ExponentialWindowWaveguideTransition
,i3.ExponentialWindowWaveguideTransitionFromPort
) and generic traces (i3.ExponentialWindowTraceTransition
).Improvement: The error layer of
ì3.Connector
can now be set by the user.Improvement: The documentation of PCells now omits uninformative docstrings.
Improvement: the
input_port
andoutput_port
properties of the Routing classes were renamed tostart_port
andend_port
for clarity and consistency with other classes. For backwards compatibility, theinput_port
andoutput_port
properties can still be used but it’s advised to write new code usingstart_port
andend_port
.Improvement:
i3.RoundedTrace
has a better verification algorithm and a clearer error message. This reduces the number of false negatives given byi3.RoundedWaveguide
and its subclasses. See Layout changes in 3.7 for more information.Improvement:
i3.place_insts
now preserves the order of instances if the input is an InstanceDict or OrderedDictImprovement:
i3.Connector
accepts electrical ports and can be used to create electrical routes.Improvement:
i3.NetlistFromLayout
now creates electrical nets between electrical ports that contact by touching or overlapping. This works between ports of instances as well as top-level ports.Improvement:
i3.expose_ports
has extra parameters that allow you to expose all unconnected optical ports and/or all or unconnected electrical ports.Improvement:
i3.ShapeRound
now calculates the bend size analytically instead of numerically, resulting in improved accuracy and performance.Improvement: Added documentation for
i3.SplineRoundingAlgorithm
.Improvement:
ipkiss.io.output_xml.OutputXml
now exports the transformation of a Box element to XML as well.Bugfix:
ChildCellProperty
and its subclasses (TraceTemplateProperty
,WaveguideTemplateProperty
, …) can now also be used on objects that are not PCells.Bugfix: Straight sections (
straight_section_lengths
) ini3.TaperedWaveguide
now have the correct specified length (previously, users had to manually setmin_straight=0
).Bugfix: Matching of a
i3.WindowWaveguideTemplate
with a template that doesn’t use windows, using theis_match
method, will now return False instead of raising an error.Bugfix:
i3.ElectricalPort.is_match(other_port)
now correctly takes the port’s shape into account to detect whether electrical ports are connected by touching or overlapping. Ports on different layer are not matching.Bugfix:
i3.get_acute_angle_points
now detects all sharp angles and no longer gives false positives in shapes with holes in them or in overlapping shapes that together form a hole. This has a direct impact oni3.get_stub_elements
andi3.stub_acute_angles
.Bugfix: Picazzo PCells that use
PortInterfaces
can now be pickled using the pickle package.Bugfix: The string representation of transformations had a down rounding of translation x and y (in multiples of one thousandth of a user unit), angle and magnification. For instance an x translation of 1.2348 was printed as 1234. This has been fixed to round to the nearest integer. This has an effect only in cases where you may be using these string representations (e.g. print(some_sref.transformation) for internal use such as text-based regression tests.
Cleanup: Removed the unused and undocumented cell_instances property from
i3.PCell
.Cleanup: removed the unsupported VTK visualisation of 3D geometries.
Cleanup: removed the old unused wrappers in the dependencies module: bitarray_wrapper, caphe_wrapper, log, matplotlib_tk_wrapper, mayavi_wrapper, pil_wrapper, tvtk_wrapper.
Deprecation:
picazzo3.routing.place_route.cell.PlaceAndAutoRoute
,picazzo3.routing.place-route.cell.PlaceComponents
andi3.place_insts
are now deprecated. For more information see the porting guide.Deprecation:
Structure
(IPKISS 2.4) is now deprecated and will be removed in the next version of IPKISS. See Porting from Ipkiss 2.4 to Ipkiss 3 for porting instructions.
IPCORE
Improvement:
i3.AliasProperty
now has adeprecated
attribute which can be used to log a deprecation warning when the property is used.Improvement: added repr and str representation of
IdStringProperty
.Removal: The deprecated
RestrictedProperty
andPropertyDescriptor
were removed. If you are still using these, simply replace byi3.DefinitionProperty
.Removal: The deprecated
RestrictedListProperty
andListPropertyDescriptor
were removed. If you are still using these, simply replace byi3.ListDefinitionProperty
.Removal: The internal_member_name argument to all properties was removed, except on SetFunctionProperty which was the only property using it. See Removal internal_member_name for backwards compatibility notes.
IPKISS AWG Designer
Bugfix: some flattened AWG instances raised an error when trying to serialise them to a file using pickle.
Bugfix: the (legacy)
RectangularExpandedAWG
did not have its expanded sections as close as possible to the 90 degree bends.
IPKISS Link for Ansys Lumerical
New Feature: When declaring a simulation job, you can now pass a
MacroOutput
to run arbitrary code within the simulator (during the simulation phase) and retrieve the output.New Feature: When declaring a simulation job, you can now pass a
FileOutput
to retrieve files created during simulation.Improvement:
LumericalEMESimulation
now accepts an optional environment argument to allow passing environment variables to the solver.Improvement:
LumericalEMESimulation
now sets up the EME solver with 1 cell group consisting of 10 cells. This allows for faster initial inspection of larger devices. After inspection, the user can then tweak the setup usingi3.device_sim.lumerical_macros.eme_setup
.Bugfix:
LumericalEMESimulation
will not raise an Error when no ports are supplied.Bugfix: The content of the environment variable
luceda_LICENSE
is now used inLumericalEMESimulation
on Windows to check for the IPKISS Link for Ansys Lumerical license.
IPKISS Link for Dassault Systèmes Simulia
New Feature: When declaring a simulation job, you can now pass a
MacroOutput
to run arbitrary code within the simulator (during the simulation phase) and retrieve the output.New Feature: When declaring a simulation job, you can now pass a
FileOutput
to retrieve files created during simulation.
Documentation
Improvement: Added
ShapeWedge
,ShapeRadialWedge
, andShapeDodecagon
to the IPKISS reference documentation.
Luceda Academy
Deprecation: CircuitCell in Luceda Academy has been deprecated in favor of
i3.Circuit
. In this way, no additional software needs to be downloaded anymore. See the IPKISS3.7 porting guide for porting existing code.
IPKISS Photonics Design Platform 3.6
IPKISS
Improvement:
i3.place_insts
now supports placement and alignment of electrical ports.Improvement: the flattening of contents of the splitter/combiner in MZIWaveguides can now be disabled by setting flatten_contents=False as a Layout parameter. This is useful if you’re using devices from a foundry PDK which should not be flattened.
New Feature:
ipkiss3.all.RouteManhattan
now has an optional control_points property to force the route to pass through these pointsImprovement: Layout.visualize() now annotates labels (‘i3.Label’) by default. Added ‘labels’ parameter to enable/disable label visualization using True/False.
Bugfix:
i3.get_stub_elements
now limits the length of side of the stub to half of the smallest side, instead of half of the longest side, when limit_stub_length=True.Improvement:
NumpyArrayProperty
also accepts instances of collections.Sequence such as list, tuple and range objects, which are then automatically converted to a numpy array.Bugfix:
i3.Shape.area
now correctly calculates the area of the shape if the shape is not symmetric around (0, 0).Improvement: function
shapely_geom_to_shape
has moved toipkiss3.algorithms.shape_cutting.shapely_geom_to_shape
.Improvements in
ipkiss3.all.GDSCell
:Now throws an exception if the GDSII file contains multiple top-level cells but the cell_name parameter was not provided.
When name is provided but not cell_name and the GDSII file contains 1 top-level cell, that top-level cell will be loaded and (re)named as specified, even if the original name in the GDSII is different.
Bugfix:
i3.route_to_parallel_line
miscalculated some routes where the input and output angle deviated with minute amounts. This method is used ini3.RouteToLine
.New Feature: The
i3.Connector
base class can be used to create your own connectors. Connectors are used to connect two optical ports with a waveguide using a predefined algorithm.Bugfix: The
taper_lengths
property has been moved from _TaperedWaveguide.Layout to TaperedWaveguide.Layout. TaperedWaveguideBundle.Layout now doesn’t allow setting thetaper_lengths
property anymore, as it should be.Bugfix:
i3.TaperedWaveguide
and its helper functions now allow settingmin_straight_section_length
to 0.Bugfix: The angle_step property of
ipkiss3.all.TaperedWaveguide
is now correctly taken into account.Bugfix: Facet angles of a bend section in
ipkiss3.all.TaperedWaveguide
are now correctly set.Bugfix: When a hierarchical cell is flattened labels are properly transformed.
Caphe
Bugfix: Fixed the model cache to pick up the correct models according to the simulation type. Running frequency and time domain simulations in the same script will now give correct results.
IPKISS Link for Ansys Lumerical
The IPKISS Link for Ansys Lumerical supports Lumerical versions 2020a and up. Lumerical 2019b and lower will not work anymore.
New Feature: Run Lumerical Mode EME Simulations using
i3.device_sim.LumericalEMESimulation
. Two macros assist in the creation of the simulation:i3.device_sim.lumerical_macros.eme_setup
to setup the spatial discretization of ai3.device_sim.LumericalEMESimulation
.i3.device_sim.lumerical_macros.eme_profile_xy
: Create a field monitor in Lumerical EME that covers the full simulation window, at a certain height.
Improvement: the transparency defined on IPKISS’ materials is now also applied to the corresponding materials defined in solver_material_map.
Moved Ansys Lumerical macros from Luceda Academy to IPKISS
ipkiss3.simulation.engines.lumerical.macros
:i3.device_sim.lumerical_macros.fdtd_profile_xy
: Create a field monitor in Lumerical FDTD that covers the full simulation window, at a certain height.i3.device_sim.lumerical_macros.mesh_accuracy
: Set the mesh accuracy of the FDTD solver.i3.device_sim.lumerical_macros.export_port_neff
: Extract the effective index as a function of wavelength from the specified port.
IPKISS Link for Dassault Systèmes Simulia
Improvement: the colors defined on IPKISS’ materials are now also applied to the corresponding materials defined in solver_material_map.
Moved CST Studio Suite macros from Luceda Academy to IPKISS:
ipkiss3.simulation.engines.cst.macros
:i3.device_sim.cst_macros.field_monitor
: Create a field monitor that covers the full simulation window.
IPKISS Link for Siemens EDA
Improvement: if errors occur while loading a library, they are shown in the error log.
IPKISS AWG Designer
Improvement: the contour calculated by
get_star_coupler_extended_contour
now also includes the outermost points of the star couplers’ multi apertures on all layers. This will result in changes to the layout of your star couplers.Bugfix:
get_layout_params_1xM_demux
now correctly prints ‘Effective # channels’ when the verbose argument is set to True and unit is set to ‘wavelength’. This affectsget_layout_params_1xM_demux_um
.Bugfix: Straight sections are added to both sides of the fanout in every waveguide array to circumvent snapping issues. The lengths of those sections are technology dependent and by default are set to
TECH.WG.SHORT_STRAIGHT
. This behavior is more in line to how the AWGs were drawn in IPKISS < 3.5, but will result in changes to the layout of your AWGs.Improvement: For each waveguide array fanout route properties can be controlled with the
fanout_route_properties
parameter in itsLayoutView
.
IPKISS Photonics Design Platform 3.5
The IPKISS AWG Designer module (formerly known as Filter Toolbox - AWG Designer) has been integrated as a part of the IPKISS Photonics Design Platform. Upon installing IPKISS, you can now use the awg_designer module (it still requires a valid license).
Ipkiss
New Feature:
i3.device_sim.camfr_mode_fields
andi3.device_sim.camfr_guided_modes
can be used to calculate and debug the neff indices of material stacks.New Feature: Added
i3.TaperedWaveguide
andi3.TaperedWaveguideTemplate
to Ipkiss.New Feature:
i3.device_sim.camfr_compute_stack_neff
is added for convenient calculation of a MaterialStack effective index.New Feature:
i3.MaterialStack.visualize
method can be used to plot the material stack.New Feature:
i3.MaterialStack.clip_copy
creates a new material stack by limiting or extending the current one.New Feature:
i3.get_stub_elements
to get the elements that need to be added and subtracted, to remove acute angles in a layout.New Feature: Stub the acute angles of a Layout for given layers with
i3.stub_acute_angles
.New Feature: Acute angle detection function
i3.get_acute_angle_points
for layouts.New Feature: Get all the elements in a layout for given layers with
i3.get_layer_elements
.Improvement: Improved shape cutting algorithm for turning a Shapely geometry in to an Ipkiss i3.Shape, in both speed and result.
Improvement:
i3.merge_elements
added for convenient merge of elements on the same layer.Improvement:
i3.device_sim.camfr_stack_expr_for_structure
now works with dispersive materials. This requires a mapping of each MaterialStack used in the virtual fabrication to an effective material. This overrides the previous use of the effective_index_epsilon.Improvement: In
i3.device_sim.camfr_stack_expr_for_structure
rectangular shapes are now represented exactly. In other cases the discretisation is controlled with thediscretisation_resolution
parameter, while ensuring that the discretised structure respects the structure symmetry.Improvement:
i3.subtract_elements
added for convenient subtraction of elements on the same layer.Improvement:
i3.IoColumn.add_blocktitle
did not follow hierarchical naming by default, which could sometimes result in name conflicts when combining multiple GDS files. Users can now also give a custom name to the TitleBlock.Bugfix: In layout view of PlaceAndAutoRoute ‘waveguide_shapes’ and ‘waveguides’ lengths are verified to be the same.
Bugfix:
route_to_line
gave wrong results in some edge cases.Bugfix: Creating a new
i3.MaterialStackFactory
object did not reset class attributes. This could result in problems after usingvisualize_2d
.Deprecation: legacy Caphe models, deprecated since Ipkiss 3.1.3, are removed. CapheSModelView, CapheTModelView, CapheModelFromSMatrix were removed. Refer to Creating a First Circuit Simulation and Circuit Simulations for Advanced Users for defining simulation models and Circuit simulation with scatter matrix files for how to create models from existing S-parameter data.
Deprecation: ExpandedWaveguide and ExpandedWaveguideTemplate have been deprecated in favor of TaperedWaveguide and TaperedWaveguideTemplate.
Picazzo
Improvement: the deprecated Caphe models and
CapheModel
views were removed from all picazzo components. Please use theCircuitModel
view instead.Improvement: WaveguideReflector has a valid circuit model, using a BSpline fit of the effective indices of the waveguides
Bugfix: unused
coupler_straights
property has been removed fromRingRectWrappedNotchFilter
,RingRectWrapped180DropFilter
,RingRectSBendNotchFilter
andRingRectSBend180DropFilter
Documentation
Improvement: the netlist extraction, spiral with tapered waveguides and diskresonator example have been retargeted to the technologies.silicon_photonics technology so they can be run with no external dependencies.
Removed: The examples of a CWDM filter, athermal mzi, Archimedan Spiral, MZI Lattice and Variability Analysis have been removed.
Reorganized documentation: IPKISS.eda and AWG Designer are organized under the Modules section.
IPKISS AWG Designer
The IPKISS AWG Designer is integrated as a module inside Ipkiss. Check out the IPKISS AWG Designer documentation.
Change: the module
filter_tb
has been renamed toawg_designer
. The API offilter_tb
has been largely unchanged and kept backward compatible, although some patterns are deprecated in favor of a simpler approach to building AWGs. For more information see the Porting Guide.Change: the ArrayedWaveguideGrating class behavior changed: it doesn’t define the transformations of the star couplers, instead you can provide the input star coupler, output star coupler, a waveguide array, and the AWG will make sure they are properly connected. This makes it simpler to compose AWGs and define new waveguide arrays. The old AWG class is still available as
LegacyArrayedWaveguideGrating
for users that created their own AWG classes. Please check the Porting Guide for more information.Improvement:
camfr_aperture_simulation
tries to compute an effective index of each stack automatically.Improvement:
material_stack_to_material_map
andcore_z_window
are added as properties of aperture viewFieldModelFromCamfr
. Former allows providing a desired mapping betweenMaterialStack``s and a set of ``Material
models. Latter gives an optional range over which the automatic computation of the effective indices is performed (see above).Bugfix: multipass simulation in the slab engine was disfunctional (n_o_passes parameter not taken into account).
Bugfix: conversion between wavelength and frequency spacings was off for wide wavelength bands
Bugfix: FSR specified in wavelength was not taken into account properly in
awg_designer.all.get_layout_params_1xM_demux_um()
, which was noticeable over wide wavelength bands.Improvement: it is now possible to specify the virtual fabrication process flow to use in
awg_designer.slabsim_integration.legacy_aperture.OpenAperture.FieldModelFromCamfr
.Improvement:
awg_designer.sample_designs.awg.demux1xM.awg_1xm.get_apertures_with_dummies
can now be used to generate the list of apertures together with dummy apertures for matching. This can be used to create custom AWG layout algorithms.Bugfix: When specified the R_input parameter is now properly passed to the input star couplers
Removed: the delta_wavelength and delta_frequency functions have been removed as approximations during conversion can lead to hard to track design errors.
Improvement: generate the list of apertures together with dummy apertures for matching along with their angles with
awg_designer.all.get_apertures_angles_with_dummies()
.Improvement: get the MultiApertures and the individual transformations for the apertures needed to make a StarCoupler with
awg_designer.all.get_star_coupler_apertures()
.New Feature: get the free propagation region contour shape which fits the slab area that can be extended along the aperture circles with
awg_designer.all.get_star_coupler_extended_contour()
. This method is an improved version of the original get_hull_shape.New Feature: fanout algorithm for routing a selection of ports to a desired place.
New Feature:
awg_designer.all.ArrayedWaveguideGrating
for composing AWG that consist of 2 starcouplers and a waveguide array.New Feature:
awg_designer.all.RectangularWaveguideArray
for creating a U-Shaped Rectangular Waveguide Array that can be used to compose an AWG withArrayedWaveguideGrating
.New Feature:
awg_designer.all.SWaveguideArray
for creating a S-Shaped Waveguide Array that can be used to compose an AWG withArrayedWaveguideGrating
.New Feature:
awg_designer.all.RectangularTaperedWaveguideArray
for creating a U-shaped rectangular waveguide array with a different trace template in the straight sections. Can be used withArrayedWaveguideGrating
to create an AWG.
Previous IPKISS versions
Ipkiss 3.4.1
Ipkiss
Bugfix: The cover layer of a curved TraceBundle could give strange shapes when the traces of the trace bundle are not aligned and parallel.
Ipkiss.eda
New Feature: A possibility to quickly join the net connected instances. The netlist can be defined in S-Edit and exported via Publish to SDL, or defined in a separate Spice file. Macro is triggered via ‘Luceda -> SDL -> Join’ and can be used with L-Edit >= 2020.3.
Bugfix: Ports of array instances can now be connected
Documentation
Clarified that the results returned from a time-domain simulation (CircuitModelView.get_time_response()) also contains the signals of the Excitations in the circuit.
Ipkiss 3.4
Installation
During the installation of IPKISS, the installer sets the
LUCEDA_PYEVAL
environment variable (default option = on). For more info, check IPKISS environment variables.
Ipkiss
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: GDSCell now has a layer_map attribute, this allows you to specify a custom GDS input layer map.
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.
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 ® exporter: z_max of the simulation bounding box is now correctly used.
Bugfix:
i3.device_sim.CSTTDSimulation
andi3.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: 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:
i3.place_insts
can now Join and Align ports with names equal to the instances they connect and align to.Bugfix:
i3.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 rarely used. If you need a custom unit and/or grid for a specific LayoutView, you can still override its _default_unit` and/or
_default_grid
methods.Removed the defunct ‘genericpdk’ package.
Ipkiss.eda
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 through 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
andshape
as input, and return a (shape
,waveguide
) tuple. It’s now also documented how to add them to the technology: Routing settings.Improvement: A Tanner exporter has been introduced in the
<pdkname>.cfg
file. This exporter specifies that you want to use theautoload.tanner
which loads the IPKISS.eda macros in L-Edit. If you want to make a customautoload.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.Improvement: A daily rotating log file is now used. The location of the log files is by default in
%APPDATA%\luceda\logs
on Windows and$HOME\.luceda\logs
on Linux.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 thelib.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.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 in L-Edit: Waveguide instance naming has changed, they are now called
wg0
,wg1
, … This does not have an effect on generated GDS files, only on the instance names inside L-Edit.
Documentation
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 byLUCEDA_LOG_DIR
. A daily rotating file log is now used, and theLUCEDA_LOG_DIR
environment variable now controls the directory where the logs should be stored. When not set,%APPDATA%\luceda\logs
(typicallyC:\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 (CircuitModelView) 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.
Ipkiss 3.3
This release features a new layout placement engine and full optical netlist extraction.
The new placement engine is based on the idea that a photonic integrated circuit (PIC) can be
described by its instances and a list of specifications (for example, place, join, align, flip).
This reduces the need to manually define and reason about layout transformations.
Please check out the new layout tutorial and i3.place_insts
.
Note
There are a few small changes in Ipkiss behavior, related to improvements or bugfixes in this release:
NetlistFromLayout: now extracts the full netlist.
Spirals: due to a layout improvement the exact position where waveguides are cut has changed. The overall shape has not changed.
Autotransition database: slight change in behavior to make it more intuitive.
If you need more information you can read the detailed known backward incompatibilities Ipkiss 3.3.0 guide.
Documentation
Various small inaccuracies throughout the documentation have been fixed, and a new landing page is created.
The tutorials are reorganized so it’s easier to reach the relevant content for beginning users.
API reference is extended in several locations.
More technology-related documentation. In particular, we documented the required TECH keys that are required when creating your own PDK.
New sample gallery.
New layout tutorial.
Ipkiss
New feature:
i3.place_insts
, and the following specifications:i3.Place
,i3.Join
,i3.AlignV
,i3.AlignH
,i3.FlipV
,i3.FlipH
.New feature:
i3.NetlistFromLayout
now extracts the full optical netlist from layout.New feature:
i3.extract_terms
can be used to create netlist terms corresponding to layout ports.Improvement: RouteManhattan now properly generates routes ports that are spaced closer than the sum of the end and start straight.
Improvement: Instance names can now contain the < and > characters (used to expanding instance arrays). Other EDA tools usually support these characters, too.
Improvement: An empty SizeInfo() (east=None, west=None, south=None, north=None) now has a valid string representation.
Improvement: a flat copy of a full layout view can now be made with LayoutView.flat_copy(). In this way it becomes easier to export a flat version of a layout.
Improvement: the performance of the export of shapes to GDS has been optimized.
Improvement: defaults created for the port size when exporting to a device simulator, will now always fall within the bounds of the defined material.
Improvement: the layoutviews of waveguide templates now have an is_match() method to check that 2 templates have matching layout.
Bugfix: Layout.flatten() now takes all instances into account (previously only those inside elements where flattened.
Bugfix: SRef.flat_copy(), ARef.flat_copy() and MRef.flat_copy() can now correctly flatten with limited depth (levels!=-1), avoiding instance name conflicts.
Bugfix: ‘treat_trace_template_as’ on the transition database was not taken into account when calculating the transition between 2 trace templates of the same type. Now the indirection as defined with treat_trace_template_as will take precedence unless there is a specific (exact waveguide template class match) in the database.
Bugfix: Label.size_info() now returns an empty SizeInfo instead of a point at (0.0, 0.0), and is not taken into account anymore when calculating the SizeInfo of an ElementList, Group or Layout.
Bugfix: removed an ambiguity in Waveguide which lead to a wrong model being used in case of a custom defined waveguide with multiple circuit models.
Bugfix: Layout.visualize_3d_x_crossection(x_co) and Layout.visualize_3d_y_crossection(y_co) did not work anymore.
Bugfix: When flattening (either through flat_copy or with the flatten attribute of SRef/ARef) transformations were not correctly applied in all cases.
Bugfix: When exporting a device simulation we now ensure that there’s always material present within the specified bounding box.
Fix: Layout.visualize_3d_vtk(), which is not supported anymore, now raises a proper Exception instead of crashing.
Bugfix: PathTraceWindow and ExtendedPathTraceWindow could not cope with duplicate points in the centerline shape of the trace.
Bugfix: ExtendedPathTraceWindow did not use the start_face_angle and end_face_angle properties to extend the path.
Bugfix: Terms, instances and nets were empty when using _generate_netlist to declare the netlist.
Improvement: The custom ‘ID property’ was removed on the system fonts. Their identifier in i3.TEXT.FONT can now be obtained from i3.TEXT.FONT.get_id(font).
Bugfix: convert_smatrix_units now supports SMatrix1DSweep objects with ‘wavelengths’ (instead of ‘wavelength’) as sweep_parameter_name and with a list (instead of a numpy array) as sweep_parameter_values. As a result, BSplineModel.from_smatrix() can now be used on smatrix results generated by Caphe.
Improvement: Updated the heuristic to find the installation folder of the latest version of Lumerical.
Improvement: When doing a circuit simulation, the netlist is now validated to ensure there are no unconnected terms, duplicate nets or terms with multiple links. To disable the validation set the validate_netlist keyword argument to False in
get_smatrix
andget_time_response
(see alsoi3.CircuitModelView
).
Picazzo
Bugfix: The length of the transitions of connectors could not be set to 0.
Bugfix: In MZIWithCells, the extra_length property was not taken into account in certain cases.
Bugfix: WgYSplitter and WgYCombiner could not have a bend radius smaller than half the cladding width.
Bugfix: In MZIWithCells, the documentation of the extra_length property was wrong (positive values increase the length of the lower arm).
Bugfix: Spirals SingleSpiral, DoubleSpiral, DoubleSpiralWithInCoupling and FixedLengthSpiral can now be used with an ExpandedWaveguideTemplate and with asymmetric bends (e.g. when using SplineRoundingAlgorithm). Note this will slightly change the layout of the spirals: the waveguides are cut in a different position.
Bugfix: TemplatedPhaseShifterWaveguide could not be instantiated without overriding its template property.
Bugfix: FixedLengthSpiralRounded will now correctly pass angle_step to traces.
Ipkiss.eda
Bugfix: when the environment variables contained unicode strings, evaluation of PCells failed.
Bugfix: Rib waveguide transitions couldn’t be instantiated in demolib because of missing tech keys.
Bugfix: The position of a Label was incorrectly transformed when exporting to OpenAccess.
Bugfix: Reduce runtime dependencies of Ipkiss.eda to fix some DLL conflicts which could cause L-Edit to malfunction.
Ipkiss 3.2.1
This is a small bugfix release.
General
Small documentation and sample fixes.
Ipkiss
Material visualization opacity (display style’s alpha attribute) is now taken into account when exporting devices to Lumerical FDTD and CST Studio Suite ®.
Material visualization opacity of air and silicon dioxide in silicon_photonics technology changed.
The visualize_2d() method of a Layout view now accepts a process_flow argument instead to specify the virtual fabrication process flow. Specifying vfabrication_process_flow will still work but process_flow will take preference if specified.
Documentation
The technology guide was updated to reflect the changes in 3.2, which added the process_layer_map property on
VFabricationProcessFlow
and removed the implicit assumptions about mask and process layers in the definition of the virtual fabrication:The corresponding drawn layer does not need to be a PPLayer anymore
A PPLayer used as drawn layer does not need to have the same name as the process layer anymore
A PPLayer used as drawn layer does not need to have the .ALL attribute anymore to specify the final mask layer. Now any layer or boolean operation between layers can be specified directly in process_layer_map.
Ipkiss 3.2
The main feature of this release is the automated 3D virtual fabrication and link from IPKISS to physical device simulation tools. Support for CST Studio Suite ® (part of the Simulia product by Dassault Systems) and FDTD Solutions (from Lumerical) is built-in, i.e., users don’t need to install any additional packages. It also introduces generation of circuit models based on S-matrix data (simulation or measurement-based).
Get started here: physical device simulation, and here: models from S-parameters.
Note
In this release we fixed two small layout bugs that may affect layout generation:
ShapeArc
route_to_parallel_line
Please check the layout changes in 3.2.0 for more details, or the changelog below.
General
Added the joblib package. Amongst others this package makes it easy to save and load data to file with support for large (numpy) matrices and file compression. See e.g. Saving S-matrices to a TouchStone file.
Ipkiss
New feature: physical device simulation link with CST Studio Suite ® (part of the Simulia product by Dassault Systems) and FDTD Solutions (from Lumerical). Tutorial link: physical device simulation.
New feature: Layers can now be subtracted from each other (Layer1 - Layer2) to form new generated layers (e.g. for virtual fabrication definition).
New feature: VFabricationProcessFlow has a new property process_layer_map which can be used to explicitly map process layers to generated mask layers.
New feature: Support for reading S-parameters from/to Touchstone files (Touchstone version 1). Use
i3.circuit_sim.SMatrix1DSweep.from_touchstone
.New feature:
i3.circuit_sim.SMatrix1DSweep
now has a passivity and reciprocity check.Improvement: The virtual fabrication does not depend on the undocumented ‘ALL’ property of ProcessPurposeLayers. For backwards compatibility reasons, if ‘ALL’ is present it will be used for constructing the process_layer_map property of VFabricationProcessFlow. As a result, it has become easier to write virtual fabrication process definitions which are independent of the TECH tree.
Improvement: Added support for importing GDSII properties, silently ignoring them. As a result Ipkiss now has improved compatibility with GDSII files exported from certain 3rd party tools.
Improvement: Port labels are now properly visualized when they fall at the edge of the layout.
Improvement: Ipkiss is now able to read and work with GDSII files that contain PCell context from KLayout.
Improvement: Ipkiss can now merge multiple GDS files that have identical PDK cells, these cells are now identified and reused without renaming them with a prefix.
Bugfix: SizeInfo.expand_to_grid() works again.
Bugfix: the .visualize() method of a LayoutView now correctly accepts the canvas_size argument when no box argument is specified.
Bugfix: In ShapeArc: if end_angle < start_angle, and the angle difference is not a multiple of angle_step, the final calculated path did not perfectly cover the full arc. The bugfix results in a slightly different calculation of curves which could cause a small numeric deviation in your designs drawn in a previous version of Ipkiss. Please check if your designs still behave correctly.
Bugfix: ShapeRoundAdiabaticSpline could not cope with straight angles.
Bugfix: route_to_parallel_line: the maximum s-bend angle (
max_s_bend_angle
) was never used to route between two parallel lines - a slightly smaller value was erroneously used instead. The bugfix results in a slightly different calculation of routes. Please check if your designs still behave correctly.Bugfix: In ElectricalWireTraceTemplate, the width of the wire is no longer hard-coded, it can now be chosen.
Bugfix: If 2 MaterialStacks have a common base but a different number of layers, they are not considered equal anymore.
Bugfix: Boolean operations between a Boundary and a Path or between two Paths yielded the wrong result.
Bugfix: Virtual fabrication could generate sub-grid slivers for certain complex layouts, e.g. in AWG star couplers.
Ipcore
Improvement: Documentation generation: correctly identify required/optional/locked properties. They are ordered: first required properties, then optional ones, then locked ones.
Caphe
New feature: A generic circuit simulation model to build 1D univariate B-spline models:
i3.circuit_sim.BSplineSModel
. Tutorial link: circuit models based on S-parameter data. See alsoBSplineSModel.from_smatrix
.Improvement: Numba bumped from 0.38 to to 0.43. More numpy functions can now be used in circuit models (as explained in the circuit models tutorial) and many other small enhancements. Non-exhaustive list of new functions available: str.join, str.split, np.roll, np.ptp, np.trapz, np.interp, np.corrcoeff, np.cov, np.partition, np.fill_diagonal, np.unique
Bugfix: smat_transient parameter not passed when in ‘python’ mode.
Luceda control center
Launching of PyCharm uses the default IDE settings. This results in more predictable behavior: PyCharm will behave the same, whether started from the control center, or from another location (start menu/terminal/…). Users will need to set up the IPKISS Python interpreter so PyCharm can find it. Once set up it can be made available for all projects. See setting up a Python editor.
Ipkiss.eda
Bugfix: A StringProperty with a RestrictValueList restriction can now correctly be used in IPKISS.eda (OpenAccess and L-Edit).
Improvement: The L-Edit launch script has been improved, to make it more reliable.
Documentation
Ipkiss 3.1.3
This release features an updated syntax and backend for defining circuit simulation models for simulation with our circuit simulator Caphe. Get started here: circuit model tutorial. For more details check the Caphe section below.
Note
This release is fully compatible with Ipkiss 3.1.2, with two small exceptions:
the straight_extension property on transitions between different types of waveguides was previously not correctly handled.
waveguide lengths are now taken directly from the layout without having to set the view to ‘CapheModelFromLayout’.
Please check the known backwards incompatibilities in 3.1.3.
General
The Luceda Control Center has been refreshed, and includes a PyCharm launcher. The PyCharm IDE (Python editor) is used for setting up design projects and writing IPKISS code.
PyCharm IDE support: when launched from the Luceda Control Center, the IPKISS / Python interpreter is set up for the user. For more info, please follow the PyCharm tutorial.
Samples: The samples are now by default installed in the folder
<USER_HOME>/luceda/samples/ipkiss_version
. PyCharm suggests new projects to be created in the<USER_HOME>/luceda/projects
folder.Samples: demolib contains a list of compact models, as an illustration for the new features in Ipkiss 3.1.3.
Doc: several improvements in the reference / API documentation.
Ipcore
Bugfix in documentation generation: running compile_doc twice caused the doc to contain two sections of ‘Parameters’. With the latest numpydoc this is not allowed.
Ipkiss
Improvement: Path elements with a variable extension are now supported and read from or written to GDSII: e.g. Path(…, path_type=PATH_TYPE.VARIABLE, extension=(1.0, 2.0)).
Improvement for Label elements exported to and imported from GDSII, for better interoperability with third party tools.
Before, Ipkiss exported and imported Label elements to GDSII TEXT elements with ‘texttype’ (layer datatype) fixed to 0. This works fine when only using Ipkiss but could give problems when combining multiple tools.
The GDSII layer datatype is now preserved during export and import of Label elements to GDSII file TEXT elements.
Label element height is now handled identically during GDSII export and import: specified as a magnification on the GDSII TEXT element. Note that not all third party tools support this, since this is just an interpretation of GDSII.
Bugfix: the straight_extension property of ShapeWindowTraceTransition is now reversed if the start and end trace templates are reversed, so the first value always refers to the start point and the second value to the end point.
Bugfix: GDSII STRCLASS records (used by Calma/Cadence only) are now ignored without raising an exception.
Improvement: in GDSCell it is now possible to ignore undefined layers in the technology’s import layer map. This is controlled with the ignore_undefined_layers property of GDSCell.Layout.
Bugfix: TraceTransitionFromPort wrongly swapped the trace templates of the input and output port if reverse_templates=True
Bugfix: you can now properly compare pplayers, for example,
if my_layer is TECH.PPLAYER.WG.CORE
(this was previously not possible as layers could be created twice when the tech is not fully setup).Explicitly set edgecolor during visualization of layout primitives. This fixes layout visualization for recent versions of matplotlib.
Improvement:
pysics.basics.environment.Environment
is now available from ipkiss3.all.Improvement: ConnectComponents can now be imported with a minimal technology tree. It’s now also available from ipkiss3.all.
Internal refactoring: CapheModelInstance is removed in favor of ModelInstance. ModelInstance can refer both to a CircuitModelView and to a CircuitModelView.
Waveguide models by default take their length from the layout.
Caphe
Strongly improved syntax for defining compact models. See the circuit model tutorial to get started.
Proper multimode support. See also the tutorial on how to define multimode models.
We use the numba package for compilation of new style models. As a result, model compilation is much faster and robust, it accelerates a subset of Python and Numpy.
The simulation and model syntax are better separated from the simulation engine. This results in improved maintenance, robustness and performance.
Debug mode for debugging compact models interactively.
Better exception handling, causing no crashes when interrupting a simulation.
Reduced message verbosity when compiling models.
Backward compatibility has been ensured as much as possible, allowing for an easy transition from the old to the new style models. See also porting from 3.1.2 to 3.1.3.
Picazzo
Bugfix: the straight_extension parameter of the transitions between different trace templates (WireWaveguideTemplate->RibWaveguideTemplate, WireWaveguideTemplate->SocketWaveguideTemplate, WireWaveguideTemplate->ThinnedWireWaveguideTemplate) is now reversed if the trace templates were specified in reverse order.
Bugfix: the straight_extension parameter was not taken into account in SlottedWireWaveguideTransitionLinear and SlottedWireWaveguideTransitionLinearFromPort.
Bugfix: The width property trace templates that refer to other templates raised an exception.
Bugfix: PlaceAndConnect can now correctly identify broken links in circuits with links between electrical ports
Bugfix: in the containers that add rounded waveguides (FanoutPorts, RoutePortsEastWest, RoutePortsAroundCorner): the angle_step is now applied to the generated waveguides correctly, instead of defaulting to the technology value.
The bugfix on TraceTransitionFromPort (see above) corrects the ports of WireRibWaveguideTransitionFromPortLinear, WireRibWireWaveguideTransitionFromPortLinear, SlottedWireWaveguideTransitionFromPortLinear, WireSocketWaveguideTransitionFromPortLinear, ThinnedWireWireWaveguideTransitionFromPortLinear.
Remove absolute imports throughout picazzo, which caused some user code to fail if it has similar named Python files (cell.py).
Ipkiss.eda
Improvement: A PDK is now allowed more fine-grained control over the way waveguides are generated inside the EDA tool (triggered when using the ‘generate all waveguides’ macro). The existing
TECH.ROUTING.WAVEGUIDE_GENERATION_GUIDE_LAYERS
(typically in theipkiss/pdk_name/technology/routing.py
part of the PDK) now accepts a {layer: (routing_fn, wg_generation_fn)} item. layer is the IPKISS layer used for drawing the waveguide control shape. routing_fn is a function that transforms a start + end port into a shape, and wg_generation_fn returns an IPKISS layout view based on the shape (either calculated using the routing_fn, or manually drawn by the user on the waveguide control shape layer).Bugfix (regression between 3.1.1 and 3.1.2): Label elements could not be exported anymore to OpenAccess.
Bugfix: openaccess libraries that refer to a technology now always load the technologies in the correct order. Previously, this could lead to problems when working with multiple open libraries, where pcell evaluation / waveguide generation would fail.
Improvement: Spaces and parentheses are filtered from Ipkiss color names upon export to display.drf files. Colors and stipples are now sorted by name.
Improvement: Waveguide routing layers (TECH.ROUTING.WAVEGUIDE_GENERATION_GUIDE_LAYERS) can now use reserved purposes (DRAWING, …)
Ipkiss 3.1.2
This is a minor release featuring bugfixes and small improvements.
Note
This release is fully compatible with Ipkiss 3.1.1, with one small exception: previously one could override a ChildCellProperty
in a derived class with a LockedProperty
, now this is not possible anymore; instead it will raise an exception. Please check the known backwards incompatibilities in 3.1.2.
Upgrading is recommended.
Installation & Getting Started
Most of the packages that are bundled with IPKISS have received small updates. Ipkiss now ships with numpy 1.11.3 and scipy 0.19. One major update is conda (the package manager used to install / update packages), which is now version 4.3.
When configuring your code editor, you’re no longer required to set the ‘PATH’ environment variable.
Ipcore
Many improvements and bugfixes to the internal caching. These also result in an average performance increase of 25% in Ipkiss.
Ipkiss
Bugfix: apply_to_angle_rad and reverse_on_angle_rad failures due to missing symbols.
Bugfix: equality check of Library objects (Library.__eq__ operator, e.g. lib1==lib2) is fixed.
Bugfix: missing imports for compiled ShapeWaveguideTransition.CapheModel (numpy exp and pi).
Bugfix: SizeInfo.snap_to_grid contained dysfunctional code, raising an exception.
Bugfix: importing ipkiss no longer modifies PYTHONPATH (it removed the string ‘.’, which changes the behavior of scripts which rely on packages / modules being present in the current working directory).
Improvement: snap the virtual fabrication canvas to the technology grid, to avoid small slivers at the edge of the simulation window.
Improvement:
GDSCell
is now available in ipkiss3.all and does not need to be imported separately anymore.Bugfix: virtual fabrication: fix error message when a material stack cannot be found.
Bugfix: Boundaries with coincidal edges can now be virtually fabricated.
Bugfix: MRef.size_info was dysfunctional (using SizeInfo without importing it).
Improvement: visualizations no longer specify the matplotlib figure number, this enables the use of
%matplotlib notebook
magic in notebooks and using matplotlib interactive mode.Improvement: not operation on layers is now supported in virtual fabrication.
Pysics
Bugfix: MaterialStackGeometry2D.consolidate() was dysfunctional (typo fixed).
Picazzo
Bugfix: ThinnedWireWireWaveguideTransitionLinear was not always using the correct start trace template.
Bugfix: Ring resonators could raise a validation error even if a valid value was specified for coupler_spacings.
Ipkiss.eda
Bugfix: The transformation of Group and PolygonText elements is now taken into account when exporting to OpenAccess.
Bugfix: The transformation of a Path element is now taken into account when exporting to OpenAccess.
Ipkiss 2.4 Compatibility
Bugfix: technologies.compat24.picazzo24 could not be imported if a technology already contained TECH.PURPOSE.NO_FILL.
Documentation
Added a guide on waveguides, which explains the basic concept and how to use them.
Added examples for
ChildCellProperty
andChildCellListProperty
.
Ipkiss 3.1.1
This is a minor release featuring bugfixes and small improvements.
Ipkiss
New feature: shapes for performing spline fitting of a control shape:
ShapeFitClampedCubicSpline
andShapeFitClampedCubicSpline
. See Spline Shapes.Improvement: extra type check when adding transitions to an
AutoTransitionDatabase
.Improvement: You can now label ports in the visualization of the Layout. The Layout visualize method has a new keyword
annotate
(default: False).Improvement:
AutoTransitionDatabase
can now resolve multiple ‘aliases’ of trace templates. This makes it much easier to define customized trace templates that are a variation of existing trace templates. The transitions will be correctly resolved.The
Layout
view of aTraceTemplate
now has a methodcross_section()
which returns a 2D geometry of the waveguide cross section.Change: cross section geometries now have a method
visualize()
. Use this instead offigure_2d().show()
(which will still work).Bugfix: the interface with the Caphe circuit simulator can now handle electrical ports.
Bugfix: fixed
RadialLine
.Bugfix: a component with a SMatrixView can now be simulated repeatedly.
Bugfix: StrongPropertyInitializer objects, and in particular PCells and Views, can now be pickled.
Bugfix: Views with properties that have a numpy array as value can now be properly compared (view1 == view2).
Bugfix: When the original shape is an empty shape or a shape with length == 0.0, shape modifiers now return an empty points array instead of raising an exception.
Improvement: Our packages are now compatible with numpy 1.11, this is now the default numpy shipped with the installer. If you have your own packages that are compiled against an older numpy version, you might have to reinstall a version for numpy 1.11.
Improvement: The example silicon_photonics technology now uses an improved color scheme for materials (when using visualize_2d).
Ipkiss-caphe interface
Bugfix: calculating the S-matrix of circuits containing nonlinear models no longer fails. The result will be the linear contribution of the scattering matrix (i.e., defined by
_calculate_S
in each CapheModel).Bugfix:
CapheModelFromSMatrix
accidentally reset the view of the associated PCell, resulting in an empty smatrix or an infinite recursion, depending on the model. This no longer happens.Bugfix: Testbenches that have no terms in the top-level netlist can now also be converted to a native caphe circuit.
Picazzo
Improvement:
PlaceAndConnect
draws flylines for logical connections that are not properly connected in the layout. Flylines are drawn on theTECH.PPLAYER.ERROR.GENERIC
layer.Bugfix: thinned waveguide templates (
ThinnedWaveguideTemplate
) and rib waveguide templates (RibWaveguideTemplate
) are correctly identified when using automated transitions such as withAutoTransitionPorts
.Bugfix: thinned waveguide templates (
ThinnedWaveguideTemplate
) now correctly interprete and pass along their properties.Bugfix: IoFibcoup now raises a proper exception when a fiber coupler without an East Port is used.
Bugfix: IoFibcoup now handles fiber couplers with multiple waveguide ports (e.g. 2D couplers) correctly.
Samples & documentation
Added MMIs to demolib (
samples\demo\libraries
).Docfix: Layout elements like Circle and Rectangle only accept Layer objects for the layer argument, not an integer.
Ipkiss 3.1.0
There are a few changes in Ipkiss 3.1 that that introduce a backward incompatibility with Ipkiss 3.0.1. These are explained in more detail in Porting from Ipkiss 3.0.1 to Ipkiss 3.1.
Installation
The installer now works correctly on Windows 10
Samples & documentation
New demonstration library (including a technology setup) + associated demonstration projects (
samples/demo
).Small updates to the trainings and samples (
samples/ipkiss3/training and samples/ipkiss3/getting_started
).Improved samples for GDSII import in the documentation (see the sample gallery).
Sample on how to find cells in a layout which have a label inside (with a given text). See
samples/ipkiss3/samples/advanced/label_layers
.Guide on technology: this guide explains you how to build your own technology with Ipkiss.
visualize_2d()
does not display the image twice anymore in notebooks.
Ipcore
Added the decorator
@lock_properties()
to make all properties of aStrongPropertyInitializer
class read-only. See the PCell guide in the documentation for usage.Improvement:
RestrictTypeList
now has a proper string representation (__str__
).Improvement:
RestrictRange
can now handle float values, even when the range bounds were specified as integers.
Ipkiss
New functionality: Added capability to specify Caphe time domain models: pure input/output behavior, Ordinary Differential Equations (ODE) and Coupled Mode Theory (CMT) models can be specified. Note: this is still in an early stage. Simulation models are already defined in IPKISS, but the simulation setup is still done in native Caphe and not in Ipkiss.
New functionality: Added
BoundaryPath
element. It is a boundary which keeps a reference to its centre line.Fix: Views (Layout, Netlist) are now compared based on overridden properties, but also overridden view data.
Fix:
Net
is now available inipkiss3.all
.Fix: Automatic transitioning between waveguides is now based on a detailed comparison of the waveguide windows. Note: this may change your design. For example, a
PlaceAndAutoRoute
component (which usesConnector
) may now have less unnecessary transitions.Fix:
RouteManhattan
will no longer yield solutions with bend radii that are too small. However, this could in some cases lead to a waveguide crossing.Bugfix: Shapes defined with integer coordinates are now converted to float coordinates to avoid rounding errors.
Bugfix:
ShapeVariableOffset
now works properly on simple shapes.Bugfix: Boolean operations on
Boundary
now correctly take a transformation into account.Bugfix: Layer filters (
LayerFilterAllow
,LayerFilterDelete
) are fixed. They no longer functioned because the class__LayerElement__
was renamed to_LayerElement
.Bugfix:
Label.size_info()
now returns a new emptySizeInfo
object (previously, it returned the globalEMPTY_SIZE_INFO
object).Bugfix: The cross section visualization of a layout view now correctly takes the hierarchy into account.
Bugfix: Trace transitions with zero length now have the correct port angles.
Bugfix: Rounded waveguides where there is not enough bend space in the first and last section will now throw an error. Previously, this was ignored, which resulted in too small bend radii.
Bugfix:
ElectricalPort
is now correctly transformed if you manually set the angle.Bugfix: Making a copy of a port also copies the position into a separate coordinate object.
Bugfix: Small code refactoring to
Port
,Group
,_GroupElement
. As a result, a port no longer contains a portlist itself (which is logical).Bugfix: The process parameter was not passed in IoColumn.add_blocktitle. The pattern purpose for the text was hardcoded and is now a parameter as well.
Improvement:
NameProperty
now prints a valid error message when a non-string is assigned.Improvement:
Transformable
andNoDistortTransformable
do no longer take positional arguments (i.e. the__init__
has been removed). This is very unlikely to affect any user code.Improvement: Trace transitions originating from a port now have default zero length. This default behavior keeps containers more compact when no transitions are needed.
Improvement:
ShapeProperty
is now a class, rather than a shortcut function. This should normally not introduce any compatibility problems, unless you have used theinternal_member_name
attribute.Improvement: The comparison of Trace Templates (and Ipkiss 2.4 Waveguide Definitions) is now more rigorous. As a result, there might be occurences where tapers are removed where trace templates are identical. Also,
WgMziGeneric
in Picazzo will now add tapers in a more reliable way.Improvement: Waveguides and traces now have a default shape:
[(0.0, 0.0), (TECH.WG.SHORT_STRAIGHT, 0.0)]
.Improvement: the template property of a templated
Waveguide
now has a default value. More specifically:_TemplatedWaveguide
:TECH.PCELLS.WG.DEFAULT
.TemplatedWindowsOnWaveguide
:WindowsOnWaveguideTemplate(trace_template=TECH.PCELLS.WG.DEFAULT)
.
[Backward incompatible] Change: environment variable
IPKISS_LOG_LEVEL
has been renamed toLUCEDA_LOG_LEVEL
.
Picazzo
All Picazzo components now have sensible default values.
Added waveguide connectors (
picazzo3.wg.connector
).Added inline waveguide gratings (
picazzo3.wg.grating
).Added a logical inline reflector with a Fresnel reflection model (
picazzo3.logical.reflector
).Added
StraightGratingLine
for simple grating couplers.Fix:
MziWithCells
now calculates the combiner transformation taking into account tapering, and the transformations for splitters and combiners can also be manually overruled.Bugfix:
MziWithCells
now generates a valid MZI arm when the child cell in the arm is specified through inheritance (as a_default_arm1_contents
or_default_arm2_contents
method)Bugfix:
angle_step
is now correctly passed in the ring resonators (picazzo.filters.ring
), from the ring cell to its constituting waveguides.Bugfix:
get_ring_length()
of RingRect.Layout and derived ring resonators now reports the complete ring length instead of one quarter of the ringBugfix:
IoFibcoup
can now handle west ports routed to east and vice versa, when port labels ("E0"
,"W1"
, …) are usedBugfix: Use of predefined columns from
genericpdk.library.io.column
will now work. There was a syntax error before.Bugfix:
MMIIdentical
now has 3 inputs and 3 outputs by default. There was a circular dependence before.Bugfix:
RibMMI
classes now use the default rib waveguide templates, instead of the default strip waveguides.Bugfix: Transition of slot waveguides now adjusts to the layers of the slot waveguide template. Before, these layers were hardcoded.
Bugfix: Transitions created with
AutoTraceTransitionFromPort
now have unique names. As a result names of transitions in your design might have changed.Bugfix:
RoutePortsAroundCorner
now has a one-to-one correspondence between the waveguide instances in Netlist and Layout. Before, the waveguide instances were reordered in the layout, which could lead to a mismatch between layotu and netlist.Bugfix: Trace chains and Spirals were incorrectly connected on netlist level.
[Backward incompatible] Improvement: Wire waveguide transitions
WireWaveguideTransitionFromPortLinear
now have an adaptive length with a minimum ofTECH.WG.SHORT_TRANSITION_LENGTH
. Note: This will have an effect on your design if you used short tapers between a very wide and a very narrow waveguide. Such short tapers can introduce a large loss, and therefore an adaptive length was introduced: The larger the width mismatch between the two waveguide cores, the longer the taper will be.[Backward incompatible] Added property
purpose
toElectricalWireTemplate
, with default valueTECH.PURPOSE.DRAWING
. The original purpose that was used wasTECH.PURPOSE.DF.LINE
. If your technology usedTECH.PURPOSE.DF.LINE
for drawing electrical wires, you need to change this default.Improvements to
PlaceAndAutoRoute
:Added transitions when ports don’t match the trace template.
Added automatic detection and highlighting of crossing waveguides using the
highlight_waveguide_crossings
flag.Added the method
get_waveguide_crossing_points()
on the Layout view.Added the possibility to manually override individual waveguide routes
Added
min_straight
,start_straight
,end_straight
properties on the Layout view. These influence the behavior of the routing.The
links
property has a proper restriction. It checks if it’s a list, with tuples, and each tuple is exactly size 2.
Improvement: in
FanoutPorts
: When no reference coordinate is specified, the first route will follow a more natural shape. Note: this may change behavior ofFanoutPorts
. It will only occur when you perform aFanoutPorts
on a component where the first ports (the reference port) is at an angle with the output direction, and noreference_coordinate
is specified. Now the shortest route to the output direction is used, while originally the waveguide could make a somewhat awkward bend. If you manually specify thereference_coordinate
, there is no difference.Improvement:
RoutePortsAroundCorner
will now sort the ports before generating the routes.Improvement:
StraightWgSocket
for fiber couplers is now centered around (0,0), rather than starting at (0,0). By default, it now overlays correctly on a straight grating.Improvement:
MMI
andRibMMI
classes now have more sensible defaults for widths and input/output positions.Improvement: Generic ring resonators (
RingShape
andRingTraces
) now have a default circular shape instead of an empty shape.Improvement:
ContactHole
andVia12
now use"CONTACT"
and"VIA12"
as name prefix - therefore autogenerated names will change when the name was not manually set.Improvement:
PlaceandConnect
can now logically connect components with electrical as well as optical terms.Improvement: The
ParabolicCrossing
has no hard-coded layer purposes anymore. These can now be set using the propertiescore_purpose
,strip_purpose
,cladding_purpose
andstrip_cladding_purpose
.Improvement: The generic
TraceChain
classes now, by default, concatenate 3 right-angle bends. This illustrates the functionality better.Improvement: The default width of the intermediate wire of a Rib-to-Wire transition (
WireRibWireWaveguideTransitionLinear
) is narrower, resulting in a smoother transition.Improvements to Spirals:
The East output section of
DoubleSpiralWithIncoupling
does not extend as far east as it used to be. It default toTECH.WG.SHORT_STRAIGHT
.Spiral loops are now cut in 2 to avoid self-intersecting polygons on export.
Picazzo 2.4
Bugfix: TaperDeepPorts and TaperShallowPorts had wrong port names: multiple ports with the same name could result. The port names of the tapered structure are now identical to the port names of the original structure.
Removed
InWaveguideHeaterDefinition
frompicazzo.modulators.window_waveguides
.
Ipkiss 2.4
Bugfix: the
ipkiss.plugins.electronics.port
package could not be imported anymore. This is now fixed (for designers that need to run old 2.4 code that uses electronic ports).
Pysimul
Small syntax fix in
SimulationParameterContainer
.
Ipkiss 3.0.1
Changes that introduce a backward incompatibility are explained in more detail in Porting from Ipkiss 3.0 to Ipkiss 3.0.1 .
Ipcore
Improved error message when a property is not valid.
BoolProperty
andRESTRICT_BOOL
now acceptint
and numpy booleans (numpy.bool_
).BoolProperty
now stores its value as a pythonbool
.Small, but important change in the behavior of number properties:
Basic type (
bool
,int
,float
,complex
) properties (such asBoolProperty
,IntProperty
,NumberProperty
andComplexNumberProperty
) always cast the value to the correct type. For example, when 1 is passed to a NumberProperty, it is converted to 1.0.[Backward incompatible]
FloatProperty
now accepts integer values (this means nowNumberProperty
andFloatProperty
are equivalent). The preferred usage isNumberProperty
, as it is used in most places. This casting is done to ensure a consistent user experience. It might, in some very specific cases in your code, result in a changed behavior or a warning.
[Backward incompatible] The
set
method (or_set_bulk
) now only accept keyword arguments that correspond to properties of the component. Originally unknown keywords were ignored, but now unknown keywords will raise an exception. This reduces the chances of obscure bugs due to small programming typos.
Ipkiss
Trace transitions describe the interface between two different kinds of trace templates (
ipkiss3.pcell.trace.transition
). This is an improvement on the Tapers in Ipkiss 2.4. Linear and Parabolic transitions are available. Trace transitions are stored in a database (TECH.PCELLS.TRANSITION.AUTO_TRANSITION_DATABASE
). Transitions cannot be mixed with ‘tapers’ from Ipkiss 2.4.vector_match_transform
now has a parametermirrored
to introduce a mirroring operation.In a hierarchical PCell with childcells , it was often needed to explicitly evaluate the child views (or perform
visualize
). This has now been fixed. See the porting guide for more details.A wrapper
GDSCell
to import external GDS files has been added (ipkiss3.pcell.gdscell
).Adding electrical traces and ports (
ipkiss3.pcell.wiring
).Routes have been ported from Ipkiss 2.4 to Ipkiss 3 (
ipkiss3.pcell.routing
) * Also available for electrical traces and ports. * Added support for manual routing angles. This can be useful for electrical routing.[Future Deprecation]
PortList
now has dict-like methodskeys
,values
anditems
. This makes it similar in use asTermDict
. Use those methods wherever possible to avoid future deprecation.Bugfix:
Port.invert()
did not return an object.Bugfix:
OutputGdsii
,FileOutputGdsii
andwrite_gdsii
: grid and unit arguments were ignored and technology defaults taken. The grid and unit arguments are used now upon GDSII export.Bugfix: in GDSII export: entities with a fixed timestamp (library, structure) can now have a timezone west of UTC. Upon import, any year
xx<=69
is converted to 20xx (Y2K handling) - wasxx<=70
before, which includes the unix epoch.Bugfix in
NewlineStringCollector
:+=
did not properly support a list of items (ipkiss.io.collector
)
Picazzo
[Backward incompatible] All occurences of
LayerProperty
have been removed on picazzo components - theprocess
andpurpose
properties should be used instead. This affects trace templates, photonic crystals, MMIs and grating couplers.[Backward incompatible] Cleanup of technology. Importing the technology is now done using
from technologies import silicon_photonics
.If you have designs/scripts in IPKISS 3.0 syntax that uses
si_photonics
, please change your script to usesilicon_photonics
If you have a custom technology that is based on
si_photonics
, it will still work with components based on IPKISS 2.4 syntax (in backward compatibility mode). But if you want to use your custom technology in IPKISS3, it is better to base it on thesilicon_photonics
technology files.
Added trace bundles and waveguide bundles, which group a set of traces/waveguides routed together. The layout can have a covering hull.
Added electrical wires (
traces.electrical_wire
) and contact vias (electrical.contact
)The Y splitters in
picazzo3.wg.splitters
now have a Caphe model (transmission + 3 reflection parameters)Added
TerminatePorts
,ExtendPorts
,FanoutPorts
,TransitionPorts
,RoutePortsEastWest
,RoutePortAroundCorner
. Added a notebook on containers (samples/notebook3/containers). Each type of container also has a ‘generic’ version where the properties of each port can be adjusted.Refactored
PlaceAndAutoRoute
: the functionality has been separated into individual PCells:PlaceComponents
,ConnectComponents
, andPlaceAndConnect
. You can now use this functionality in a granular way. Also, it is now possible to explicitly name the external ports.Added MMI filters, models have been added. ‘Shallow’ (picazzo2) has been renamed to ‘Rib’. For example,
ShallowMMI2x2Tapered
is now calledRibMMI2x2Tapered
.Added Mach-Zehnder Interferometers. A set of circuit simulation samples for the picazzo MZIs can be found under
samples/ipkiss3/picazzo3/mzi
.Added Curved Grating Couplers. There are 2 classes (
FiberCouplerCurvedGratingGeneric
andFiberCouplerCurvedGrating
). All the functionality previously accessible in picazzo2 is accessible from these 2 classes. Examples in the picazzo reference documentation. There is also a dedicated notebook (ipkiss3\Curved Grating Couplers.ipynb
).Added reflection to grating coupler models. The fiber port is now called
vertical_in
by default.Added Spirals. Includes a bugfix where expanding the spiral in the vertical direction would sometimes be wrong. Please check the reference documentation, and the dedicated notebook (
ipkiss3\Waveguide spirals.ipynb
)Added
IOFibCoup
adapter, which allows to automatically connect fiber couplers to a PCell. Many improvements compared to picazzo in 2.4 were added, including better architecture, improved error handling. For an overview of the features, please check the reference documentation, or the notebook (ipkiss3/IOFibcoup - Routing to fibercouplers.ipynb
).The models for the directional couplers now include the phase propagation of the arms. Please check the reference documentation for more information.
Added phase modulator waveguide templates: P(I)N junction based phase modulator, lateral and longitudinal, and a generic base class.
Added a phase modulator PCell.
Simulation
CAMFR: Removed hard-coded wavelength restriction.
Caphe: fixed bug where setup time for a complex circuit with many levels of hierarchy and many number of ports took a lot of time to load (exponential with the number of hierarchy levels). This is now linear in time.
Caphe: throw an exception if the type of a property value of a CapheModel changes. Make sure to always use strongly typed properties such as
IntProperty
andNumberProperty
, or ensure that aDefinitionProperty
of a CapheModel always returns a value of the same type.
i-Python notebooks
[Backward incompatible] The IPython Notebooks are now based on version 3 of the notebook framework. Your old notebooks should work fine when you load them, but you will have to add
%pylab inline
at the beginning. when saved, they will be in the new format.Added several new demonstration notebooks on containers, grating couplers, IoFibcoup, …
Ipkiss 2.4 compatibility
Ipkiss 2.4 Structures now automatically get a netlist, deriving terms for the Structure’s ports. This makes it easier to use a library with Ipkiss 2.4 Structures as children in Ipkiss 3 PCells.
New technologies (like
silicon_photonics
) will only support Ipkiss 3 PCells. If you want to use Ipkiss 2.4 Structures with a new-style technology you need to import thecompat24
technology immediately after you have imported your technology.Trace transitions should not be mixed with waveguide tapers from Ipkiss 2.4.
Ipkiss 3.0
Most parts of IPKISS are rewritten in IPKISS 3.0, and new functionality has been added. The most notable changes are summarized below:
Functionality
The Caphe circuit solver is now integrated, and circuit simulations can be launched from within Ipkiss
A new framework for describing PCells and their Views has been written
Parametric cells can now also contain netlist and circuit model information
A number of components from the picazzo library were ported to the new syntax and have a netlist and circuit model (picazzo3 library)
A backward compatibility layer with 2.4 has been foreseen. There are a few Backward incompatible changes (documented).
User experience
The installation infrastructure has been revamped. On Windows, a self-contained installer is available, on Linux packages are available.
The documentation has been revamped and sufficiently expanded.
Under the hood
A new property framework (strong typing/caching) was adopted.
Ipkiss 2.4.6
The ipkiss 2.4.6 release is a maintenance release and doesn’t contain any major changes, only bug fixes and small additions.
Ipkiss
Bugfix: the size_info of a Label is now SIZE_INFO_EMPTY, since a label has zero size (on the mask).
Bugfix: Structure.cross_section and Waveguide.cross_section now correctly pass on the process_flow parameter
Picazzo
Bugfix: fixed inverted taper fiber couplers
Improvement: Curved grating couplers now use a different trench abuting to avoid design rule violations
Pysimul
Bugfix: Fixed output coordinates in the slab engine. They can now be set different from input coordinates.
Ipkiss 2.4.5
The ipkiss 2.4.5 release is a maintenance release and doesn’t contain any major changes, only bug fixes and small additions.
Ipkiss
Bufix: Many classes that accept a float would fail if accepting an integer (for example ipkiss.plugins.photonics.routing.to_line.RouteToEastAtY). This has been fixed by changing FloatProperty to NumberProperty in these classes.
Improvements to installer for Windows
New feature: Added support for non-orthogonal flattening in GDSII export
Bugfix: Parameters are now passed to visualize_3d_povray, and colors in povray file are now fixed
Bugfix: fixed bug when calling write_gdsii in older versions of ipython
Bugfix: fixed drc violations for fonts
Bugfix: Fixed dependence on ENVIRONMENT for electromagnetic and optical materials (broken epsilon & mu)
Improvement: Crop visualization window when include_growth parameter is used during physical simulations.
Improvement: ShapeParabolic and ParabolicWedge now accept width_step as a parameter to control the discretisation.
Improvement: Support for BOX elements in GDSII has been improved.
Pysimul
Pysimul: Added option to save MEEP output to a different path.
Documentation
Various fixes in samples
Added meep examples in tutorial_rlmzi.
Added various picazzo examples.
Picazzo
Improvement: WgElBundleWaveguides now automatically detects process layer
Bugfix in shallow waveguide aperture naming
Small fixes in modulator.window_waveguides
Bugfix: Fixed error in triangular lattice photonic crystal when specifying different lattice period values in horizontal and oblique direction
Cleanups in phc.w1 and phc.hetero
Minor bugfixes in wg.grating
Bugfixes in filters.parallel_ring
Improvement: Tapers in wg.wgdefs now have a tip_width property instead of directly using TECH.TECH.MINIMUM_LINE.
ImprovementParabolic tapers now have a property width_step to control the discretisation.
Spectral_toolbox
AWG waveguide lines (bundles) and hull_inversion for MergedApertures now automatically detect the process used.
Star coupler now adjusts waveguide definitions and works on the correct process layer. It is even possible to use deep apertures on the ports, and shallow on the arms.
Allow expanded waveguides with small length.
Ipkiss 2.4.4
The ipkiss 2.4.4 release is only a maintenance release and doesn’t contain any major changes, only bug fixes and small additions.
Ipkiss
Bugfix: IoTitleBlock didn’t have a process property, this has been added now.
Bugfix: Fix in SoftRotationAref.
Bugfix: Fix the centering of the cross_section method in ipkiss.plugins.vfabrication.cross_section.
Bugfix: Removed the nxutils dependency for matplotlib versions >= 1.3.0.
Added license.
Improvement: added AdvWindowsOnWaveguides.
Improvement: Added group_index.py: pysics/optics/group_index.py.
Improvement to technologies: Added soiwg: technologies/si_photonics/models/soiwg.py.
Ipcore
Improvement: Added RESTRICT_NONEVALUE to ipcore.properties.predefined enable None values in List Properties.
Picazzo
Bugfix: The raised module shouldn’t be imported on community edition. ( picazzo.wg.wgdef.wgdef ).
Bugfix: Small bugfix in picazzo.wg.aperture.layout.DeepWgAperture.
Improvements to picazzo.io.fibcoup.layout.FibCoupGeneric: * Added automatic ‘connect_length’ parameter. * Users can now use ‘None’ as a value for ‘connect_length’, ‘east_connect_length’ or ‘west_connect_length’. * Added warnings when minimal bend radius is violated in IoFibcoup.
Improvement: Added double slotted waveguides ( this is only available in developer edition )
Improvement: Added PeriodicArrayReferenceWindow