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
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()
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
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')