For lithographic device fabrication, GDSII is the industry standard file format. Although we already support a scripted method of extracting layouts in GDS format there are some limitations. It is our goal to make it seamless to take your design from simulation to fabrication, and so we developed an additional technique to construct your GDS layouts using Lumerical Finite Element IDE.
See also
- GDS pattern extraction for inverse designed devices using contours method
- GDSII Export Automation
- Layer builder - Simulation object
The FE IDE environment (HEAT, CHARGE, FEEM, and DGTD) is based around the finite element method, and therefore uses an unstructured mesh. The meshing algorithm will automatically tessellate the structures, and it is possible to use getmeshcontours to extract the edges of two separate domains in 3 easy steps. You will require a license to use Lumerical Multiphysics.
Step 0
Define your geometry in the finite element IDE if you have not already. Suppose you have a structure in MODE or FDTD then you can use ctrl+c on your structures and ctrl+v to paste it into the finite element environment. If you have defined the structure using a script this can be run in DEVICE with minimal modifications.
Step 1
Now that the structure is defined the first thing to do is partition the volume and determine the ID’s of the domains of interest. In the example files we want to extract the silicon layers, so we partition the structure and identify 1, 3, 5 and 8 as the correct domains.
Step 2
We can now mesh the structure. This should be a pretty quick process, and once it is complete we can visualize the grid. The grid has two attribute the mesh area, and the grid ID which we saw last step. Here we can see the triangles that make up the 2D finite element mesh. To create smoother structures you could use mesh override regions or set an upper limit to the edge length in the solver.
Step 3
Finally we can call the run the script DEVICE_gds_extraction to create a GDS file. Here the function makeGDS is called to construct the gds file.
makeGDS(filename,cellname,layername,IDs,grid,mergeNested);
where
- filename - name of the GDS file to create
- cellname - name of the cell in the GDS file
- layername - name of the GDS layer.
- IDs - is the array of domain IDs that we found in step 1.
- grid - the grid dataset from meshing in step 2.
- mergeNested - boolean whether to merge nested structure
#Find meshcontours and write to gds
siliconIds = [1,3,5,8];
#Define the necessary functions
gds_functions;
makeGDS('DEVICE_GDS.gds','Silicon',"5:1", siliconIds, grid, 1);
Producing the following result: