This document describes how to organize your libraries in IPKISS. This document is useful both if you use only the scripting environment of IPKISS (part 1 - part 3), and when you use OpenAccess enabled EDA tools that interact with IPKISS (part 1 - part 5).
We explain the organization based on the demonstration library and project that is shipped with the software. These libraries can be found under the
samples folder (click the
Samples button from ipkiss control center). Here’s an overview of the folder structure:
The tutorial is structured around 5 parts, which are visualized below:
Step 1: The PDK¶
In a typical design project, a PDK (Process Design Kit) is used. A PDK is a library,
with additional information such as a library handbook, measurement data, specific settings for different design tools,
and so on. You can start from a demonstration library (called
demolib, which is included with the software), or from one of the
The PDK has to fulfill a certain folder structure (Figure).
Step 2: User libraries¶
A user library is a self-contained package that contains additional components, and optionally, technology settings, that a user wants to reuse across different designs. For example, a telecom company may build their own switches and keep that as IP blocks, inside their own libraries. A user library typically targets a certain PDK (because it uses that technology’s process layers, optical settings etc), but it may also be retargetable. A retargetable library (such as the picazzo library in IPKISS) may be reused on different technologies, and ideally makes as little assumptions on the technology as possible.
Step 3: Designs in IPKISS (code-based)¶
In this situation, a user defines a series of optical and opto-electronic components and circuits in IPKISS using a Python script. Then the user performs operations on them, such as generating GDS files, running physical simulations, circuit simulations, and so on.
One important aspect of managing your designs is explaining to Python where each library is located.
This is done using the
PYTHONPATH environmental variable.
It can be set in the project, or it can be defined in each executable Python script.
This is illustrated in the figure below:
In general, a code-based approach to declaring designs and components is practical for the following use cases:
You want to write parametric cells that can be reused, and/or you want to manage hierarchical complexity.
You want to write parameter sweeps for Design Of Experiments (DOE).
You want to generate layout features that are difficult to draw by hand.
Process the information of your components in a (semi-)automated way. For example, export the layout for physical simulation, run circuit simulation sweeps with varying parameters, export port information for a measurement system, integrate your IPKISS components with other tools, etc.
Step 4: Designs in IPKISS (OpenAccess based)¶
When designing in L-Edit, we use OpenAccess as database format.
Typically, L-Edit is used if you want to do the following things:
You want to quickly prototype your next circuit using drag-and-drop and visual routing.
You want to do a lot of electronic routing (either manual, or using the routing functions from L-Edit).
You want to make your chips more compact, and do this in a visual, iterative workflow (i.e., place components, route, replace, reroute, until you’re satisfied).
You want to reuse established EDA workflows such as schematic driven layout.
Step 5: Exporting user libraries to OpenAccess¶
As you may have noticed in Step 4: Designs in IPKISS (OpenAccess based), we need to use an OpenAccess version of
my_library in order to build designs in OpenAccess. To build an OpenAccess version of
my_library, we use the
build_library function from
oatools.library.build. As a convention, we put all exported libraries in
built_libraries. In your project file
lib.defs, you then need to add the new library. Alternatively, you can right-click in the Libraries pane, and select
Add\remove libraries, and then add the library from there.
Each time you modify your IPKISS components in
my_library, you will need to rebuild the library, otherwise you will not get the new changes inside your EDA environment. Note that the IPKISS source code is copied to the
built_libraries, too. Each time a PCell evaluation occurs (i.e., you create a new instance, or change the parameters of an instance), the code will be executed.