The Layer builder button adds a layer builder object. It can be used to construct a layered structure consisting of planar unpatterned layers as well as patterns imported from a GDS file. Patterns can also be defined via Lumerical script. This tool allows you to:
- Easily change the position, ordering, and thickness of each layer.
- Translate the position of the patterning within a layer.
- Add sidewall angles to patterns. For more information see Tips for adding sidewall angles to simulation objects – Ansys Optics.
- Export and import the layer configuration, including material data, as a process file (.lbr).
Compared to the GDS import option described in GDSII - Import and export, the Layer Builder offers a more complete solution because it can combine the pattern information from GDS files with the vertical layer information from a process file. This functionality can be very useful, for example, in custom design of components using a particular foundry process.
Note: Limitations of layer-builder
|
The following sections explain how to set up a layer builder object, illustrating each step with a simple example of a silicon y-branch structure both from scratch and from an existing process file:
- All the setup operations can be done either from the GUI or from script. It is recommended to become familiar with the GUI first (see Setting up from the GUI).
- For a complete list of script commands and references to their specific documentation see the section Setting up from script.
- Finally, some additional considerations for configuring a layer builder object are explained in the Appendix section.
Setting up from the GUI
This section covers the following topics:
- Add and edit a layer builder object
- Set up the pattern geometry
- Add and edit process layers
- Set up the background geometry
- View the final structure in the CAD
Add and edit a layer builder object
Open a new simulation file, add a new layer builder object by clicking on the button and open the Edit window for the new object.
Set up the pattern geometry
NOTE: In the GUI, the pattern geometry can only be defined by importing a GDS file. The alternative is to define the geometry via script by providing the polygon vertices directly to the layer builder object, as explained in Setting up from script. |
In the Layout section of the Layer Builder Edit window, you can:
- Import GDS file. Note that the file is loaded once when this button is used. The GDS file is not reloaded automatically in the future if there are changes; therefore, you must reload the file if it has changed and you want to update the geometry in the layer builder object accordingly. The name and location of the GDS file at the time it was imported is shown in the GDS file box.
- Reload GDS file with the name and location specified in the GDS file box. It is possible to perform this operation directly from the layer builder object by right-clicking on it in the Objects Tree and selecting “Reload GDS file”. If the file name or location have changed, you need to use the Import GDS file button instead.
- Remove geometry to clean the pattern geometry saved in the layer builder object. This will also clear the GDS file box.
- Select a GDS cell in the GDS file to be imported.
- Choose the GDS sidewall angle position reference applied to the GDS patterns in all the process layers. The XY cross-section of the structure will match with the GDS pattern at this position. Options are middle (default), top or bottom of the layer. For more information on sidewall angle see Tips for adding sidewall angles to simulation objects – Ansys Optics.
- Export a GDS file with the pattern geometry and layer numbers currently saved in the layer builder object.
Note that a layer builder object can only load data from a single cell from a single GDS file. If you need to import multiple cells from one or multiple GDS files into a single simulation, you need to create a layer builder object for each of them.
Example
Download the y_500.gds file from the Associated Files section above and click on the Import GDS file button to load it into the layer builder object. This GDS file has only one cell, as shown below:
Add and edit process layers
NOTE: If you already have a process file (.lbr), you can load it with the Import process file button. This will automatically load all the process layer information from the file into the layer list, which you can then edit if needed, as explained here. If no changes to the layer list are required, you can skip this section and go to Set up the background geometry after importing the process file. |
In the Layers section of the Layer Builder Edit window, you can:
- Add or Remove process layers.
- Change the position of a process layer in the list by selecting the layer and using the Up and Down buttons. The order of the layers in the list is important to determine their priority correctly when they overlap, as explained in Priority of overlapping process layers.
- Enable or disable the objects in the simulation that correspond to a process layer by checking or unchecking the corresponding tick box in the enabled column.
- Define a name for the process layer.
- Select the corresponding GDS layer number. Note that multiple process layers can be associated with a single GDS layer; i.e. the mapping between the two types of layers is not necessarily one-to-one and it depends on the process definition:
- The list of available GDS layers is shown if a GDS file has been imported beforehand.
- Otherwise, use the option "<Other>" to specify a GDS layer. You can also use this option to specify a GDS layer using Boolean operations:
- Use not( ) to generate the negative of the pattern (i.e. the background minus the pattern).
- Use or to generate all patterns corresponding to the selected layer numbers.
- Use and to generate the overlap of the patterns corresponding to the selected layer numbers.
- Use xor to generate the patterns corresponding to the selected layer numbers minus their overlapping areas.
- Specify the start position of the layer, which is the z position where the extrusion of the layer starts, in coordinates relative to the origin of the layer builder object (defined in global simulation coordinates in the Background geometry section). By default, the start position of a new layer is “Auto”, which means that it will be right on top of the previous layer in the list; for the first layer, “Auto” sets the start position to the origin of the layer builder object.
- Provide the thickness of each process layer. It can be a positive or negative real number depending on the direction the layer extends from the start position defined above:
- Upwards (positive z direction) for positive values.
- Downwards (negative z direction) for negative values.
- Define the GDS pattern and background material. This can be any material from the Material database or an “Object defined dielectric”. The material data can be saved in the process file as explained in Exporting and importing material data.
- Choose a type of process step:
- Background: No pattern from GDS (or its negative) is used; therefore, “pattern material” is disabled and “background material” must be specified. A rectangle with the position and span defined in the Background geometry section is added as the process layer.
- Grow: The GDS pattern is extruded from the specified start position. “Pattern material” must be specified but “background material” is optional. If "background material" is specified, a rectangle with the position and span defined in the Background geometry section is added to set the background material surrounding the extruded pattern.
- Add sidewall angle to the pattern in a process layer. The sidewall angle can take values in the range (0,180) degrees:
- = 90 degrees (default): perfectly vertical wall.
- < 90 degrees: the pattern at the bottom of the process layer is larger than at the top.
- > 90 degrees: the pattern at the bottom of the process layer is smaller than at the top.
- Add a pattern growth delta to a process layer. This delta is a uniform shift of the patterns outwards (if positive) or inwards (if negative). It can be used to capture uniform under-etch or over-etch due to fabrication. Note that even when a pattern growth delta has been applied to a layer, only the original pattern will be exported to the GDS file.
- Import and export your process layer configuration as a process file (.lbr). Once you have configured your list of layers, you can save it in a process file that can be loaded in any layer builder object. It is possible to save the material data (e.g. sampled data, fit parameters, etc.) in the process file by checking the option “export materials”; otherwise, only the material name will be saved in the process file. See Exporting and importing material data for more information.
Example
For the y-branch example, add five layers in the Edit window of the Layer Builder and configure them as shown below:
Alternatively, you can load the example process file lumerical_foundry_process_file.lbr from the Associated Files section.
Note the following:
- For "BOX" the "Auto" option can be used for start position since this process layer is stacked on top of "Si_Substrate".
- For "Si_CoreStripWG" and "Si_SlabRibWG" the start position is set to 0 because the bottom of these process layers coincides with the bottom of "TOX".
- For "Si_Substrate" the start position is set to -2 um and the thickness to -10 um so that the process layer extends downwards starting at the bottom of "BOX".
- The process of "Si_Substrate", "BOX", "TOX" are set to "Background" since they have no patterning. Note that the layer number and pattern material fields become disabled.
- The GDS layer 1:1 used in "Si_SlabRibWG" is not present in the example GDS file and so the layer number is highlighted in yellow.
- If you want to use the negative of the GDS pattern in "Si_CoreStripWG", you can use not(1:0) as the layer number.
Set up the background geometry
In the Background geometry section of the Layer builder Edit window, you can:
- Define the (x, y, z) position of the origin of the layer builder object in global simulation coordinates. This origin also defines the center of the background geometry in the XY plane. Note that the z position corresponds to the bottom of layers if the start position of all the layers is “Auto”.
- Set the x and y span of the background geometry for all layers, which should be large enough for the GDS patterns to fit inside.
- Specify the base mesh order (default is 2), which is the lowest mesh order a structure inside the layer builder object can have. This setting can be used to set the priority of the structures inside the layer builder object relative to other simulation objects when overlap occurs, as explained here.
- Set x and y positions of the origin of the GDS pattern reference frame in coordinates of the layer builder object. You can choose from pre-set options in the drop-down menu to align the origin of the GDS coordinate system with the origin or the corners of the background geometry; it is also possible to specify custom (x, y) coordinates.
- A preview is automatically generated showing the GDS pattern (blue box with the origin of the GDS reference frame marked by a cross) and the background geometry (red box).
Example
In the y-branch example configure the background geometry as shown below:
View the final structure in the CAD
The layer builder automatically sets up a structure group containing the objects. You can view and select the structures by expanding the layer builder in the Objects tree, as shown below. Note that the objects under the Layer builder cannot be edited directly: to make any changes you must edit the parent layer builder object.
The Layer builder automatically sets the graphical rendering opacity of the structures it generates: background layers get alpha = 0.3 and grow layer get alpha = 0.8. Therefore, background layers are more transparent by default. However, the user can change the opacity of a layer using the script command setlayer, as explained in the next section.
Setting up from script
A layer builder can also be added and set up completely from script. The example script file layer_builder.lsf sets up the same structure described in Setting up from the GUI. As mentioned in Add and edit process layers, layers can be added one by one from scratch or all at once by loading a process file. The example shows how to do both by script.
The usage of the relevant script commands is summarized below. For more detailed information on each of them please visit their specific documentation:
- Add a layer builder object:
- addlayerbuilder: Adds a layer builder object to the simulation environment.
- Setup pattern geometry:
- Import/export GDS file:
- loadgdsfile: Loads a GDS file into a layer builder object.
- getcelllist and getlayerlist: Return the list of cells or layers associated with the loaded GDS.
- savegdsfile: Creates a GDS file with the pattern geometry from a layer builder object.
- Defining polygon vertices from script:
- set and get/getnamed: Define or access the polygon vertices stored in the layer builder object with “geometry” as property. See Format of polygon vertices data in Layer Builder for information on how the vertices are stored.
- Import/export GDS file:
- Add and edit process layers:
- From scratch:
- addlayer: Adds a process layer to the layer builder object.
- setlayer and getlayer: Set or retrieve the properties of the specified layer. In addition to the properties in the layer list in the GUI, you can also override the default graphical rendering opacity of the pattern and the background by using the properties “pattern alpha” or “background alpha”, respectively (see Viewing the final structure in the CAD).
- From/to a process file (.lbr):
- loadprocessfile: Loads the specified process file in a layer builder object.
- saveprocessfile: Exports the process information in a layer builder object as a process file.
- From scratch:
- Set up the background geometry:
Setting up active components
The procedure for setting up the Layer Builder for active components is similar to the one for passive components, apart from the additional steps for electrical/thermal material models and doping objects. Please refer to the Setting up from the GUI section for details of the steps common to passive and active components. In this section, we will show the typical flow for setting up active components using i) a process file containing layer definition for optical/thermal properties and doping and ii) a GDSII file containing geometry and doping pattern.
NOTE: You need a Lumerical version 2022 R1.1 or later for a Layer Builder that supports doping objects as well as electrical, thermal, and index perturbation materials, enabling full active component design and simulation. |
1. Add a Layer Builder
2. Import the GDS file containing the doping pattern as well as the device geometry.
3. Define the process layers through the GUI or a script. Alternatively, you can import a pre-defined process file. For active components, the 'Doping' tab needs to be populated with details of each doping layer. This together with the doping region defined in the GDS file is used to automatically create matching doping objects in the Object Tree as shown below. Note that you need to add the CHARGE solver object, to make the doping objects visible.
The Layer Builder allows Implant and Constant doping regions. The definitions of most of the parameters in the "Doping" tab can be found on the following pages:
Those parameters unique to the Layer Builder is as follows:
- layer number: The layer number of the GDS file containing the corresponding doping region.
- process: Specifies the type of doping region. Choose "Implant" and "Background". "Background" means a Constant doping region.
Example:
- Download the active.GDS and active.lbr.
- Add a Layer Builder and a CHARGE solver in DEVICE.
- Open the Layer Builder and import the GDS and process files into the Layer Builder.
Once they are imported, the Object Tree is populated with auto-generated "layer group" objects and materials as below:
Creating a process file using Python script
-
Download the process_file_py.zip package and inspect the files.
-
Open a new Lumerical project and run the process_file_compiler.py to create the process file.
-
Example of how the process file can be used to create a phase shifter using a GDS file.
The purpose of this section is to familiarize the user with the package and provide instructions on how to create a process file using the Python script. First, download and unzip the process_file_py.zip to access and review the content of the package. The basic script file that is executed to create the process file is the process_file_compiler.py. This .py file uses a series of .csv files to load the materials, thermal and electric properties, and variations. The first step is to load and run the Python script process_file_compiler.py from a blank Lumerical project. You may need to change the working directory from the script file editor. The compiler uses a series of .csv files for the creation of the .lbr process file. Most of these files may be optional and can be set as active or inactive from the process_file_compiler.py script depending on the user’s process preferences. The package contains the following files that are used by the script:
- process_layers.csv: Sets the parameters of the Layers Geometry tab of the layer builder object.
- doping_process_layers.csv: Sets the parameters of the Layers Doping tab of the layer builder object. This file is optional and only needs to be provided if the ‘electrical_process_file’ flag in the Python script is set to true.
- Si_Palik.csv, SiO2_Palik.csv and Al_CRC.csv: Refractive indices of the materials. These files are optional and only need to be provided if the ‘custom_sampled_data_materials’ flag in the Python script is set to True.
- material_data_fit.csv: Sets the data fitting and color of the materials. This file is optional and only needs to be provided if the ‘custom_sampled_data_materials’ flag in the Python script is set to true.
- active_material_models.csv: Sets the charge transfer (CT) and heat transfer (HT) properties of the materials. This file is optional and only needs to be provided if the ‘electrical_process_file’ and/or the ‘thermal_process_file’ flag in the Python script is set to true. If either of these flags is set to True then a CHARGE session will also open.
- index_perturbation_data.csv: Refractive index perturbation of Si_Palik. This file is optional and only needs to be provided if the ‘custom_index_perturbation_materials’ flag in the Python script is set to True.
- pattern_variations.csv and stack_variations.csv: Sets the variations of the mask and of the Si thickness, respectively. These files are optional and only need to be provided if the ‘statistical_process_file’ flag in the Python script is set to True.
After running the script, the lumfoundry_process.lbr has been successfully created and saved in the same directory.
It is important to mention that the Python script opens sessions of FDTD and CHARGE to create the process file. In case the user has only one FDTD and one CHARGE license, to avoid running out of licenses they will need to run the Python script from a command prompt and not from a solver tool.
NOTE: To create their own customized process file, users can copy the template of the package and update the data files with their own data, as well as update the filenames and the corresponding flags in the Python script file.
Finally, we show how the generated process file can be used to create the geometry of a phase shifter by using the GDS of the component. Simply add a Layer Builder object , click edit and import both the pn_ps_te_c.gds file and the lumfoundry_process.lbr file, and apply the changes. All process layers have now been added and the structure of the phase shifter is created based on the pattern of the GDS file.
Appendix
Priority of overlapping process layers
The relative priority of structures generated by the Layer Builder when two or more structures overlap with each other is determined by these rules:
- Internally, the Layer Builder assigns mesh order as follows:
- All grow layers get the same mesh order, equal to base mesh order (see Set up the background geometry).
- All background layers get the same mesh order, equal to base mesh order + 2.
- As a consequence, grow layers always have higher priority than background layers regardless of their position in the layer list.
- Structures associated with each layer are generated in the same order as in the list of layers. Therefore, the priority between layers of the same process type is determined by the ordering in the list: layers at the bottom of the list will take priority over layers at the top of the tree.
Exporting and importing material data
As mentioned in Add and edit process layers, there are two different behaviors:
- When “export materials” is unchecked (default):
- Only the name of the materials used in the layer definitions is saved in the process file.
- When importing the process file in the Finite Difference IDE (FDTD and MODE), the Layer Builder will first create copies of the materials in the Material database that match the names provided in the process file. For the copied materials, the process name defined at the top of the Layer Builder Edit window is added to the original name. Therefore, the original materials in the database remain unchanged.
- When importing the process file in the Finite Element IDE (CHARGE, HEAT, DGTD and FEEM) the behavior is slightly different. In this case a new parent material, named according to the process name and the original material name in the process file, is created in the materials folder of the Objects Tree and all the optical/electrical/thermal properties are added based on the material names saved in the process file if they are found in the Optical/Electrical and Thermal Material databases. These properties of the parent material keep the original name in the Material database.
- Note that after the process file is imported, all the pattern and background material fields are automatically updated with the appropriate name of the copied materials.
- If the material saved in the process file does not exist in the Material database, the layers that use that material cannot be generated. This is one of the reasons why it is convenient to save the material data in the process file, as explained next.
- When "export materials" is checked:
- All the material properties including data and fitting settings are saved in the process file.
- When importing the process file, the Layer Builder will create new materials with the information contained in the process file. The process name defined at the top of the Layer Builder Edit window is added to the original name in the process file.
- This option is only available in the Finite Difference IDE (FDTD and MODE).
Format of polygon vertices data in Layer Builder
The polygon vertices of the patterns in a layer builder object can be loaded from a GDS file or by script. In either case, the vertices are saved as a struct with a field for each GDS layer (denoted with the layer number, including the data type):
- Each field of the struct is a cell array with as many elements as polygons in the GDS layer.
- Each element of the cell array is a N X 2 matrix where N is the number of vertices in the polygon. Each row is a pair of x and y coordinates.
Example
You can access the polygon vertices in the y-branch example using the following commands:
?vertices = getnamed("layer group","geometry");
Struct with fields:
10:0
1:0
68:0
69:0 ?Si_layer = vertices.%1:0%;
Cell array with 17 elements ?size(Si_layer{1});
result:
16 2
You can edit any of the polygon vertices in the struct vertices and reload it in the layer builder object using:
select("layer group");
set("geometry", vertices);
You can also define the geometry completely from scratch as shown in the example below, where we define two circular patterns in the silicon layer:
# Define (x,y) coordinates of pattern for layer (example of a 2 circular patterns)
n_vertices = 100;
theta = linspace(0,2*pi,n_vertices+1);
theta = theta(1:(end-1)); #remove last point (duplicated, 0=2pi)
radius1 = 0.5e-6; xcent1 = 0; ycent1 = 0;
x1 = radius1*cos(theta)+xcent1; y1 = radius1*sin(theta)+ycent1; # circle 1
radius2 = 0.4e-6; xcent2 = 1e-6; ycent2 = 1e-6;
x2 = radius2*cos(theta)+xcent2; y2 = radius2*sin(theta)+ycent2; # circle 2
# Save vertices in structure with the format required by layer builder:
new_vertices = struct;
new_vertices.%1:0% = cell(2);
new_vertices.%1:0%{1} = [x1,y1];
new_vertices.%1:0%{2} = [x2,y2];
# Set geometry in Layer builder object
select("layer group");
set("geometry", new_vertices);
Process and optical material revision
When a process file is generated from a Layer Builder object (see Add and edit process layers), two revision hashes are automatically generated and saved in the process file: a process revision hash from the layer information in the layer list, and a material revision hash from the material properties if the checkbox “export materials” is enabled.
The revision hashes help detect changes in the process file after it has been generated (for example, if someone tampers with the process file by editing it in a text editor) or changes in the properties of materials from a process file after they have been imported. In either case, warning messages will be displayed under the Layer list specifying which of the two revisions failed:
- Process revision no longer matches reference from last imported file.
- Optical revision no longer matches reference from last imported file.
See also
Structures, Scripts - Layer builder, GDSII Import/Export, Tips for adding sidewall angles to simulation objects – Ansys Optics