def vfab():
    from ipkiss.plugins.vfabrication.process_flow import VFabricationProcessFlow
    from pysics.basics.material.material import Material, MaterialFactory
    from pysics.basics.material.material_stack import MaterialStackFactory, MaterialStack
    from ipkiss.visualisation.display_style import DisplayStyle
    from ipkiss.visualisation.color import COLOR_BLUE, COLOR_RED
    wg_layer = clad_layer - core_layer

    silicon = Material(name="silicon", epsilon=3.5 ** 2, display_style=DisplayStyle(color=COLOR_BLUE))
    oxide = Material(name="silicon oxide", epsilon=1.5 ** 2, display_style=DisplayStyle(color=COLOR_RED))

    silicon = MaterialStack(name="silicon",
                            materials_heights=[
                                (oxide, 0.5),
                                (silicon, 0.2),
                                (oxide, 0.5)
                            ])

    oxide = MaterialStack(name="oxide",
                          materials_heights=[
                              (oxide, 0.5),
                              (oxide, 0.2),
                              (oxide, 0.5)
                          ])

    vfab_process = VFabricationProcessFlow(active_processes=[wg_process],
                                           process_layer_map={wg_process: wg_layer},
                                           process_to_material_stack_map= # (wg_process, )
                                           [((0,), silicon),
                                            ((1,), oxide),
                                           ],
                                           is_lf_fabrication={wg_process: False}
                                          )
    return vfab_process
    name="ACTIVE CORE",
    materials_heights=[(TECH.MATERIALS.BCB, 0.480), (TECH.MATERIALS.InP, 0.8),
                       (TECH.MATERIALS.AIR, 0.5)],
    display_style=DisplayStyle(color=COLOR_ORANGE))

################# STEP 3 : DEFINE THE FABRICATION PROCESS FLOW ###############################
from ipkiss.plugins.vfabrication.process_flow import VFabricationProcessFlow

my_process_flow = VFabricationProcessFlow(
    active_processes=[
        TECH.PROCESS.ACL, TECH.PROCESS.ACO
    ],  # DO NOT CHANGE THE SEQUENCE OF THE ELEMENTS ! IT MUST MATCH THE SEQUENCE OF THE COLUMNS IN VFABRICATION PROPERTY process_to_material_stack_map
    process_to_material_stack_map=[
        #ACL, ACO
        ((0, 0), TECH.MATERIAL_STACKS.MSTACK_BCB),
        ((1, 0), TECH.MATERIAL_STACKS.MSTACK_ACLAD),
        ((0, 1), TECH.MATERIAL_STACKS.MSTACK_ACORE),
        ((1, 1), TECH.MATERIAL_STACKS.MSTACK_ACORE)
    ],
    is_lf_fabrication={
        TECH.PROCESS.ACL: False,
        TECH.PROCESS.ACO: False
    })

################# STEP 4 : SUPERPOSE THE FABRICATION PROCESS FLOWS ###############################
TECH.VFABRICATION.overwrite_allowed = [
    "PROCESS_FLOW"
]  #explicitely declare that you want to overwrite this setting
TECH.VFABRICATION.PROCESS_FLOW = TECH.VFABRICATION.PROCESS_FLOW + my_process_flow

from ipkiss.plugins.photonics.wg.basic import *
Exemplo n.º 3
0
####################################################################
# VIRTUAL FABRICATION
####################################################################
from ipkiss.plugins.vfabrication.process_flow import VFabricationProcessFlow

TECH.VFABRICATION = TechnologyTree()

