From e5886519bf6823091af75a4fbe3c4d361de1385c Mon Sep 17 00:00:00 2001 From: Lukas Chrostowski Date: Sun, 27 Oct 2024 00:25:33 -0700 Subject: [PATCH] updated merge, improved designs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit merging system ensures FaML are on a 127 µm pitch --- DFT.md | 34 ++- merge/EBeam_merge.py | 142 ++++++++++--- .../EBeam_LukasChrostowski_MZI1_1550_FaML.oas | Bin 13899 -> 13910 bytes .../EBeam_LukasChrostowski_MZI2_1550_FaML.oas | Bin 27640 -> 27652 bytes .../EBeam_LukasChrostowski_MZI_1550_FaML.oas | Bin 29019 -> 0 bytes ...ukasChrostowski_MZI_loopback_1550_FaML.oas | Bin 0 -> 16986 bytes ...am_LukasChrostowski_loopback_1550_FaML.oas | Bin 8150 -> 8158 bytes ...EBeam_LukasChrostowski_MZI_1550_FaML.lyrdb | 193 ------------------ ...LukasChrostowski_MZI_loopback_1550_FaML.py | 116 +++++++++++ ...eam_LukasChrostowski_loopback_1550_FaML.py | 3 +- 10 files changed, 259 insertions(+), 229 deletions(-) delete mode 100644 submissions/EBeam_LukasChrostowski_MZI_1550_FaML.oas create mode 100644 submissions/EBeam_LukasChrostowski_MZI_loopback_1550_FaML.oas delete mode 100644 submissions/KLayout Python/EBeam_LukasChrostowski_MZI_1550_FaML.lyrdb create mode 100644 submissions/KLayout Python/EBeam_LukasChrostowski_MZI_loopback_1550_FaML.py diff --git a/DFT.md b/DFT.md index d82f118..09f5ea5 100644 --- a/DFT.md +++ b/DFT.md @@ -1,11 +1,15 @@ # Design for Test rules -- All design submissions must follow the Design for Test (DFT) rules. Two optical interfaces are available: surface grating couplers (GC), and facet-attached micro-lenses (FaML) +- All design submissions must follow the Design for Test (DFT) rules. Three optical interfaces are available: surface grating couplers (GC), facet-attached micro-lenses (FaML), and facet-attached vertical emitters (FAVE). ## Grating Couplers -- area maximum: 610 µm wide, 405 µm high +- area design maximum: 1000 µm wide, 500 µm high +- grating coupler cells: + - SiEPIC_EBeam_PDK -> EBeam-SiN -> + - GC_SiN_TE_1310_8degOxide_BB + - GC_SiN_TE_1550_8degOxide_BB - 127 µm pitch, verically aligned, single column, connected circuits - up to 4 grating couplers - opt_in label format: opt_in_TE_1550_device_designerUniqueIndentifier @@ -18,12 +22,32 @@ ## Facet-attached Micro-Lenses (FaML) -- area maximum: 1000 µm wide, 244 µm high +- area design maximum: 1000 µm wide, 500 µm high +- FaML coupler cells: + - SiEPIC_EBeam_PDK -> EBeam-Dream -> + - ebeam_dream_FaML_SiN_1550_BB - 127 µm pitch, verically aligned, single column, connected circuits -- up to 3 lenses +- up to 4 lenses - opt_in label format: opt_in_TE_1550_FaML_designerUniqueIndentifier - opt_in label location: the lens and chip edge (0,0) of the FaML cell at the input - Fiber Array test consists of: - 1 (top FaML): input, laser - 2 (middle FaML): output, to detector - - 3 (bottom FaML): output, to detector + - 3 (middle FaML): output, to detector + - 4 (bottom FaML): output, to detector + +## Facet-attached Vertical Emitters (FAVE) + +- area design maximum: 1000 µm wide, 500 µm high +- FaML coupler cells: + - SiEPIC_EBeam_PDK -> EBeam-Dream -> + - ebeam_dream_FAVE_SiN_1550_BB +- 127 µm pitch, verically aligned, single column, connected circuits +- up to 4 lenses +- opt_in label format: opt_in_TE_1550_FAVE_designerUniqueIndentifier +- opt_in label location: the edge (0,0) of the FAVE cell at the input +- Fiber Array test consists of: + - 1 (top FAVE): input, laser + - 2 (middle FAVE): output, to detector + - 3 (middle FAVE): output, to detector + - 4 (bottom FAVE): output, to detector diff --git a/merge/EBeam_merge.py b/merge/EBeam_merge.py index 82a067c..11d63dd 100644 --- a/merge/EBeam_merge.py +++ b/merge/EBeam_merge.py @@ -18,9 +18,10 @@ tech_name = 'EBeam' top_cell_name = 'EBeam_2024_10_SiN' cell_Width = 1000e3 -cell_Height = 410000 -cell_Gap_Width = 8000 -cell_Gap_Height = 8000 +cell_FaML_width_extra = 100e3 +cell_Height = 500e3 +cell_Gap_Width = 8e3 +cell_Gap_Height = 8e3 chip_Width = 8650000 chip_Height1 = 8490000 chip_Height2 = 8780000 @@ -32,7 +33,7 @@ tr_cutout_y = 8494000 filename_out = 'EBeam' -layers_keep = ['1/5', '4/0', '1/10', '68/0', '81/0', '10/0', '99/0', '26/0', '31/0', '32/0', '33/0', '998/0'] +layers_keep = ['1/5', '4/0', '1/10', '68/0', '81/0', '10/0', '99/0', '26/0', '31/0', '32/0', '33/0', '201/0','998/0'] layer_text = '10/0' layer_SEM = '200/0' layer_SEM_allow = ['edXphot1x', 'ELEC413','SiEPIC_Passives'] # which submission folder is allowed to include SEM images @@ -51,7 +52,7 @@ # KLayout import pya -from pya import * +from pya import Trans, CellInstArray, Text # SiEPIC-Tools import SiEPIC @@ -115,12 +116,18 @@ def log(text): path2 = os.path.abspath(os.path.join(path,"../submissions")) _, _, files = next(os.walk(path2), (None, None, [])) for f in sorted(files): - files_in.append(os.path.join(path2,f)) + if 'FaML' in f: + files_in.append(os.path.join(path2,f)) +for f in sorted(files): + if 'FaML' not in f: + files_in.append(os.path.join(path2,f)) # Create course cells using the folder name under the top cell cell_edXphot1x = layout.create_cell("edX") t = Trans(Trans.R0, 0,0) top_cell.insert(CellInstArray(cell_edXphot1x.cell_index(), t)) +cell_FaML = layout.create_cell("FaML") +top_cell.insert(CellInstArray(cell_FaML.cell_index(), t)) cell_ELEC413 = layout.create_cell("ELEC413") top_cell.insert(CellInstArray(cell_ELEC413.cell_index(), t)) cell_SiEPIC_Passives = layout.create_cell("SiEPIC_Passives") @@ -137,6 +144,7 @@ def log(text): # Origins for the layouts x,y = 110e3,cell_Height+cell_Gap_Height +previous_top_FaML = None import subprocess import pandas as pd @@ -160,16 +168,17 @@ def log(text): layout2 = pya.Layout() layout2.read(f) + course = 'openEBL' if 'ebeam' in basefilename.lower(): course = 'edXphot1x' - elif 'elec413' in basefilename.lower(): + if 'faml' in basefilename.lower(): + course = 'FaML' + if 'elec413' in basefilename.lower(): course = 'ELEC413' - elif 'openebl' in basefilename.lower(): + if 'openebl' in basefilename.lower(): course = 'openEBL' - elif 'siepic_passives' in basefilename.lower(): + if 'siepic_passives' in basefilename.lower(): course = 'SiEPIC_Passives' - else: - course = 'openEBL' cell_course = eval('cell_' + course) log(" - course name: %s" % (course) ) @@ -193,7 +202,15 @@ def log(text): # check that there is one top cell in the layout num_top_cells = len(layout2.top_cells()) if num_top_cells > 1: - log(' - layout should only contain one top cell; contains (%s): %s' % (num_top_cells, [c.name for c in layout2.top_cells()]) ) + log(' - WARNING: layout should only contain one top cell; contains (%s): %s' % (num_top_cells, [c.name for c in layout2.top_cells()]) ) + top_cells = layout2.top_cells() + top_cells.sort(key=lambda x: x.child_instances()) + log(' - top cell (%s) has %s child_instances (highest one); renaming to "top".' % (top_cells[-1].name, top_cells[-1].child_instances()) ) + top_cells[-1].name = 'top' + ''' + for cell in layout2.top_cells(): + log(' - top cell (%s) has %s hierarchy levels' % (cell.name, cell.hierarchy_levels()) ) + ''' if num_top_cells == 0: log(' - layout does not contain a top cell') @@ -258,6 +275,7 @@ def log(text): shapes_to_delete.append( s.shape() ) s.next() for s in shapes_to_delete: + # need to delete the shapes all together, since the list of shapes in the shape recursive iterator changes if you delete one s.delete() # bounding box of the cell @@ -269,24 +287,24 @@ def log(text): t = Trans(Trans.R0, -bbox.left,-bbox.bottom) subcell2.insert(CellInstArray(subcell.cell_index(), t)) - # clip cells - cell2 = layout2.clip(cell.cell_index(), pya.Box(bbox.left,bbox.bottom,bbox.left+cell_Width,bbox.bottom+cell_Height)) + # clip / crop cells + cell2 = layout2.clip(cell.cell_index(), pya.Box(bbox.left,bbox.bottom,bbox.left+cell_Width+(cell_FaML_width_extra if course == 'FaML' else 0),bbox.bottom+cell_Height)) bbox2 = layout2.cell(cell2).bbox() if bbox != bbox2: - log(' - WARNING: Cell was clipped to maximum size of %s X %s' % (cell_Width, cell_Height) ) + log(' - WARNING: Cell was clipped to maximum size of %s X %s' % (cell_Width +(cell_FaML_width_extra if course == 'FaML' else 0), cell_Height) ) log(' - clipped bounding box: %s' % bbox2.to_s() ) - # copy - subcell.copy_tree(layout2.cell(cell2)) - + subcell.copy_tree(cell) + ''' + if course is not 'FaML': + # copy + subcell.copy_tree(layout2.cell(cell2)) + else: + subcell.copy_tree(cell) + ''' + # Check if this cell would overlap with other Floorplans, then move if necessary - def next_position(x, y, subcell, cell_Gap_Height, cell_Gap_Width, chip_Height, cell_Height, cell_Width): - # Measure the height of the cell that was added, and move up - y += cell_Gap_Height - if y + cell_Height > chip_Height: - y = cell_Height + cell_Gap_Height - x += cell_Width + cell_Gap_Width - return x, y + # Get Floorplan regions for the entire chip so far Layer_FP = layout.find_layer(99,0) # or use "layer" iter1 = pya.RecursiveShapeIterator(layout, top_cell, Layer_FP ) @@ -297,23 +315,85 @@ def next_position(x, y, subcell, cell_Gap_Height, cell_Gap_Width, chip_Height, c iter1.next() r1.merge() # print(" - Floorplan merged: %s" % r1) + + # offset for the facet-attached micro lenses + if course == 'FaML': + x_offset = -100e3 + # Find the FaML cells, and make sure they are on a 127 µm pitch + def sub_instances(instance,name): + found_instances = [] + if type(instance) == pya.Cell: + cell = instance + else: + cell = instance.cell() + for inst in cell.each_inst(): + # log(' - looking for FaML instance: %s' % (inst.to_s())) + if inst.cell.name == name: + found_instances.append(inst) + # log(' - Found FaML instance: %s, %s' % (inst.to_s(), inst.cell.name)) + elif inst.cell.child_instances() > 0: + for f in sub_instances(inst,name): + if f.cell.name == name: + found_instances.append(f) + return found_instances + + found_faml_instances = sub_instances(layout2.top_cells()[0], name = 'ebeam_dream_FaML_SiN_1550_BB') + #for f in found_faml_instances: + # log(' - Found FaML instance: %s, %s' % (f.to_s(), f.cell.name)) + found_faml_instances.sort(key=lambda x: -x.cplx_trans.disp.y) + for f in found_faml_instances: + log(' - Found FaML instance (sorted): %s, %s' % (f.to_s(), f.cell.name)) + top_FaML = found_faml_instances[0].cplx_trans.disp.y + + else: + x_offset = 0 + + def next_position(x, y, cell_Gap_Height, cell_Gap_Width, chip_Height, cell_Height, cell_Width): + # Measure the height of the cell that was added, and move up + y += cell_Gap_Height + if y + cell_Height > chip_Height: + y = cell_Height + cell_Gap_Height + x += cell_Width + cell_Gap_Width + return x, y interacting = True while interacting: - r2 = pya.Region(pya.Box(x,y, x+bbox2.width(),y+bbox2.height())) + r2 = pya.Region(pya.Box(x+x_offset,y, x+x_offset+bbox2.width(),y+bbox2.height())) interacting = r2.interacting(r1) if interacting: # print(" - Overlapping Floorplan: %s" % r2.interacting(r1)) - x,y = next_position(x, y, subcell, cell_Gap_Height, cell_Gap_Width, chip_Height2, cell_Height, cell_Width) + x,y = next_position(x, y, cell_Gap_Height, cell_Gap_Width, chip_Height2, cell_Height, cell_Width) + + if course == 'FaML': + # Check and snap to 127 µm pitch + if previous_top_FaML: + FaML_delta = top_FaML+y - previous_top_FaML + log(' - FaML count: %s' % (FaML_delta/127e3) ) + if FaML_delta % 127e3 > 0: + # log(' - Adjancent designs do not have matching FaML pitch: %s error' % (FaML_delta) ) + y_add = 127e3 - FaML_delta % 127e3 + log(' - shifting design up by %s µm, to have matching FaML pitch.' % (y_add/1e3) ) + y += y_add + # Insert cell instance in the chip - t = Trans(Trans.R0, x,y) + t = Trans(Trans.R0, x+x_offset,y) cell_course.insert(CellInstArray(subcell2.cell_index(), t)) - log(' - Placed at position: %s, %s' % (x,y) ) + log(' - Design placed at position: %s, %s' % (x,y) ) + + if course == 'FaML': + # record placement of FaML + previous_top_FaML = found_faml_instances[0].cplx_trans.disp.y + y + log(' - top FaML position: %s' % (previous_top_FaML) ) # Measure the height of the cell that was added, and move up - y += max (cell_Height, subcell.bbox().height()) + cell_Gap_Height + #y += max (cell_Height, subcell.bbox().height()) + cell_Gap_Height + if course == 'FaML': + from math import ceil + y += ceil(subcell.bbox().height()/127e3)*127e3 + else: + y += subcell.bbox().height() + cell_Gap_Height # move right and bottom when we reach the top of the chip if y + cell_Height > chip_Height1 and x == 0: y = cell_Height + cell_Gap_Height @@ -332,6 +412,8 @@ def next_position(x, y, subcell, cell_Gap_Height, cell_Gap_Width, chip_Height, c # Check bottom right cutout #2 for PCM if x + cell_Width > br_cutout2_x and y < br_cutout2_y: y = br_cutout2_y + else: + log(" - WARNING: Top cell not merged (%s)" % cell.name) ''' text_out,opt_in = find_automated_measurement_labels(topcell=top_cell, LayerTextN=layerTextN) diff --git a/submissions/EBeam_LukasChrostowski_MZI1_1550_FaML.oas b/submissions/EBeam_LukasChrostowski_MZI1_1550_FaML.oas index b1c0d88e251363a344e72cc4698b5ba795567a7b..f144699f4c431bee9b5f98d782a73c1e54c4b337 100644 GIT binary patch delta 4337 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 delta 4317 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 diff --git a/submissions/EBeam_LukasChrostowski_MZI_loopback_1550_FaML.oas b/submissions/EBeam_LukasChrostowski_MZI_loopback_1550_FaML.oas new file mode 100644 index 0000000000000000000000000000000000000000..0b99a0cda882779e9f3dabc21f3e9c89125531a6 GIT binary patch literal 16986 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 literal 0 HcmV?d00001 diff --git a/submissions/EBeam_LukasChrostowski_loopback_1550_FaML.oas b/submissions/EBeam_LukasChrostowski_loopback_1550_FaML.oas index aff4cfea07ee76236fb7bac6fcc61d72e088ec93..11437f759b37b79d5556026b73718cf019623526 100644 GIT binary patch delta 7756 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 SGgDGQ0uPx10s-`s*&h83(5-<0 delta 7748 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 - - - - - EBeam_LukasChrostowski_MZI_FaML - - - - - Component - - - - No components found - At minimum, shapes must be inside a cell and inside a DevRec shape. Read more about requirements for components: https://github.com/SiEPIC/SiEPIC-Tools/wiki/Component-and-PCell-Layout - - - - - Shapes outside component - Shapes for device layers need to be inside a component. At minimum, they must be inside a cell and inside a DevRec shape. Read more about requirements for components: https://github.com/SiEPIC/SiEPIC-Tools/wiki/Component-and-PCell-Layout - - - - - Flattened component - SiEPIC-Tools Verification, Netlist extraction, and Simulation only functions on hierarchical layouts, and not on flattened layouts. Add to the discussion here: https://github.com/lukasc-ubc/SiEPIC-Tools/issues/37 - - - - - Overlapping component - Overlapping components (defined as overlapping DevRec layers; touching is ok) - - - - - Invalid Pin - Invalid pin found. Read more about requirements for components: https://github.com/SiEPIC/SiEPIC-Tools/wiki/Component-and-PCell-Layout - - - - - - - Waveguide - - - - Path - Waveguide path: Only 2 points allowed in a path. Convert to a Waveguide if necessary. - - - - - Radius - Not enough space to accommodate the desired bend radius for the waveguide. - - - - - Bend points - Waveguide bend should have more points per circle. - - - - - Manhattan - The first and last waveguide segment need to be Manhattan (vertical or horizontal) so that they can connect to device pins. - - - - - - - Connectivity - - - - Disconnected pin - Disconnected pin - - - - - Mismatched pin - Mismatched pin widths - - - - - - - Design for test - - - - opt_in label: same - Automated test opt_in labels should be unique. - - - - - opt_in label: missing - Automated test opt_in labels are required for measurements on the Text layer. - -Details on the format for the opt_in labels can be found at https://github.com/lukasc-ubc/SiEPIC-Tools/wiki/SiEPIC-Tools-Menu-descriptions#connectivity-layout-check - - - - - opt_in label: too far away - Automated test opt_in labels must be placed at the tip of the grating coupler, namely near the (0,0) point of the cell. - - - - - opt_in label: wavelength - Automated test opt_in labels must have a wavelength for a laser specified in the DFT.xml file: ['1550', '1550', '1310', '1310']. - -Details on the format for the opt_in labels can be found at https://github.com/lukasc-ubc/SiEPIC-Tools/wiki/SiEPIC-Tools-Menu-descriptions#connectivity-layout-check - - - - - opt_in label: polarization - Automated test opt_in labels must have a polarization as specified in the DFT.xml file: ['TE', 'TM', 'TE', 'TM']. - -Details on the format for the opt_in labels can be found at https://github.com/lukasc-ubc/SiEPIC-Tools/wiki/SiEPIC-Tools-Menu-descriptions#connectivity-layout-check - - - - - Grating coupler orientation - The grating coupler is not oriented (rotated) the correct way for automated testing. - - - - - Fibre array configuration - Circuit must be connected such that there is at most 1 Grating Coupler(s) above the opt_in label (laser injection port) and at most 2 Grating Coupler(s) below the opt_in label. -Grating couplers must be on a 127.0 micron pitch, vertically arranged. - - - - - Grating coupler: minimum spacing - The grating coupler spacing (pitch) must be at least 60.0 microns. - - - - - - - - - EBeam_LukasChrostowski_MZI_FaML - - - - - - - - - - 'Design for test'.'opt_in label: too far away' - EBeam_LukasChrostowski_MZI_FaML - false - 1 - - - - polygon: (-1,29;-1,31;1,31;1,29) - polygon: (0,0;0,695;95,695;95,0) - - - - - 'Design for test'.'opt_in label: too far away' - EBeam_LukasChrostowski_MZI_FaML - false - 1 - - - - polygon: (-1,537;-1,539;1,539;1,537) - polygon: (0,0;0,695;95,695;95,0) - - - - diff --git a/submissions/KLayout Python/EBeam_LukasChrostowski_MZI_loopback_1550_FaML.py b/submissions/KLayout Python/EBeam_LukasChrostowski_MZI_loopback_1550_FaML.py new file mode 100644 index 0000000..fe8f02e --- /dev/null +++ b/submissions/KLayout Python/EBeam_LukasChrostowski_MZI_loopback_1550_FaML.py @@ -0,0 +1,116 @@ +''' +--- Simple MZI, tested using Facet-Attached Micro Lenses (FaML) --- + +by Lukas Chrostowski, 2024 + +Example simple script to + - choose the fabrication technology provided by Applied Nanotools, using silicon nitride (SiN) waveguides + - use the SiEPIC-EBeam-PDK technology + - using KLayout and SiEPIC-Tools, with function including connect_pins_with_waveguide and connect_cell + - create a new layout with a top cell, limited a design area of 1000 microns wide by 410 microns high. + - create one Mach-Zehnder Interferometer (MZI) circuit with a small path length difference, and loopback + - export to OASIS for submission to fabrication + - display the layout in KLayout using KLive + + Test plan + - count lenses from the top (top is 1) + - laser input on top lens (1), detector on second (2) + +Use instructions: + +Run in Python, e.g., VSCode + +pip install required packages: + - klayout, SiEPIC, siepic_ebeam_pdk, numpy + +''' + +designer_name = 'LukasChrostowski' +top_cell_name = 'EBeam_%s_MZI1_FaML' % designer_name +export_type = 'static' # static: for fabrication, PCell: include PCells in file +tech_name = 'EBeam' + +import pya +from pya import * + +import SiEPIC +from SiEPIC._globals import Python_Env +from SiEPIC.scripts import connect_cell, connect_pins_with_waveguide, zoom_out, export_layout +from SiEPIC.utils.layout import new_layout, floorplan, FaML_two +from SiEPIC.extend import to_itype +from SiEPIC.verification import layout_check + +import os + +if Python_Env == 'Script': + # For external Python mode, when installed using pip install siepic_ebeam_pdk + import siepic_ebeam_pdk + +print('EBeam_LukasChrostowski_MZI1 layout script') + +from packaging import version +if version.parse(SiEPIC.__version__) < version.parse("0.5.4"): + raise Exception("Errors", "This example requires SiEPIC-Tools version 0.5.4 or greater.") + +''' +Create a new layout using the EBeam technology, +with a top cell +and Draw the floor plan +''' +cell, ly = new_layout(tech_name, top_cell_name, GUI=True, overwrite = True) +floorplan(cell, 230e3, 481e3) + +waveguide_type1='SiN Strip TE 1550 nm, w=750 nm' +waveguide_type_delay='SiN routing TE 1550 nm (compound waveguide)' + +# Load cells from library +cell_ebeam_y = ly.create_cell('ANT_MMI_1x2_te1550_3dB_BB', 'EBeam-SiN') + +####################### +# Circuit #0 – Loopback +####################### +# draw two edge couplers for facet-attached micro-lenses +inst_faml = FaML_two(cell, + label = "opt_in_TE_1550_FaML_%s_Loopback" % designer_name, + y_offset = 50e3+254e3*0, + ) +# loopback waveguide +connect_pins_with_waveguide(inst_faml[0], 'opt1', inst_faml[1], 'opt1', waveguide_type=waveguide_type1) + +####################### +# Circuit #1 – MZI +####################### +# draw two edge couplers for facet-attached micro-lenses +inst_faml = FaML_two(cell, + label = "opt_in_TE_1550_FaML_%s_mzi1" % designer_name, + y_offset = 50e3+254e3, + ) +# Y branches: +instY2 = connect_cell(inst_faml[0], 'opt1', cell_ebeam_y, 'pin1') +instY1 = connect_cell(inst_faml[1], 'opt1', cell_ebeam_y, 'pin1') +# Waveguides: +connect_pins_with_waveguide(instY1, 'pin2', instY2, 'pin3', waveguide_type=waveguide_type1) +connect_pins_with_waveguide(instY1, 'pin3', instY2, 'pin2', waveguide_type=waveguide_type1, turtle_A=[100,-90]) + + +# Zoom out +zoom_out(cell) + +# Export for fabrication, removing PCells +path = os.path.dirname(os.path.realpath(__file__)) +filename, extension = os.path.splitext(os.path.basename(__file__)) +if export_type == 'static': + file_out = export_layout(cell, path, filename, relative_path = '..', format='oas', screenshot=True) +else: + file_out = os.path.join(path,'..',filename+'.oas') + ly.write(file_out) + +# Verify +file_lyrdb = os.path.join(path,filename+'.lyrdb') +num_errors = layout_check(cell = cell, verbose=False, GUI=True, file_rdb=file_lyrdb) +print('Number of errors: %s' % num_errors) + +# Display the layout in KLayout, using KLayout Package "klive", which needs to be installed in the KLayout Application +if Python_Env == 'Script': + from SiEPIC.utils import klive + klive.show(file_out, lyrdb_filename=file_lyrdb, technology=tech_name) diff --git a/submissions/KLayout Python/EBeam_LukasChrostowski_loopback_1550_FaML.py b/submissions/KLayout Python/EBeam_LukasChrostowski_loopback_1550_FaML.py index 162928d..324107a 100644 --- a/submissions/KLayout Python/EBeam_LukasChrostowski_loopback_1550_FaML.py +++ b/submissions/KLayout Python/EBeam_LukasChrostowski_loopback_1550_FaML.py @@ -59,7 +59,7 @@ and Draw the floor plan ''' cell, ly = new_layout(tech_name, top_cell_name, GUI=True, overwrite = True) -floorplan(cell, 200e3, 244e3) +floorplan(cell, 200e3, 227e3) waveguide_type1='SiN Strip TE 1550 nm, w=750 nm' @@ -69,6 +69,7 @@ # draw two edge couplers for facet-attached micro-lenses inst_faml = FaML_two(cell, label = "opt_in_TE_1550_FaML_%s_loopback" % designer_name, + y_offset = 50e3, ) # loopback waveguide connect_pins_with_waveguide(inst_faml[0], 'opt1', inst_faml[1], 'opt1', waveguide_type=waveguide_type1)