This article will provide a detailed description of how to manually create the libraries for both foundry and primitive elements. For each library requires setups for component symbols and CDF.
[[NOTE:]] This section is optional. CML Compiler automates the following processes to generate a loadable Virtuoso library composed of symbols and CDF. |
Library for foundry elements
Foundry element libraries can be set up manually through Virtuoso Library Manager. These library files are to be distributed to the end-user, alongside the individual Verilog-A element files.
Cells and Views
For each element within the library, a cell needs to be created with the following views:
- symbol is a view for schematic design.
- spectre is a view for Verilog-A simulation netlist partition. This can be a renamed copy of the symbol view.
Both these views should be identical, other than their view names. Furthermore, they should be configured such that the port names within the views match the port names defined in the Verilog-A element.
The settings for each port must match the settings used within the model source data. Signal type should be set to "signal" for electrical ports, and "optical" for optical ports. Optical ports should be set to "inputOutput" to allow bidirectional light propagation.
CDF Setup instruction
Every foundry element needs a proper CDF setup so that its Verilog-A compact model can be loaded for simulation. This can be set up via SKILL code or manually through the CDF editor (CIW window/Tools/CDF/Edit).
First, the design parameters must be set up to match those of the Verilog-A element. To do this, navigate to the 'Component Parameter' tab of the CDF setup window with the CDF layer set to Base. In the table, entries must be added for temperature and any other design parameters of the Verilog-A element. For example:
Name | Type | Default Value | Editable Condition | Parse as CEL | Parse as Number |
---|---|---|---|---|---|
temperature | string | t | yes | yes | |
... | ... | ... | ... | ... | ... |
Note: For Lumerical versions of 2024R2.1 and before, user must also add entries for channel wavelengths with parameter names "lambda1, lambda2, ... lambda<x>", and the number of available channels must match the <NumOfChannels> tag in the library master file used to create the Verilog-A elements. The default values for channel wavelengths must be defined as “wavelength1, wavelength2, etc…”, and their CDF editable condition must be set to “nil”. For example:
When running simulations, the values for the channel wavelengths should be identical for all elements within a circuit. This requirement is no longer required for versions 2024R2.2 and after. |
Next, the simulation information settings must be set up for each element. Navigate to the 'Simulation Information' tab of the CDF setup window. Here, the listing should be chosen by simulator, and the simulator should be set to spectre, as shown in the figure below. Then, the settings for 'instParameters', 'termOrder', and 'componentName' must be set to contain the design parameters of the element, the port names of the element, and the element name, respectively. The lists of design parameters and port names should be provided as space-separated lists, and the design parameters must include the wavelengths of available channels, as well as temperature, as was set in the 'Component Parameter' tab.
Example for CDF Setup
As an example, consider the CDF setup for the straight strip waveguide element in Lumfoundry Template. The data description for this element can be found at Waveguide Straight (Fixed). The element is created with waveguide length as a parameter (wg_length), and includes temperature dependence. There are two ports to the waveguide, both optical, and named "opt_1" and "opt_2". The configuration we end up with is shown in the figures below:
Library for primitive elements
Note: We highly recommend foundries to use the primitive element library created by CML Compiler. The following document is only for foundries who want to create custom symbols for the primitive elements. |
The configurations for the primitive element library is similar to the configurations described in the previous section for foundry elements, however, they must correspond specifically to the five primitive elements created by CML Compiler:
- CW_Laser
- Optical_Meter
- Optical_Oscilloscope
- Waveguide_Y_Branch
- Optical_Termination
Cells and Views
For each primitive element, a cell must be created with the symbol and spectre views. The views within each primitive element's cell should be identical, except for the name of the view. The port configuration for each element is provided below:
Element | Port | Signal Type |
---|---|---|
CW_Laser | opt_1 | optical |
Optical_Meter | opt_1 | optical |
opt_2 | optical | |
Power_mode1 | signal | |
Amplitude_mode1 | signal | |
Angle_mode1 | signal | |
Power_mode2 | signal | |
Amplitude_mode2 | signal | |
Angle_mode2 | signal | |
Optical_Oscilloscope | Opt | optical |
Power_mode1 | signal | |
Amplitude_mode1 | signal | |
Angle_mode1 | signal | |
Power_mode2 | signal | |
Amplitude_mode2 | signal | |
Angle_mode2 | signal | |
Waveguide_Y_Branch | opt_1 | optical |
opt_2 | optical | |
opt_3 | optical | |
Optical_Termination | opt | optical |
CDF Setup
Every primitive element requires a proper CDF configuration to allow it's Verilog-A model to be used for simulation. The procedure to configure the CDF for each primitive element is outlined below:
- CW_Laser
Navigate to the 'Component Parameter' tab of the CDF setup window. Fill the rows of the table with the following parameters for each available channel:
Name | Type | Default Value | Editable Condition | Parse as CEL | Parse as Number |
---|---|---|---|---|---|
lambda<x>_mode1_power | string | 0 | t | yes | yes |
lambda<x>_mode2_power | string | 0 | t | yes | yes |
Where <x> is replaced with the channel number. There should be a copy of these two for every channel, where the number of channels is defined by the <NumOfChannels> tag in the library master file. Note that each channel has the ability to provide output power for either mode 1 or mode 2, which typically refers to the 'TE' and 'TM' modes respectively.
Next, navigate to the 'Simulation Information' tab. Ensure that the listing is being chosen with the 'by simulator' option and that the simulator is set to spectre. Then, set the fields so that:
- termOrder contains a single entry - "opt_1"
- instParameters contains a space-separated list of all the entries within the "name" column of the component parameter table.
- componentName contains "CW_Laser"
At this point, all the CDF configuration requirements for the CW_Laser have been met.
- Optical_Meter
Under the 'Simulation Information' tab, select 'By simulator' and 'spectre. Please fill the fields as follows:
- termOrder - "opt_1" "opt_2" "Power_mode1" "Amplitude_mode1" "Angle_mode1" "Power_mode2" "Amplitude_mode2" "Angle_mode2"
- componentName - "Optical_Meter"
This Optical_Meter is designed to be connected in a series of other optical components to monitor optical signals without the use of termination. This model holds outputs of two modes. Each output is a bus where the length of this bus depends on the number of channels. However, in the case of a single channel model, each output is a single wire. Note: each terminal must be enclosed by quotation when specifying termOrder.
- Optical_Oscilloscope
In the 'Simulation Information' tab, ensure that the listing is being chosen with the 'by simulator' option and that the simulator is set to spectre. Fill the fields as follows:
- termOrder - "Opt" "Power_mode1" "Amplitude_mode1" "Angle_mode1" "Power_mode2" "Amplitude_mode2" "Angle_mode2"
- componentName - "Optical_Oscilloscope"
The Optical_Oscilloscope model will always have outputs of two modes. Each output is a bus where the length of this bus depends on the number of channels. However, in the case of a single channel model, each output is a single wire. Note: each terminal must be enclosed by quotation when specifying termOrder.
- Waveguide_Y_Branch
In the 'Simulation Information' tab, ensure that the listing is being chosen with the 'by simulator' option and that the simulator is set to spectre. Fill the fields as follows:
- termOrder - "opt_1 opt_2 opt_3"
- componentName - "Waveguide_Y_Branch"
- Optical_Termination
In the 'Simulation Information' tab, ensure that the listing is being chosen with the 'by simulator' option and that the simulator is set to spectre. Fill the fields as follows:
- termOrder - "opt"
- componentName - "Optical_Termination"