When creating photonic chip and mask layouts in OptoDesigner, you can use scripts to generate hierarchies of complex building blocks from PDK components. In addition to scripts, OptoDesigner has a number of other tools to help you build layouts, such as GDS files and internal mask representations. This article provides an overview of these tools.
OptoDesigner contains an in-memory representation of any number of masks, called the file cache. These masks may have been loaded from disk or generated by layout definitions. Each cache is referred to by a string, and may (like a GDS II file) contain not only polygon definitions and text, but also static cells (which in turn contain polygon, text and cell calls) and calls to those cells. Many operations can be performed on file cache items, such as Boolean operations and snapping.
Another tool to help build layouts is the gdsfile script class, which is a wrapper around a file cache that provides a simple interface to frequently used functions.
The easiest way to deal with mask files is the gdsfile script class. It is loaded with the command #include @mask/file.
The gdsfile class has the following capabilities:
o topCell: Returns the most likely top cell. The top cell in a mask is the one that is not called by any other cells.
o Query the list of available cells
o Query the list of cells that are being called from anywhere in the mask
o Cell rename and deletion functions
o Cell addition functions
o cellKeep: Delete all cell definitions that are not called by the cell or other cells in its call tree
If the gdsfile class does not fully support your needs, you can also perform direct processing on the file cache. The relevant commands can be found in the Mask File Cache dialog box (Mask menu).
A file cache can be created directly from a design with the ‘mask::exportFileCache’ function.
You can perform Boolean operations between mask layers, or apply operations such as Heal (i.e., remove overlapping areas and merge touching polygons) or Snap on one layer. The operations will create a new file cache containing the results. This means that when you have performed the operation, the original file cache is untouched. To replace the original file cache or to remove all layers included in the Boolean operation except the result:
1. Manually remove the layers using ‘mask::cacheDeleteLayer’
2. Merge the results back into the original file cashe using ‘mask::cacheAppend’
3. Delete the result of the Boolean operation using ‘mask::clearFile’
Important: All single and multi-layer operations that produce a new file cache require you to name the new cache (the parameter ‘Alias’). For performance reasons, OptoDesigner assumes that if a cache with that name already exists, it has the correct data and will not be recalculated. Therefore, it is imperative to either delete intermediate results or to make sure that each one is unique – unless you know that the data will still be correct later in the script, ready for re-use.
Under 'Mask File Cache / Boolean mask operations,' you’ll find all single- and multi-layer layer processing functions. Each of these can take up to five input mask file caches (arguments ‘Mask’ and ‘Merge’), from each of which a subset of layers can be chosen, with one output layer (argument 'Layer').
All selected layers from all input file caches are merged together before the operation takes place. The multi-layer operations always need an output layer to which the results are written. The single-layer operations (heal, snap, fracture, etc), however, also have the option of not specifying the output layer. This will automatically perform the operation on the ensemble of layers, producing the output in all the same layers as were in the input. If you do specify an output layer, the functions first merge all polygons from all specified layers from all inputs together before performing the operation.
Some more generic tips and tricks:
A common task when studying waveguide-based photonic devices is to launch a mode of the waveguide into the device to investigate how the mode will be propagated through the device. This can be tricky when you are studying a wavelength range where the mode changes with wavelength. The Computed Mode feature provides a convenient way to solve this issue.
Computed Mode calculates the mode of the structure on the fly and then uses it as the launch field. As an example, we will use a variation of the feature that calculates the mode of a structure defined in a separate design (.ind file). We will simulate a Si Y-splitter, shown in Figure 1a (SiYSplitter.ind). Figure 1b shows the launch configuration where we have chosen a launch Type of Computed Mode and set the Comp Mode .ind File to SiWG.ind. SiWG.ind is another design file that represents a standard silicon waveguide and matches the input of the Y-Splitter.
Figure 1: a) Y-splitter structure
Figure 1: b) Launch dialog box setting for launch waveguide mode
Figure 2 shows the result of a beam propagation simulation of the Y-splitter using Synopsys’ BeamPROP BPM simulation tool. The result in Figure 2a shows the field along the device and the overlap power with launch mode. Figure 2b shows the output power at the end of Y-splitter vs. wavelength for two different Si waveguide widths. The launched modes are calculated using the .ind file specified in the launch dialog box for each wavelength/width and then used to make measurements during the simulation.
Figure 2: a) Field within Y-Splitter at one representative wavelength/width
Figure 2: b) Output vs. wavelength for two different waveguide widths
This PDK is a plug-in library for OptoDesigner developed by AMF. In addition to the photonic elements from the standard generic design library, the PDK contains technology-specific information including mask layer names, design rules, validated building blocks, die sizes, and GDS file settings. The PDK has been updated since June 2019 with: