SKILL is the Cadence Virtuoso scripting language. This document introduces a SKILL-based approach for creating photonic PDK to enable Virtuoso-Multiphysics interoperability workflow. The associated example files attached at the top right of this page include: SKILL files (.il) for creating P-Cell elements (a parameterized waveguide bend, a parameterized photodetector and a parameterized ring-modulator), a Virtuoso technology file (.tf) and an associated display resource file (.drf) as well as a library file (.lib).
Requirements
License
Licenses for the following software is required for this feature:
- Virtuoso® Photonics Platform
Example
This example file provides SKILL codes to create a PDK with 3 P-Cell components in it. These codes demonstrate how SKILL language can be used to automatically create photonic P-Cells in Virtuoso.
To use these files to create P-Cell components in a library:
- Download and extract the PDK_creation.zip folder.
- Navigate to the unzipped SKILL_example folder and launch Cadence Virtuoso.
- Open Library Manager by: CIW window -> Tools -> Library Manager
- Add the “basic” library in Library Path Editor: Library Manager window -> Edit -> Library Path. The “basic” library can be found in: <virtuoso installation directory>/tools.lnx86/dfII/etc/cdslib
- Open SKILL IDE by: CIW window -> Tools -> SKILL IDE
- Open and load create_pcell.il in the SKILL IDE.
- To check the created PDK, select lumfoundry in the library list in Library Manager window, and 3 P-Cell elements will be in the cell list. Double click on the cellviews to open the symbol or layout view.
Taking the Example Further
Information and tips for users that want to further customize the SKILL scripts
Create Technology Libraries
To start with, a technology library is needed to be created. In Virtuoso, technology libraries are where to store PDKs. The SKILL code for creating a technology library is:
ddCreateLib( t_libName )
: t_libName: string
The library name to be created.
A technology library should contain information on display setups, valid layers and purposes, constraints and so on. Therefore, an ASCII technology file defining all the information is needed to be compiled into the technology library. Users can create their own technology files or load an existing technology file. This example loads an existing technology file with the following command:
techLibName = t_libName
techfile = t_sourceFile
techId = techOpenTechFile( techLibName " " "w" )
tcLoadTechFile( techId techfile )
techSaveTechFile( techId )
: t_libName: string
Name of the library from which the technology database is opened.
: t_sourceFile: string
A technology file to be loaded.
Create Cells and Cellviews
Conventionally, each individual P-Cell element is defined as a cell with some cellviews in a technology library. A typical photonic element should include a “layout” view and a “symbol” view.
Create Symbol Views
Symbol views are representatives of the P-Cell components that can be used for schematic designs and simulations. To create a symbol view, the following SKILL code can be used:
cv = dbOpenCellViewByType( t_libName t_cellName "symbol" "schematicSymbol" "w" )
: t_libName: string
Name of the library from which the symbol view is created.
: t_cellName: string
Name of the cell from which the symbol view is created.
After adding the body for creating symbol view shapes, save and close the symbol view with the following lines:
dbSave( cv )
dbClose( cv )
There are many ways to generate a symbol view by SKILL. Here, one possible outline is given below. User can refer to the attached example scripts for reference.
- Create a cellview named “symbol” under the cell and library where it needs to be defined. Specify the view type as “symbol".
- Update the “symbol” view with unique shapes to represent the P-Cell element.
- Draw and name all the electrical and optical pins of the element. Specify the type of each pin as either “signal” or “optical” as well as the I/O directions. These pins will be used as input and output ports in schematic designs.
- (optional) Add labels and annotations to the symbol view.
- Save all the updates to the cellview.
Create Layout Views
Layout views are where to define the physical geometries of the P-Cell components and can be used for fabrication. For P-Cell components, their parameters and layout view are created with the following function:
PcDefinePCell( l_cellIdentifier l_formalArgs body_of_code )
: l_cellIdentifier: list
List containing the library database ID, cell name and view name.
: l_formalArgs: list
The parameter declaration section, containing a list of input parameters and their default values, all enclosed in parentheses. Each element of the list is itself a list containing a parameter symbol. You can specify l_formalArgs as:
(S_paramName tS_paramType t_paramValue)
or
(S_paramName t_paramValue)
: S_paramName: symbol
A symbol of the parameter name.
: tS_paramType: string or symbol
Either a string or a symbol to represent the parameter type of a P-Cell parameter.
: t_paramValue: string
Default value of a defined parameter.
: body_of_code:
SKILL code for creating geometries and pins.
Modifications on the values of the P-Cell parameters will directly change the geometry of the layout. Again, there are many ways to create a layout view for parameterized component by SKILL. Here, one possible outline is given below. User can refer to the attached example scripts for reference.
- Create a cellview named “layout” under the cell and library where it needs to be defined. Specify the view type as “layout".
- Define parameters for the P-Cell as variables. Specify the type of the variables as string and enter the default values of the parameters in double quotations.
- (optional) Set limits for parameter values in case of invalid values causing failure in layout creation.
- Create geometry in each valid layer.
- Draw pins. The pins in the layout cellview must match the pins in the symbol cellview. The following steps show how to define a pin in a layout P-Cell.
- Create the shape of the pin.
- Create the net to which the pin attaches. Specify the signal type of the net as either “signal” or “optical”. The name and the type of the net must match what has been defined in the symbol view.
- Create a terminal and attach it to the created net and specify its I/O direction the same as that in symbol view.
- Create a pin object using the above pin shape and attach it to a terminal and the corresponding net.
- (optional) Define the access direction of the pin. The access direction is a list identifying the correct sides of the pin shape for layout connection.
- For “optical” signal type, specify its photonic width, photonic angle and photonic radius. These attributes define how the pin attached to the net can be connected.