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 (eg. 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
},
Two of 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.
Two of these parameters are optional:
- '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.
- 'NumOfChannel' in the "veriloga" object is used to define the number of channels when building the Verilog-A library. If it is not specified, the number of channels will default to 1.
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 then 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 contain statistical parameters with corner values.
For more information on the statistical properties of CMLs, please see: