Beispiel #1
0
                                topCell.add(smField_label_lat)

                            topCell.add(smField, origin=(sm_orig_x, sm_orig_y))
                    topCell.add(mdField, origin=(md_coord_x, md_coord_y))

        topCell.add(lgField, origin=(lg_orig_x, lg_orig_y))
        topCell.add(lgField_label)

# %%Create the layout and output GDS file
wafer = MBE100Wafer('MembranesWafer', cells=[topCell])
fileID = "Char_" + PATTERN
filestring = fileID + str(
    waferVer) + '_' + WAFER_ID + '_' + date.today().strftime("%d%m%Y")

# Output the whole wafer
layout = Layout('LIBRARY')
layout.add(wafer)
# layout.show()
layout.save(filestring.replace(' ', '_') + '_wafer' + '.gds')

# Output single chip
cell_layout = Layout('LIBRARY')
cell_layout.add(wafer.blocks[0])
# cell_layout.show()
cell_layout.save(filestring.replace(' ', '_') + '_chip' + '.gds')

# Output topCell
layout_field = Layout('LIBRARY')
layout_field.add(topCell)
# layout_field.show()
layout_field.save(filestring.replace(' ', '_') + '_smallFields.gds')
Beispiel #2
0
topCell = Cell("TopCell")
topCell.add(lgField)
smFrameSpacing = 400  # Spacing between the three small frames
dx = smFrameSpacing + smFrameSize
dy = smFrameSpacing + smFrameSize
topCell.add(smField1, origin=(-dx / 2., dy / 2.))
topCell.add(smField2, origin=(dx / 2., dy / 2.))
topCell.add(smField3, origin=(-dx / 2., -dy / 2.))
topCell.add(smField4, origin=(dx / 2., -dy / 2.))
topCell.add(centerLeftAlignField, origin=(-dx / 2, 0.))
topCell.add(centerRightAlignField, origin=(dx / 2, 0.))
topCell.add(centerAlignField, origin=(0., 0.))
topCell.spacing = np.array([4000., 4000.])

# %%Create the layout and output GDS file
layout = Layout('LIBRARY')
if putOnWafer:  # Fit as many patterns on a 2inch wafer as possible
    wafer = MBE100Wafer('MembranesWafer', cells=[topCell])
    layout.add(wafer)
# layout.show()
else:  # Only output a single copy of the pattern (not on a wafer)
    layout.add(topCell)
    layout.show()

filestring = str(waferVer) + '_' + WAFER_ID + '_' + date.today().strftime(
    "%d%m%Y") + ' dMark' + str(tDicingMarks)
filename = filestring.replace(' ', '_') + '.gds'
layout.save(filename)

cell_layout = Layout('LIBRARY')
cell_layout.add(wafer.blocks[0])
            10.0, 1, nm_width, 1.0, 0, l_smBeam)

        QP_sm = Cell('QuantumPlayground_W{:.0f}'.format(nm_width * 1000))
        QP_sm.add(cell_AB_Diamond_sm, origin=(-30, 30))
        QP_sm.add(cell_AB_DiamondNoBuffer_sm, origin=(-10, 30))
        QP_sm.add(cell_XShape, origin=(-30, 10))
        QP_sm.add(cell_XShapeNoBuffer, origin=(-10, 10))
        QP_sm.add(cell_HashTag, origin=(-30, -10))
        QP_sm.add(cell_HashTagNoBuffer, origin=(-10, -10))
        QP_sm.add(cell_Triangle_sm, origin=(-30, -30))
        QP_sm.add(cell_TriangleNoBuffer_sm, origin=(-10, -30))
        QP_sm.add(cell_AB_Hexagon_sm, origin=(10, 30))
        QP_sm.add(cell_AB_HexagonNoBuffer_sm, origin=(30, 30))
        QP_sm.add(cell_StarShape, origin=(10, 10))
        QP_sm.add(cell_StarShapeNoBuffer, origin=(30, 10))
        QP_sm.add(cell_Window, origin=(10, -10))
        QP_sm.add(cell_WindowNoBuffer, origin=(30, -10))

        TopCell.add(QP_sm,
                    origin=(-qp_spacing + 2 * i * qp_spacing, -qp_spacing))

    return TopCell


if __name__ == "__main__":
    TopCell = make_qp()
    # Add the copied cell to a Layout and save
    layout = Layout('LIBRARY')
    layout.add(TopCell)
    layout.save('QuantumPlayground_v1.0.gds')
    ]

    xmax_cell = Cell('MerryChristmas')
    for i, xmas_text in enumerate(xmas_texts):
        xmas_text.translate(
            tuple(
                np.array(-xmas_text.bounding_box.mean(0)) +
                np.array([20, -80 - i * 10.])))  # Center justify label
        xmax_cell.add(xmas_text)

    TopCell = Cell('GrowthTheoryTopCell')
    TopCell.add(wheel1, origin=(-100., -60.))
    TopCell.add(wheel2, origin=(-100., -65.))
    TopCell.add(PitchDep, origin=(-200., -280.))
    # TopCell.add3(TheorySlitElong, origin=(-250., -50))
    TopCell.add(LenWidDep, origin=(-200., -50.))
    # TopCell.add(hexagon_array, origin=(-100., -50))
    # TopCell.add(circles_array, origin=(-75., -50.))
    # TopCell.add(triangle_down_array, origin=(-50., -50))
    # TopCell.add(triangle_up_array, origin=(-25., -50))
    TopCell.add(xmax_cell, origin=(0, 50))
    return TopCell


if __name__ == "__main__":
    TopCell = make_theory_cell_3br()
    # Add the copied cell to a Layout and save
    layout = Layout('LIBRARY')
    layout.add(TopCell)
    layout.save('GrowthTheoryCell_3BD.gds')
# Add everything together to a top cell
topCell = Cell("TopCell")
topCell.add(lgField)
smFrameSpacing = 400  # Spacing between the three small frames
dx = smFrameSpacing + smFrameSize
dy = smFrameSpacing + smFrameSize

topCell.add(smField1, origin=(-dx / 2., dy / 2.))
topCell.add(smField2, origin=(dx / 2., dy / 2.))
topCell.add(smField3, origin=(-dx / 2., -dy / 2.))
topCell.add(smField4, origin=(dx / 2., -dy / 2.))
topCell.add(centerAlignField, origin=(dx / 2., 0.))
topCell.add(qp_cell, origin=(dx / 2., 0.))

# Create the layout and output GDS file
layout = Layout('LIBRARY', precision=1e-10)

wafer = MBEWafer('MembranesWafer', wafer_r=wafer_r, cells=[topCell], cell_gap=CELL_GAP, mkWidth=tDicingMarks,
                 cellsAtEdges=False)
file_string = str(waferVer)
filename = file_string.replace(' ', '_')

# Add pattern for ellipsometry check of SiO2 etching
size = 2000
rect = Rectangle((size / 2., size / 2.), (-size / 2., -size / 2.), layer=10)
rectCell = Cell('EtchCheckSquare')
rectCell.add(rect)
rect_layout = Layout('LIBRARY')
rect_layout.add(rectCell)
rect_layout.save(filename + '_etchCheck.gds')
rect_layout.add(rectCell)
    arrayHeight = 20.
    arrayWidth = 20.
    arraySpacing = 10.
    spacing = 0.5

    length = [arrayWidth]
    widths = [0.01, 0.015, 0.020, 0.030, 0.040, 0.050]
    #widths = [0.008, 0.016, 0.024, 0.032, 0.040, 0.048]
    pitches = [1.0, 2.0, 4.0]

    for j, width in enumerate(widths):
        for i, pitch in enumerate(pitches):
            PitchDep.add(makeSlitArray2(pitch, spacing, width, length, 0,
                                        arrayHeight, arrayWidth, arraySpacing,
                                        l_smBeam),
                         origin=(i * 1.5 * arrayWidth, j * 1.5 * arrayHeight))

    TopCell = Cell('GrowthTheoryTopCell')
    TopCell.add(PitchDep, origin=(0., 0.))
    # # TODO: Add the branched growth shapes

    return TopCell


if __name__ == "__main__":
    TopCell = make_theory_cell()
    # Add the copied cell to a Layout and save
    layout = Layout('LIBRARY')
    layout.add(TopCell)
    layout.save('NMDoseTest.gds')
topCell = Cell("TopCell")
# topCell.add(lgField)
smFrameSpacing = 400  # Spacing between the three small frames
dx = smFrameSpacing + smFrameSize
dy = smFrameSpacing + smFrameSize
# topCell.add(smField1, origin=(-dx / 2., dy / 2.))
# topCell.add(smField2, origin=(dx / 2., dy / 2.))
# topCell.add(smField3, origin=(-dx / 2., -dy / 2.))
# topCell.add(smField4, origin=(dx / 2., -dy / 2.))
# topCell.add(centerLeftAlignField, origin=(-dx / 2, 0.))
# topCell.add(centerRightAlignField, origin=(dx / 2, 0.))
# topCell.add(centerAlignField, origin=(0., 0.))
# topCell.spacing = np.array([4000., 4000.])

# %%Create the layout and output GDS file
layout = Layout('LIBRARY')
if putOnWafer:  # Fit as many patterns on a 2inch wafer as possible
    wafer = MBE100Wafer('MembranesWafer', cells=[topCell])
    layout.add(wafer)
# layout.show()
else:  # Only output a single copy of the pattern (not on a wafer)
    layout.add(topCell)
    layout.show()

filestring = str(waferVer) + '_' + WAFER_ID + '_' + date.today().strftime("%d%m%Y") + ' dMark' + str(tDicingMarks)
filename = filestring.replace(' ', '_') + '.gds'
layout.save(filename)

# cell_layout = Layout('LIBRARY')
# cell_layout.add(wafer.blocks[0])
# cell_layout.save(filestring.replace(' ', '_') + '_block' + '.gds')
Beispiel #8
0
centerAlignField.make_align_markers(2., 20., (180., 180.), l_lgBeam, cross=True)

# Add everything together to a top cell
topCell = Cell("TopCell")
topCell.add(lgField)
smFrameSpacing = 400  # Spacing between the three small frames
dx = smFrameSpacing + smFrameSize
dy = smFrameSpacing + smFrameSize
topCell.add(smField1, origin=(-dx / 2., dy / 2.))
topCell.add(smField2, origin=(dx / 2., dy / 2.))
topCell.add(smField3, origin=(-dx / 2., -dy / 2.))
topCell.add(smField4, origin=(dx / 2., -dy / 2.))
topCell.add(centerAlignField, origin=(0., 0.))

# %%Create the layout and output GDS file
layout = Layout('LIBRARY')
if putOnWafer:  # Fit as many patterns on a wafer as possible
    wafer = MBEWafer('MembranesWafer', wafer_r=wafer_r, cells=[topCell], cell_gap=CELL_GAP, mkWidth=tDicingMarks,
                     cellsAtEdges=False)
    layout.add(wafer)

    # Try to poorly calculate the write time
    freq = 20E6  # 20 GHz
    spotsize = 100E-9  # 100nm beam
    gridsize = np.sqrt(2) / 2. * spotsize
    spotarea = gridsize ** 2.
    waferarea = wafer.area() / 1E6 ** 2.
    writetime = waferarea / spotarea / freq
    time = timedelta(seconds=writetime)
    print(('\nEstimated write time: \n' + str(time)))
    PitchDep = Cell('PitchDependence')
    arrayHeight = 5.
    arrayWidth = arrayHeight * 2.
    arraySpacing = 10.
    spacing = 0.5

    length = [arrayWidth]
    widths = [0.050, 0.100, 0.150, 0.200, 0.250]
    wire_spacings = [0.100, 0.200, 0.400]

    for j, width in enumerate(widths):
        for i, wire_spacing in enumerate(wire_spacings):
            PitchDep.add(makeSlitArray2(wire_spacing + width, spacing, width,
                                        length, 0, arrayHeight, arrayWidth,
                                        arraySpacing, l_smBeam),
                         origin=(i * 30, j * 20))

    TopCell = Cell('GrowthTheoryTopCell')
    TopCell.add(PitchDep, origin=(0., 0.))
    # # TODO: Add the branched growth shapes

    return TopCell


if __name__ == "__main__":
    TopCell = make_theory_cell()
    # Add the copied cell to a Layout and save
    layout = Layout('LIBRARY')
    layout.add(TopCell)
    layout.save('ContactsDoseTest.gds')