Esempio n. 1
0
####################################################################
# 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")
Esempio n. 2
0
# 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):
Esempio n. 3
0
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):
    
Esempio n. 4
0
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")
Esempio n. 5
0
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",
Esempio n. 6
0
# 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")