TECH.VFABRICATION.PROCESS_FLOW = VFabricationProcessFlow(
    active_processes=[
        TECH.PROCESS.FC, TECH.PROCESS.WG
    ],  # DO NOT CHANGE THE SEQUENCE OF THE ELEMENTS ! IT MUST MATCH THE SEQUENCE OF THE COLUMNS IN VFABRICATION PROPERTY process_to_material_stack_map
    process_to_material_stack_map=  # FC, WG
    [
        ((0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_220nm),
        ((0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_150nm),
        ((1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
    ],
    is_lf_fabrication={
        TECH.PROCESS.WG: False,
        TECH.PROCESS.FC: False,
    }  #etch to 220nm is implicitely present over the whole canvas
)

TECH.PURPOSE.LF.TEXT.ignore_vfabrication = True
TECH.PURPOSE.LF.DUMMY.ignore_vfabrication = True
TECH.PURPOSE.DF.DUMMY.ignore_vfabrication = True
TECH.PURPOSE.NO_FILL.ignore_vfabrication = True
TECH.PURPOSE.NO_GEN.ignore_vfabrication = True
TECH.PURPOSE.NO_PERF.ignore_vfabrication = True
TECH.PURPOSE.DOC.ignore_vfabrication = True
Exemplo n.º 4
0
TECH.VFABRICATION.PROCESS_FLOW = VFabricationProcessFlow(
    active_processes=[
        TECH.PROCESS.RFC, TECH.PROCESS.FCW, TECH.PROCESS.FC, TECH.PROCESS.WG,
        TECH.PROCESS.SLOT
    ],  # DO NOT CHANGE THE SEQUENCE OF THE ELEMENTS ! IT MUST MATCH THE SEQUENCE OF THE COLUMNS IN VFABRICATION PROPERTY process_to_material_stack_map
    process_to_material_stack_map
    =  #RFC, FCW, FC, WG, SLOT (SLOT process is equivalent to WG.... )
    #SLOT=0
    [
        ((0, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_380nm),
        ((0, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_380nm),
        ((0, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_380nm
         ),  # Only a problem if the hardmask gets etched through
        ((0, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_380nm
         ),  # Only a problem if the hardmask gets etched through
        ((0, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_220nm),
        ((0, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((0, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_150nm),
        ((0, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_150nm),
        ((1, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_80nm),
        ((1, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        #SLOT=1
        ((0, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_380nm),
        ((0, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_380nm),
        ((0, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_380nm
         ),  # Only a problem if the hardmask gets etched through
        ((0, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_380nm
         ),  # Only a problem if the hardmask gets etched through
        ((0, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((0, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((0, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((0, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
        ((1, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_SOI_AIR),
    ],
    is_lf_fabrication={
        TECH.PROCESS.WG: False,
        TECH.PROCESS.FC: False,
        TECH.PROCESS.SLOT: False,
        TECH.PROCESS.RFC: False,
        TECH.PROCESS.FCW: True
    }  #etch to 220nm is implicitely present over the whole canvas
)
Exemplo n.º 5
0
TECH.VFABRICATION.PROCESS_FLOW_FEOL = VFabricationProcessFlow(
    active_processes=[
        TECH.PROCESS.MSN,
        TECH.PROCESS.SHALLOW,
        TECH.PROCESS.N,
        TECH.PROCESS.NPLUS,
        TECH.PROCESS.P,
        TECH.PROCESS.PPLUS,
        TECH.PROCESS.CON,
    ],  # DO NOT CHANGE THE SEQUENCE OF THE ELEMENTS ! IT MUST MATCH THE SEQUENCE OF THE COLUMNS IN VFABRICATION PROPERTY process_to_material_stack_map
    process_to_material_stack_map=
    #SI_ALL, SHALLOW_ALL, N, NPLUS, P, PPLUS, CON
    [
        ((0, 0, 0, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_OX),
        ((1, 0, 0, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_MSN),
        ((0, 1, 0, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_RIB),
        ((1, 1, 0, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_MSN),
        ((0, 0, 1, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_RIB_N),
        ((1, 0, 1, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_N),
        ((0, 1, 1, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_RIB_N),
        ((1, 1, 1, 0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_N),
        ((0, 0, 0, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_NPLUS),
        ((1, 0, 0, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_NPLUS),
        ((1, 1, 0, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_NPLUS),
        ((1, 0, 1, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_NPLUS),
        ((1, 1, 1, 1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_RIB_P),
        ((1, 0, 0, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_P),
        ((0, 1, 0, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_RIB_P),
        ((1, 1, 0, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_P),
        ((0, 0, 1, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_RIB_P),
        ((1, 0, 1, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_P),
        ((0, 1, 1, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_RIB_P),
        ((1, 1, 1, 0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_P),
        ((0, 0, 0, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 0, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 0, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS),
        ((1, 0, 0, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS),
        ((1, 1, 0, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 0, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 0, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS),
        ((1, 0, 0, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS),
        ((1, 1, 0, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 0, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 0, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 0, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 0, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_NPLUS_CON),
        ((1, 0, 0, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_NPLUS_CON),
        ((1, 1, 0, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_NPLUS_CON),
        ((1, 0, 1, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_NPLUS_CON),
        ((1, 1, 1, 1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 0, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 0, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 0, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 0, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS_CON),
        ((1, 0, 0, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS_CON),
        ((1, 1, 0, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 0, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 0, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS_CON),
        ((1, 0, 0, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS_CON),
        ((1, 1, 0, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS_CON),
        ((1, 0, 1, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_PPLUS_CON),
        ((1, 1, 1, 0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 0, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 0, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 0, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 0, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 0, 1, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 0, 1, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((0, 1, 1, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
        ((1, 1, 1, 1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_ONO_INVALID),
    ],
    is_lf_fabrication={
        TECH.PROCESS.MSN: False,
        TECH.PROCESS.SHALLOW: False,
        TECH.PROCESS.N: False,
        TECH.PROCESS.NPLUS: False,
        TECH.PROCESS.P: False,
        TECH.PROCESS.PPLUS: False,
        TECH.PROCESS.CON: False,
    })
Exemplo n.º 6
0
PROCESS_FLOW_SOI_POLY = VFabricationProcessFlow(
    active_processes=[
        TECH.PROCESS.FC, TECH.PROCESS.SKT, TECH.PROCESS.WG, TECH.PROCESS.FCW
    ],  # DO NOT CHANGE THE SEQUENCE OF THE ELEMENTS ! IT MUST MATCH THE SEQUENCE OF THE COLUMNS IN VFABRICATION PROPERTY process_to_material_stack_map
    process_to_material_stack_map=
    #FC, SKT, WG, FCW
    [
        ((0, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_PSV_SOI_POLY),
        ((0, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX_POLY),
        ((0, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_PSV_SOI_SKT_POLY),
        ((1, 0, 0, 0), TECH.MATERIAL_STACKS.MSTACK_PSV_SOI_FC_POLY),
        ((0, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX_POLY),
        ((1, 1, 0, 0), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX_POLY),
        ((1, 0, 1, 0), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX_POLY),
        ((1, 1, 1, 0), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX_POLY),
        ((0, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_PSV_SOI),
        ((0, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX),
        ((0, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_PSV_SOI_SKT),
        ((1, 0, 0, 1), TECH.MATERIAL_STACKS.MSTACK_PSV_SOI_FC),
        ((0, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX),
        ((1, 1, 0, 1), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX),
        ((1, 0, 1, 1), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX),
        ((1, 1, 1, 1), TECH.MATERIAL_STACKS.MSTACK_PSV_STI_OX),
    ],
    is_lf_fabrication={
        TECH.PROCESS.WG: False,
        TECH.PROCESS.FC: False,
        TECH.PROCESS.SKT: False,
        TECH.PROCESS.FCW: True
    })
Exemplo n.º 7
0
# generated_layout = i3.LayoutCell("generated_mask").Layout(elements=generated_elements)
# generated_layout.visualize()
# generated_layout.write_gdsii("boolean_ops_photonics.gds")

# use as a generated mask layer
generated_elements = get_elements_for_generated_layers(
    ring_lo.layout, {wg_mask: TECH.PPLAYER.NONE.DOC})
generated_layout = i3.LayoutCell("generated_mask").Layout(
    elements=generated_elements)
generated_layout.visualize()
generated_layout.write_gdsii("boolean_ops_photonics.gds")

# define a virtual fabrication flow, using the material stacks in the silicon_photonics technology
vfab_process = VFabricationProcessFlow(
    active_processes=[wg_process],
    process_layer_map={wg_process: wg_mask},
    is_lf_fabrication={wg_process: False},
    process_to_material_stack_map=[
        ((0, ), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_220nm),
        ((1, ), TECH.MATERIAL_STACKS.MSTACK_SOI_SI_100nm),
    ])
# visualize the result of the virtual fabrication
# top-down
ring_lo.visualize_2d(vfabrication_process_flow=vfab_process)
ring_xs = ring_lo.cross_section(process_flow=vfab_process,
                                cross_section_path=i3.Shape([(0.0, 4.0),
                                                             (0.0, 7.0)]))
ring_xs.visualize()

# generated_layout.visualize(vfabrication_process_flow=vfab_process)
# generated_layout.write_gdsii("boolean_ops_photonics.gds")