#################################################################### # MASK LAYER RULES #################################################################### # This should become process layer dependent! TECH.TECH = TechnologyTree() TECH.TECH.MINIMUM_LINE = 0.120 TECH.TECH.MINIMUM_SPACE = 0.120 ############################################################################################### # Pattern Purposes ############################################################################################### TECH.PURPOSE = TechnologyTree() # system defined TECH.PURPOSE.DRAWING = PatternPurpose(name = "Drawing", extension = "DRW", doc="Layout drawing") #TECH.PURPOSE.ANNOTATE = PatternPurpose(name = "Annotation", extension = "AN", doc="Annotation") #TECH.PURPOSE.BOUNDARY = PatternPurpose(name = "Boundary", extension = "BND", doc="Boundary for place-and-route") #TECH.PURPOSE.NET = PatternPurpose(name="Net", extension = "NET", doc="Interconnects") #TECH.PURPOSE.PIN = PatternPurpose(name="Pin", extension = "PIN", doc="Pins") #TECH.PURPOSE.WARNING = PatternPurpose(name="Warning", extension = "WRN", doc="Warning for DRC") TECH.PURPOSE.LF = TechnologyTree() TECH.PURPOSE.DF = TechnologyTree() TECH.PURPOSE.LF.MARKER = PatternPurpose(name = "Light-Field Markers", extension = "LFMARK") TECH.PURPOSE.LF.LINE = PatternPurpose(name = "Light-field Lines", extension = "LIN") TECH.PURPOSE.LF.ISLAND = PatternPurpose(name = "Light-field Islands", extension = "ISL") TECH.PURPOSE.LF.TEXT = PatternPurpose(name = "Light-field Text", extension = "LFTXT") TECH.PURPOSE.LF.DUMMY = PatternPurpose(name = "Light-Field Dummies", extension = "LFDUM") TECH.PURPOSE.DF_AREA = PatternPurpose(name = "Dark-Field area in Light-Field mask", extension = "DFAREA") TECH.PURPOSE.LF_AREA = PatternPurpose(name = "Light-Field area in Dark-Field mask", extension = "LFAREA")
# contact masks TECH.PROCESS.CONT1 = ProcessLayer("Contact mask 1", "CONT1") TECH.PROCESS.CONT2 = ProcessLayer("Contact mask 2", "CONT2") TECH.PROCESS.CONT3 = ProcessLayer("Contact mask 3", "CONT3") TECH.PROCESS.CONT4 = ProcessLayer("Contact mask 4", "CONT4") TECH.PROCESS.CONT5 = ProcessLayer("Contact mask 5", "CONT5") TECH.PROCESS.MP1 = ProcessLayer("Metal Plating 1", "MP1") TECH.PROCESS.MP2 = ProcessLayer("Metal Plating 2", "MP2") # other TECH.PROCESS.NONE = ProcessLayer("No Specific Process Layer", "NONE") TECH.PROCESS.CA = ProcessLayer("Contact Litho Alignment", "CA") # purposes TECH.PURPOSE.VERBBOX = PatternPurpose("VERBBOX", "VB") TECH.PURPOSE.VERPORT = PatternPurpose("VERPORT", "VP") #################################################################### # MASK LAYER RULES #################################################################### # This should become process layer dependent! TECH.TECH.MINIMUM_LINE = 0.120 TECH.TECH.MINIMUM_SPACE = 0.120 #################################################################### # DISPLAY STYLES #################################################################### class TechDisplayTree(DelayedInitTechnologyTree):
DT_INV = 3 MY_TECH = TechnologyTree() MY_TECH.PROCESS = TechnologyTree() MY_TECH.PROCESS.OL35_1 = ProcessLayer("Overlay With III-V etch 1", "OL35_1") MY_TECH.PROCESS.OL35_2 = ProcessLayer("Overlay With III-V etch 2", "OL35_2") MY_TECH.PROCESS.BCB_1 = ProcessLayer("Bcb etch1", "BCB_1") MY_TECH.PROCESS.BCB_2 = ProcessLayer("Bcb etch2", "BCB_2") MY_TECH.PROCESS.MET_1 = ProcessLayer("Metalization etch1", "MET_1") MY_TECH.PROCESS.MET_2 = ProcessLayer("Metalization etch2", "MET_2") MY_TECH.PROCESS.MET_3 = ProcessLayer("Metalization etch3", "MET_3") MY_TECH.PROCESS.MET_4 = ProcessLayer("Metalization etch4", "MET_4") MY_TECH.PURPOSE = TechnologyTree() MY_TECH.PURPOSE.DEFAULT = PatternPurpose(name = "Default", extension = "00") MY_OUTPUT_MAP = copy.deepcopy(TECH.GDSII.EXPORT_LAYER_MAP) MY_OUTPUT_MAP.layer_map[PPLayer(process = MY_TECH.PROCESS.OL35_1, purpose = MY_TECH.PURPOSE.DEFAULT)] = GdsiiLayer(number = 101, datatype = DT_LINE) # disk MY_OUTPUT_MAP.layer_map[PPLayer(process = MY_TECH.PROCESS.OL35_2, purpose = MY_TECH.PURPOSE.DEFAULT)] = GdsiiLayer(number = 102, datatype = DT_LINE) # island MY_OUTPUT_MAP.layer_map[PPLayer(process = MY_TECH.PROCESS.BCB_1, purpose = MY_TECH.PURPOSE.DEFAULT)] = GdsiiLayer(number = 104, datatype = DT_LINE) # botvia MY_OUTPUT_MAP.layer_map[PPLayer(process = MY_TECH.PROCESS.BCB_2, purpose = MY_TECH.PURPOSE.DEFAULT)] = GdsiiLayer(number = 105, datatype = DT_LINE) # topvia MY_OUTPUT_MAP.layer_map[PPLayer(process = MY_TECH.PROCESS.MET_1, purpose = MY_TECH.PURPOSE.DEFAULT)] = GdsiiLayer(number = 103, datatype = DT_LINE) # botcont MY_OUTPUT_MAP.layer_map[PPLayer(process = MY_TECH.PROCESS.MET_2, purpose = MY_TECH.PURPOSE.DEFAULT)] = GdsiiLayer(number = 106, datatype = DT_LINE) # topcont MY_OUTPUT_MAP.layer_map[PPLayer(process = MY_TECH.PROCESS.MET_3, purpose = MY_TECH.PURPOSE.DEFAULT)] = GdsiiLayer(number = 107, datatype = DT_LINE) # pads MY_OUTPUT_MAP.layer_map[PPLayer(process = MY_TECH.PROCESS.MET_4, purpose = MY_TECH.PURPOSE.DEFAULT)] = GdsiiLayer(number = 108, datatype = DT_LINE) # plating class Layout(Structure):
TECH.PROCESS.EXPO = ProcessLayer("BEOL etch for waveguide exposure", "EXPO") TECH.PROCESS.LPASS = ProcessLayer("BEOL etch for grating couplers and edge couplers", "LPASS") TECH.PROCESS.PASS2 = ProcessLayer("Open passivation on bond pads", "PASS2") TECH.PROCESS.TRENCH = ProcessLayer("Deep trench","TRENCH") # Auxiliary TECH.PROCESS.NONE = ProcessLayer(name="No specific process", extension="NONE") ########################### # Drawing pattern purposes ########################### from ipkiss.process.layer import PatternPurpose TECH.PURPOSE = TechnologyTree() # actual mask drawings TECH.PURPOSE.DRAWING = PatternPurpose(name="Drawing", extension="DRAWING") TECH.PURPOSE.CORE = PatternPurpose(name="Waveguide core", extension="COR") TECH.PURPOSE.CLADDING = PatternPurpose(name="Waveguide cladding", extension="CLD") TECH.PURPOSE.TRENCH = PatternPurpose(name="Etched trench (linear)", extension="TRE") TECH.PURPOSE.HOLE = PatternPurpose(name="Etched hole (polygon)", extension="HOL") TECH.PURPOSE.INVERSION = PatternPurpose(name = "Inversion", extension = "INV") # ipkiss defined keys TECH.PURPOSE.LF = TechnologyTree() TECH.PURPOSE.DF = TechnologyTree() TECH.PURPOSE.LF_AREA = PatternPurpose(name="Light-field area", extension="LFAREA") TECH.PURPOSE.DF_AREA = PatternPurpose(name="Dark-field area", extension="DFAREA") TECH.PURPOSE.LF.LINE = PatternPurpose(name="Light-field line", extension="LFLINE") TECH.PURPOSE.DF.LINE = PatternPurpose(name="Dark-field line", extension="DFLINE") TECH.PURPOSE.DF.POLYGON = PatternPurpose(name="Dark-field polygon", extension="POLYGON") # auxiliary data TECH.PURPOSE.ERROR = PatternPurpose(name="ERROR", extension = "ERROR")
TECH.PROCESS.WAFERBRD = ProcessLayer(name="", extension="WAFERBRD") #Required for IPKISS compatibility TECH.PROCESS.NONE = ProcessLayer("No specific process", "NONE") #Required for PICAZZO compatibility TECH.PROCESS.SK = TECH.PROCESS.FC = TECH.PROCESS.SHALL TECH.PROCESS.WG = TECH.PROCESS.FULL ########################### # Drawing pattern purposes ########################### from ipkiss.process.layer import PatternPurpose TECH.PURPOSE = TechnologyTree() # actual mask drawings TECH.PURPOSE.DRAWETCH = PatternPurpose(name="Waveguide cladding", extension="DRAWETCH") TECH.PURPOSE.PERF = PatternPurpose(name="Waveguide core", extension="PERF") TECH.PURPOSE.PERFSLOT = PatternPurpose(name="Slot etched on waveguide core", extension="PERFSLOT") TECH.PURPOSE.DRAWING = PatternPurpose(name="", extension="DRAWING") # auxiliary data TECH.PURPOSE.POLTXT = PatternPurpose(name="", extension="POLTXT") TECH.PURPOSE.TILING = PatternPurpose(name="", extension="TILING") TECH.PURPOSE.DATAPREP = PatternPurpose(name="", extension="DATAPREP") TECH.PURPOSE.NOFILL = PatternPurpose(name="", extension="NOFILL") TECH.PURPOSE.NOSIZE = PatternPurpose(name="", extension="NOSIZE") TECH.PURPOSE.NODRC = PatternPurpose(name="", extension="NODRC") # ipkiss defined keys TECH.PURPOSE.LF = TechnologyTree() TECH.PURPOSE.DF = TechnologyTree() TECH.PURPOSE.LF_AREA = PatternPurpose(name="Light-field area",
# The following keys are required by ipkiss / picazzo but not used actively by aeponyx TECH.PROCESS.WG = TECH.PROCESS.MSN # Required for ipkiss, picazzo TECH.PROCESS.RWG = TECH.PROCESS.SHALLOW # Required by picazzo TECH.PROCESS.FC = TECH.PROCESS.SHALLOW # Required by picazzo (grating couplers) # ############################################################### # TECH.PURPOSE: Layer Purposes # # Layer Purposes indicate what the meaning is of a pattern on a # given process layer. e.g. a Line, a documentation, ... # # ############################################################### TECH.PURPOSE = TechnologyTree() TECH.PURPOSE.DRAWING = PatternPurpose(name="Drawing", extension="DRW") TECH.PURPOSE.DRWSUB = PatternPurpose(name="Subtracted drawing", extension="DRWSUB") TECH.PURPOSE.BBOX = PatternPurpose(name="Bounding Box", extension="BBOX") TECH.PURPOSE.ERROR = PatternPurpose(name="Error", extension="ERR", doc="Errors") TECH.PURPOSE.PINREC = PatternPurpose(name="Pin recognition", extension="PIN", doc="Pin marker for extraction") TECH.PURPOSE.TRACE = PatternPurpose(name="Trace", extension="TRC", doc="Control shape of trace") TECH.PURPOSE.TEXT = PatternPurpose(name="Text", extension="TXT")