The Cadence Virtuoso layout integration allows the import of fixed or parameterized P-cell geometries defined in Virtuoso Layout Suite, into Ansys Lumerical multiphysics solvers (FDTD, MODE, CHARGE, etc.). This feature can be useful for ensuring consistency in the geometries in your layout and simulation, or for parameter sweeps and optimizations in multiphysics solvers with geometries parameterized in Virtuoso.
The layout geometry wizards available in either Lumerical multiphysics solvers or Cadence Virtuoso automate the import process and allow for easy review and update of the parameter configuration. Additionally, it is possible to use Lumerical scripts directly for setting up the layout integration. We provide a step-by-step guide with examples for these three approaches. The associated example files attached at the top right of this page include: files for the Virtuoso elements in an example library (lumfoundry), a Cadence layermap file and a Lumerical process file, as well as the .lsf files for the scripts approach.
Requirements
Files
A Layer Builder process file describing the vertical layer information and materials for the manufacturing process as well as a CAD layer mapping file is required to use this feature. Both of these files are typically provided in a foundry PDK. To create a custom PDK, please refer to Create Photonic PDK Through Virtuoso SKILL.
Licenses
Licenses for the following software is required for this feature:
- Virtuoso® Photonics Platform/Option.
- Lumerical multiphysics solvers.
Support Matrix for Software
Option | Virtuoso Version | Lumerical Suite Version |
---|---|---|
1 |
ICADVM20.1.500.2100 ~ ICADVM20.1.500.2400 |
2021 (R2.4), 2022 (R1, R1.1, R1.2, R1.3, R1.4) |
2 | ICADVM20.1.500.2500 ~ ICADVM20.1.500.3000 |
2022 (R2, R2.1, R2.2, R2.3, R2.4), 2023 (R1, R1.1, R1.2) |
3 | ICADVM20.1.500.3100 ~ ICADVM20.1.500.3400 |
2023 (R1.3, R2, R2.1, R2.2) |
4 | IC23.10.020 ISR2 or later |
2023 (R2.3 or later) |
Environment Setup
To set up your environment to use the Virtuoso layout integration feature, enter the following shell commands to set the necessary environment variables:
setenv Virtuoso_Photonics_Platform setenv cds_root /path to Virtuoso installation/
In addition, if you want to use the Layout Geometry Wizard in Virtuoso (see below), you need to install the EPDA environment in your working directory as explained here.
Layout Geometry Wizard (in Lumerical)
This wizard available multiphysics solvers, provides a GUI for selecting the Cadence cds.lib file, along with the Lumerical process file and Cadence layer map file. You can choose from the available libraries and cells, and review the layer mapping and the parameters defined in Virtuoso.
Once the wizard is finished, an analysis/model group with the geometry and parameters from the Virtuoso P-Cell will be added to the simulation. The setup script of the analysis/model group is automatically configured to query the layout information from Virtuoso whenever the values of the parameters of the group are changed. The following example provides more detail about how the wizard can be used:
- Download and extract layout_integration.zip folder. Then open FDTD. Start the layout geometry wizard. The wizard is located in the Main toolbar under the Build section.
- Browse and select the Cadence library file “cds.lib” and click on Next.
- Choose the geometry to import. In the Virtuoso section keep the library name as “lumfoundry” and select “pd_pcell_c” for the cell name and “layout” for the view name. A layout view is needed for the geometry to be created.
- Select the layer sources. For this browse and select the layer map file “lumfoundry.layermap”, and the process file “lumerical_foundry_process_file.lbr”. Then select Next.
- Here the list of input parameters and layer mappings are made available for review. You can go back in the wizard if you need to change something. In the parameter list you can disable parameters that you want to remain fixed at the default value.
- You can also enable the “Initialize FDTD region and ports (BETA)” option to add the simulation region and FDTD ports. Note that this option is only available in FDTD and MODE solvers. Click on Finish, once you are done with this step.
Below you can see how the wizard will look like after each step (1-3):
Once the wizard is finished, the layout information is combined with the process file and layer map information to create and add the 3D geometry to the simulation as a layer builder object inside the analysis/model group. Note that if you enabled the “Initialize FDTD region and ports (BETA)” option in step 6, there is also an FDTD region with ports under the analysis group.
The communication with the Virtuoso P-Cell to update the objects under the analysis group is handled in the setup script of the group (Setup > Script tab) using the commands described in the section Importing Component Layout Through Script.
For example, we may decide to change the width of the created objects. Once applied the changes will take effect immediately.
Note: The “Initialize FDTD region and ports (BETA)” uses the photonic pins in the Virtuoso P-Cell to identify the location and orientation of the FDTD ports. This is still a BETA feature with limited support and so it is important to verify the setup before running your simulation. The Layout Geometry Wizard leverages different objects in Finite Difference IDE (FDTD, MODE, etc.) and Finite Element IDE (CHARGE, etc.) for configuring the layout integration. It generates a new analysis group in the Finite Difference IDE but it leverages the model object in the Finite Element IDE. |
Layout Geometry Wizard (in Cadence)
- Download and extract layout_integration.zip folder. Open Virtuoso in the same working directory. Make sure the EPDA environment has been installed in the working directory as explained here.
- Open Library Manager from the Tools section. In the new window select the Library and Cell. Here we select the lumfoundrylLibrary and pd_pcell_c cCell. Then double click on layout in the view section to open/create the P-Cell.
- Open the Layout Geometry Wizard. For this click on “Lumerical” in the Main toolbar and select “Import design into Multiphysics Suite”.
- Choose the Lumerical solver where the layout will be imported. Browse and select the Cadence layer map file, and the Lumerical process file. For FDTD solver, to add the simulation region and ports as well, enable the “Add FDTD region and ports” option. Then click on OK.
Once finished, the layout information is combined with the process file and layer map information to create and add the 3D geometry to the simulation in the same way as with the Lumerical wizard. As mentioned in the previous section, the associated analysis group/ model object is also created which allows you to change the parameters of your structure (for example rotation) immediately.
Importing Component Layout Through Script
There are three script commands used to access the Virtuoso layout integration feature:
- itkdbgetparams: Returns a list of the parameters for the chosen device with their names, default values, and types.
- itkdbgetgeometry: Returns the geometry and pins for the chosen device as a struct with layer and polygon vertices data.
- cadtostreamlayer: Maps the Virtuoso CAD layers returned by itkdbgetgeometry to the manufacturing layers in the process file.
Details about the syntax of these commands are given on their respective documentation pages.
As these are stand-alone script commands, there are many ways they could be combined to import your device layout from Virtuoso. One possible outline of how these script commands could be used to import and update multiphysics solver geometries is given below.
- (P-cells only) Use the itkdbgetparams command to get a list of parameters and their default values for the P-Cell.
- (P-cells only) Update the parameter values returned by itkdbgetparams.
- Use itkdbgetgeometry with the updated parameter values to get the device’s shape and layer information from Virtuoso.
- Use cadtostreamlayer to convert the CAD layer information returned by itkdbgetgeometry to the manufacturing layers.
- Create a Layer Builder object.
- Load the process file information into the Layer Builder object with the loadprocessfile command.
- Set the geometries of the Layer Builder layers with the polygons returned by itkdbgetgeometry to the layers returned by cadtostreamlayer. See the Layer Builder page for details on how to apply polygons to the Layer Builder.
This process could be streamlined with an analysis group (FD-IDE, FDTD, MODE, etc.) and model (FE-IDE, CHARGE, etc.), using the Virtuoso layout integration script commands in the analysis group/ model setup script to import the geometry. The geometry parameters could be set using the analysis group/ model’s setup variables, which are then given as inputs to itkdbgetgeometry to obtain the device geometry for those parameters. The device geometry can then be applied to the Layer Builder object. This is how the Layout Geometry Wizards described previously automatically configure the integration. The example below illustrates how to use a script instead of the wizards in the setup.
Example
The example file provides Lumerical scripts for setting up the layout integration in FDTD. These scripts demonstrate how the Virtuoso layout integration script commands can be used to import the Virtuoso element layout to Lumerical multiphysics solvers.
To use these files to import an element layout from the lumfoundry library:
- Set up your environment by following the instructions in the “Environment Setup” section.
- Download and extract the layout_integration.zip folder.
- Open FDTD and set the working directory to the layout_integration folder.
- Run the script set_target.lsf file in FDTD.
When the set_target.lsf file is run, an analysis group will be created that uses the Virtuoso layout integration script commands in its setup script to import a ring modulator geometry from the lumfoundry library:
The FDTD region and ports will also be added based on the device geometry and pin locations. To import a different layout from the PDK, change the cellName
in the set_target.lsf script to a different cell name from the Virtuoso library.
To modify this example to import your own geometries from Virtuoso, update the variables in the set_target.lsf script to your own CDS library file, library name, cell name, view name, etc. To build only the geometry without the FDTD region and ports, comment out the line build_geometry_fdtd_ports;
and build_geometry_device;
and uncomment the line build_geometry_basic;
before running the script. To use this script to build geometry in Lumerical DEVICE, comment out the line build_geometry_fdtd_ports;
and build_geometry_basic;
and uncomment the line build_geometry_device;
before running the script.