Example #1
0
    class Layout(GenericWaveGuideTemplate.Layout):

        cladding_width = PositiveNumberProperty(default=2.0)
        exclusion_width = PositiveNumberProperty(default=20.0)
        cladding_layer = LayerProperty()
        exclusion_layer = LayerProperty()

        def _default_exclusion_layer(self):
            return TECH.PPLAYER.MSN_TRENCH

        def _default_core_layer(self):
            return TECH.PPLAYER.MSN

        def _default_cladding_layer(self):
            return TECH.PPLAYER.CLADDING

        def _default_core_width(self):
            return 0.45

        def _default_windows(self):
            windows = [
                PathTraceWindow(layer=self.core_layer,
                                start_offset=-0.5 * self.core_width,
                                end_offset=0.5 * self.core_width),
                PathTraceWindow(layer=self.cladding_layer,
                                start_offset=-0.5 * self.cladding_width,
                                end_offset=0.5 * self.cladding_width),
                PathTraceWindow(layer=self.exclusion_layer,
                                start_offset=-0.5 * self.exclusion_width,
                                end_offset=0.5 * self.exclusion_width)
            ]

            windows = [
                PathTraceWindow(layer=layer,
                                start_offset=-off / 2.0,
                                end_offset=off / 2.0)
                for off, layer in zip([1, 2., 3.0, 5.0, 9.0], [
                    self.core_layer, self.cladding_layer, self.exclusion_layer
                ])
            ]
            return windows
Example #2
0
class __TwoLayerDesignRule__(__DesignRule__):
    """ Layer rule applying to two layers """
    layer1 = LayerProperty(required=True,
                           doc="First layer the rule applies to")
    layer2 = LayerProperty(required=True,
                           doc="Second layer the rule applies to")

    def get_layers(self):
        l = LayerList()
        if isinstance(self.layer1, __GeneratedLayer__):
            l += self.layer1.layers()
        else:
            l += self.layer1
        if isinstance(self.layer2, __GeneratedLayer__):
            l += self.layer2.layers()
        else:
            l += self.layer2
        return l

    def __str__(self):
        return "Two layer rule %s %s" % (self.layer1, self.layer2)
Example #3
0
class __LayerDesignRule__(__DesignRule__):
    """ Layer rule applying to one layer """
    layer = LayerProperty(required=True, doc="Layer the rule applies to")

    def __str__(self):
        return "Layer rule %s" % (self.layer)

    def get_layers(self):
        l = LayerList()
        if isinstance(self.layer, __GeneratedLayer__):
            l += self.layer.layers()
        else:
            l += self.layer
        return l
Example #4
0
class GdsiiLayerInputMap(StrongPropertyInitializer):
    layer_map = RestrictedProperty(required=True)
    default = LayerProperty(allow_none=True)

    def __init__(self, layer_map, **kwargs):
        super(GdsiiLayerInputMap, self).__init__(layer_map=layer_map, **kwargs)
        # check if the input map doesn't contain any duplicates on the "source side" (duplicates may exist on the target size)
        ln = []
        for L in self.layer_map.keys():
            ln.append((L.number, L.datatype))
        if len(ln) != len(list(set(ln))):
            raise IpkissException(
                "layer_map may not contain duplicate layer number on the source-side."
            )

    def __getitem__(self, key):
        for L in self.layer_map.keys():
            if L.number == key.number and L.datatype == key.datatype:
                return self.layer_map[L]
        return self.default

    def get(self, key, default):
        return self[key]
Example #5
0
    class Layout(GenericWaveGuideTemplate.Layout):

        cladding_width = PositiveNumberProperty()
        cladding_layer = LayerProperty()

        def _default_cladding_width(self):
            return self.core_width + 4.0

        def _default_core_layer(self):
            return TECH.PPLAYER.SI

        def _default_cladding_layer(self):
            return TECH.PPLAYER.SHALLOW

        def _default_windows(self):
            windows = [
                PathTraceWindow(layer=self.core_layer,
                                start_offset=-0.5 * self.core_width,
                                end_offset=0.5 * self.core_width),
                PathTraceWindow(layer=self.cladding_layer,
                                start_offset=-0.5 * self.cladding_width,
                                end_offset=0.5 * self.cladding_width)
            ]
            return windows
Example #6
0
class Rule(StrongPropertyInitializer):
    design_rule = DesignRuleProperty(required=True)
    error_layer = LayerProperty(required=True)