Example #1
0
def mask_names(
        names=("Bottom Electrode", "Top Electrode", "Via Layer", "Etch Layer",
               "PartialEtch Layer", "Pad Layer"),
        layers=(pt.LayoutDefault.layerBottom, pt.LayoutDefault.layerTop,
                pt.LayoutDefault.layerVias, pt.LayoutDefault.layerEtch,
                pt.LayoutDefault.layerPartialEtch, pt.LayoutDefault.layerPad),
        size=250):
    """ Prints array of strings on different layers.

        Mostly useful for Layer Sorting on masks.

        Parameters
        ----------
            names : iterable of str

            layers : iterable of int

            size : float

        Returns
        -------
            cell : phidl.Device.
    """

    text = pc.Text()

    text['Size'] = size

    if not len(names) == len(layers):

        raise ValueError("Unbalanced mask names/layers combo")

    else:

        text_cells = []

        for label, layer in zip(names, layers):

            text['Label'] = label

            text['Layer'] = (layer, )

            text_cells.append(text.draw())

        g = Group(text_cells)

        g.distribute(direction='x', spacing=size)

        cell_name = Device(name='Mask Names')

        for x in text_cells:

            cell_name.absorb(cell_name << x)

        return cell_name
Example #2
0
    def __init__(self, device, x_param, base_params=None, *a, **k):

        super().__init__(*a, **k)

        self.device = device

        self.x_param = x_param

        if base_params is not None:

            self.base_params = base_params

        self.x_spacing = ld.Arrayx_spacing

        self.labels_top = None

        self.labels_bottom = None

        self.text = pc.Text()
Example #3
0
def alignment_marks_4layers(scale=[0.2, 0.5, 1]):
    def dr(cell):

        return DeviceReference(cell)

    BElayer = pt.LayoutDefault.layerBottom
    TElayer = pt.LayoutDefault.layerTop
    VIAlayer = pt.LayoutDefault.layerVias
    ETCHlayer = pt.LayoutDefault.layerEtch
    PETCHlayer = pt.LayoutDefault.layerPartialEtch
    Zerolayer = pt.LayoutDefault.layerPad

    align1 = verniers(scale,
                      layers=[BElayer, VIAlayer],
                      label='VIA',
                      reversed=True)
    align_ph = pg.bbox(align1.bbox)  #only for space
    align2 = verniers(scale, layers=[BElayer, TElayer], label='TE')
    align3 = verniers(scale, layers=[BElayer, ETCHlayer], label='ETCH')
    align4 = verniers(scale, layers=[BElayer, PETCHlayer], label='PETCH')

    text = pc.Text()
    text.size = 300
    text.layer = (BElayer, TElayer, ETCHlayer, PETCHlayer, VIAlayer)
    text.label = "Align to BE"

    t1 = text.draw()

    g = Group([align1, dr(align_ph), align2, align3, align4, t1])
    g.distribute(direction='x', spacing=150)
    g.align(alignment='y')

    align5 = verniers(scale,
                      layers=[TElayer, VIAlayer],
                      label='VIA',
                      reversed=True)
    align6 = verniers(scale, layers=[TElayer, ETCHlayer], label='ETCH')
    align7 = verniers(scale, layers=[TElayer, PETCHlayer], label='PETCH')

    text.layer = (TElayer, ETCHlayer, PETCHlayer, VIAlayer)
    text.label = 'Align to TE'
    t2 = text.draw()

    g2 = Group([align5, dr(align_ph), dr(align_ph), align6, align7, t2])
    g2.distribute(direction='x', spacing=150)
    g2.align(alignment='y')

    align8 = verniers(scale,
                      layers=[Zerolayer, VIAlayer],
                      label='VIA',
                      reversed=True)
    align9 = verniers(scale, layers=[Zerolayer, BElayer], label='BE')
    align10 = verniers(scale, layers=[Zerolayer, TElayer], label='TE')
    align11 = verniers(scale, layers=[Zerolayer, ETCHlayer], label='ETCH')
    align12 = verniers(scale, layers=[Zerolayer, PETCHlayer], label='PETCH')

    text.layer = (Zerolayer, BElayer, TElayer, ETCHlayer, PETCHlayer, VIAlayer)
    text.label = "Align to Pad"

    t3 = text.draw()

    g3 = Group([align8, align9, align10, align11, align12, t3])
    g3.distribute(direction='x', spacing=150)
    g3.align(alignment='y')

    g_tot = Group([g, g2, g3])
    g_tot.distribute(direction='y', spacing=150)
    g_tot.align(alignment='xmin')

    cell = Device("Alignments")

    for c in [align1, align2, align3, align4, t1]:

        cell.add(c)

    for c in [align5, align6, align7, t2]:
        cell.add(c)

    for c in [align8, align9, align10, align11, align12, t3]:
        cell.add(c)

    return cell
Example #4
0
import phidl.geometry as pg
import phidl.device_layout as dl
import pirel.pcells as pc
import pirel.modifiers as pm
import pirel.tools as pt
import pirel.addOns.standard_parts as ps

t = pc.Text('hey')
t['Label'] = 'boom'

main_cell = t.draw()

small_t = pc.Text('h2')
small_t.size = 10
small_t["Layer"] = (3, )

small_t.add_to_cell(main_cell, angle=90, anchor_source='c', anchor_dest='ur')

# pt.check(main_cell)

# main_cell=pc.IDT("hey").draw()
main_cell.write_gds('hey')