The library master file stores metadata about the compact model library, as well as an index of elements which are to be created by CML Compiler.
The Lumfoundry Template library, distributed with CML Compiler, contains three different library master files listing different elements from the source folder. 'lumfoundry_template_basic.json' lists one basic template for each photonic model that we offer. 'lumfoundry_template_statistical.json' lists all the statistical elements included in the lumfoundry template folder. 'lumfoundry_template.json' lists all the templates included in the library from basic elements to advanced and statistical. This complete library master file also categorizes the elements into different library subfolders based on their device type (e.g. waveguides, modulators, etc.). In this case the library generated by CMLC will contain subfolders specified by the user in the library master file.
The library master file 'lumfoundry_template.json' will be used as an example here.
General data
The file starts with general information about the compact model library:
{
"foundry_name": "lumfoundry_template",
"version_suffix": "4.0",
"process_prefix": "lum_",
"veriloga": {
"NumOfChannel": 2
},These parameters are required:
- 'foundry_name' is used to set the name of the compact model library. This will be the name of the Design Kit within INTERCONNECT, as well as the name used for the CML file that will be distributed to the end users.
- 'version_suffix' is used to set the version number of the library. The version number will be displayed to the end user as the version of the Design Kit within INTERCONNECT. It will also be displayed in the "version" property of each CML element, where it will not be editable.
- 'process_prefix' can be used to add a global prefix to the name of all the individual elements in the library. This is optional if you would rather not use a prefix, simply remove the line that defines it within the library master file.
These parameters are optional:
The “veriloga” object only pertains to building Photonic Verilog-A models, and has the following options
- 'platform' determines which platform the Photonic Verilog-A models are built for. Use “SNPS” for Synopsys Verilog-A models, and “CDS” for Cadence Verilog-A models. The default value is “SNPS”.
- 'NumOfChannel' in the "veriloga" object is used to define the number of channels when building the Verilog-A library. The default value is 1.
- 'symbol_generation' defines if symbols are to be generated and applies to both Synopsys and Cadence platforms. Set this value to 1 to enable symbol generation, and 0 to disable symbol generation. The default value is 0.
- 'qa_solver' determines the solver used for the QA tests of the Verilog-A models and only applies to Synopsys platform. This will be ignored if the platform key is set to “CDS”. Use 'primesim_spice' to select PrimeSim SPICE as the QA solver, and use 'primesim_hpsice' to select PrimeSim HSPICE as the QA solver. The default value is “primesim_hspice”.
- 'port_convention' is only used if third-party port convention for Verilog-A models is required for compatibility with third-party Verilog-A models. This option applies to both Synopsys and Cadence platforms. See the Knowledge Base page on Custom Ansys Photonic Verilog-A for co-design with Foundry PDKs for an example on how it is used.
The “interconnect” object (enclosed in the same braces as “veriloga” object) only pertains to building INTERCONNECT compact models, and has the following options:
- ‘platform' determines which platform the INTERCONNECT compact models are built for. Use “SNPS” for Synopsys OptoCompiler-INTERCONNECT compact models, and “CDS” for Cadence Virtuoso-INTERCONNECT compact models. The default value is “SNPS”.
- 'symbol_generation' defines if symbols are to be generated and applies to both Synopsys and Cadence platforms. Set this value to 1 to enable symbol generation, and 0 to disable symbol generation. The default value is 0.
The rest of the library master file contains an index of all the elements to be created by CML Compiler. These elements can be categorized into library subfolders as shown below.
"element_list": [
{
"subfolder_name": "Waveguides",
"elements": [
{
"element_name": "wg_strip_straight_c"
},
{
"element_name": "wg_strip_arc_c"
},
The "element_list" is an array of objects representing the elements in the library. Optionally, the elements can be placed in subfolders by creating objects with a “subfolder_name” and an “element” array containing objects with the names of the elements in the subfolder, “element_name”.
When CML Compiler is run, all the elements listed under a subfolder tag can be found under a library subfolder with the name specified in the library master file as shown below.
To avoid using subfolders you can also place the element objects directly in the "element_list", as shown in the Lumfoundry Template library's 'lumfoundry_template_basic.json' library master file:
"element_list": [
{
"element_name": "container_element_child1"
},
{
"element_name": "container_element_child2"
},Statistical data
When creating a compact model library with statistically enabled compact models, the library master file needs to be updated with some additional information within the “statistical_data” object:
"statistical_data": {
"statistical_parameter_status": "open",
"nominal_value_type": "mode",
"GLOBALGROUP_list": [
{
"GLOBALGROUP_name": "global_delta_width",
"distribution": "normal",
"sigma": 1.0
},
{
"GLOBALGROUP_name": "global_delta_height",
"distribution": "normal",
"sigma": 1.0
},
{
"GLOBALGROUP_name": "global_delta_ridge_height",
"distribution": "normal",
"sigma": 1.0
}
],
"CORRGROUP_list": [
{
"CORRGROUP_name": "corr_delta_width",
"correlation_length": 0.003
},
{
"CORRGROUP_name": "corr_delta_height",
"correlation_length": 0.01
},
{
"CORRGROUP_name": "corr_delta_ridge_height",
"correlation_length": 0.003
}
],
"corner_list": [
{
"corner_name": "corner_1"
},
{
"corner_name": "corner_2"
}
]
}The "statistical_parameter_status" is used to provide the status of the statistical parameters in all the statistically enabled compact models in the library. This is a required parameter that has three options:
| Statistical Parameter Status | Behavior |
| open |
The statistical parameters will be visible to the end user in the compact model. End users will be able to see the distribution of the statistical parameters as well as the correlation matrix in a Monte-Carlo sweep. |
| hidden |
The statistical parameters will be hidden from the end user in the compact model. End users will be able to see the distribution of the statistical parameters as well as the correlation matrix in a Monte-Carlo sweep. |
| protected |
The statistical parameters will be hidden from the end user in the compact model. End users will not be able to see the distribution of the statistical parameters or the correlation matrix in a Monte-Carlo sweep. |
The "nominal_value_type" is used to choose the nominal value of statistical parameters for all statistically enabled compact models in the library. This is an optional parameter that has two options. If not provided, CML Compiler will internally set this value to 'mode'.
| Nominal Value Type | Behavior |
| mean | The mean value of the statistical distribution will be used as the nominal value of all statistical parameters for regular (nominal) simulations. |
| mode | The mode of the statistical distribution will be used as the nominal value of all statistical parameters for regular (nominal) simulations. |
GLOBALGROUPs are defined in the "GLOBALGROUP_list" by providing the distribution type and parameters for each GLOBALGROUP. The available distribution types are:
| Distribution Type | Distribution Parameters |
| normal |
Normal or Gaussian probability density function, defined using the following parameter: sigma: standard deviation of the probability density function. Note: The mean of the distribution is provided in the element source data file as a property of the individual statistical parameter. |
| pearson4 |
Pearson IV probability density function, defined using the following parameter: sigma: standard deviation (variance) of the probability density function. gamma1: skewness of the probability density function. beta2: kurtosis of the probability density function. Note: The mean of the distribution is provided in the element source data file as a property of the individual statistical parameter. |
CORRGROUPs are defined in the "CORRGROUP_list" by providing the "CORRGROUP_name" and the correlation length for the CORRGROUP as the "correlation_length".
Process-corner modeling can be enabled by providing the "corner_name" within the "corner_list" tag. This is an optional parameter and should only be defined in one or more compact model(s) in the library containing statistical parameters with corner values.
For more information on the statistical properties of CMLs, please see: