Skip to content

Commit

Permalink
add-drop point ring couplers in xtalk exp
Browse files Browse the repository at this point in the history
  • Loading branch information
simbilod committed Oct 21, 2023
2 parents f9821e0 + a24ea01 commit 39d6904
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 35 deletions.
27 changes: 26 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,32 @@
# ubc2 0.0.1

edx course submission for 2023 October
[edx course](https://www.edx.org/course/silicon-photonics-design-fabrication-and-data-ana) submission for 2023 October

## Installation

`make install`


## Upload design

We have a GitHub action that builds the mask on every git push.

- You can upload the GDS files into [nextcloud](https://qdot-nexus.phas.ubc.ca:25683/index.php/s/Xew2p7PrE2kgHNW)
- After uploading your layout, once every three minutes, our automated system checks your layout and produces a text log file including some errors: [EBeam.txt](https://qdot-nexus.phas.ubc.ca:25683/s/gkN3zq4KSFgcTBD/download?path=%2F&files=EBeam.txt)
- The system also merges all participant layouts into a single file. You can download the merged layout from: [EBeam.gds](https://qdot-nexus.phas.ubc.ca:25683/s/gkN3zq4KSFgcTBD/download?path=%2F&files=EBeam.gds) or [EBeam.oas (~10X smaller)](https://qdot-nexus.phas.ubc.ca:25683/s/gkN3zq4KSFgcTBD/download?path=%2F&files=EBeam.oas)


## Optional: Heaters

- [heater slides from course](https://docs.google.com/presentation/d/1_ppHYec6LydML4RMRJdNI4DXHb0hgW7znToQCGgSF6M/edit#slide=id.g1d6f54b2122_1_164)
- [ubc slides](https://docs.google.com/presentation/d/17FWUaRZ0zKV5zrPgY4fo98M8ywtmE3blaxkwUvk_7yM/edit#slide=id.g1f32360cef6_0_11)

Filename requirements:

```
EBeam_heaters_<USERNAME>.oas, or .gds
```

- Submit your design to the following [server](https://qdot-nexus.phas.ubc.ca:25683/s/mwQTSzwq99dj6Ym)
- See all the individual [file submissions](https://qdot-nexus.phas.ubc.ca:25683/s/s8eQLKBkAcTaH2e)
- Download the [merged layout](https://qdot-nexus.phas.ubc.ca:25683/s/P6jxBMWyzWywrqw)
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ classifiers = [
"Operating System :: OS Independent"
]
dependencies = [
"ubcpdk==2.3.1"
"ubcpdk==2.3.2"
]
description = "ubc"
keywords = ["python"]
Expand Down
60 changes: 36 additions & 24 deletions ubc2/ubc_joaquin_matres1.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,11 @@

def test_mask1() -> Path:
"""Add DBR cavities."""
e = [add_gc(ubcpdk.components.straight())]
e += [add_gc(pdk.mzi(delta_length=dl)) for dl in [9.32, 93.19]]
e = [add_gc(pdk.mzi(delta_length=dl)) for dl in [9.32, 93.19]]
e += [
add_gc(pdk.ring_single(radius=12, gap=gap, length_x=coupling_length))
for gap in [0.2]
for coupling_length in [0.1, 2.5, 4.5]
]
e += [
add_gc(pdk.ring_double(radius=12, gap=gap, length_x=coupling_length))
for gap in [0.2]
for coupling_length in [0.1]
for coupling_length in [0.1, 2.5]
]

e += [
Expand All @@ -42,36 +36,40 @@ def test_mask1() -> Path:

c = pack(e)
m = c[0]
if len(c) > 1:
raise ValueError(f"Failed to pack. It requires {len(c)}")
m.name = "EBeam_JoaquinMatres_11"
_ = m << gf.components.rectangle(size=size, layer=LAYER.FLOORPLAN)
return write_mask_gds_with_metadata(m)


def test_mask2() -> Path:
"""spirals for extracting straight waveguide loss"""
N = 12
radius = 10
N = 11
radius = 5

e = [
ubcpdk.components.add_fiber_array(
optical_routing_type=1,
component=ubcpdk.components.spiral(
N=N,
radius=radius,
y_straight_inner_top=0,
x_inner_length_cutback=0,
info=dict(does=["spiral", "te1550"]),
)
),
)
]

e.append(
ubcpdk.components.add_fiber_array(
optical_routing_type=1,
component=ubcpdk.components.spiral(
N=N,
radius=radius,
y_straight_inner_top=0,
x_inner_length_cutback=185,
)
x_inner_length_cutback=150,
),
)
)

Expand Down Expand Up @@ -103,7 +101,7 @@ def test_mask3() -> Path:


def test_mask4() -> Path:
"""MZI interferometers."""
"""Heated MZI interferometers."""
mzi = partial(gf.components.mzi, splitter=ubcpdk.components.ebeam_y_1550)
mzis = [mzi(delta_length=delta_length) for delta_length in [10, 40, 100]]
mzis_gc = [pdk.add_fiber_array(mzi) for mzi in mzis]
Expand All @@ -116,20 +114,32 @@ def test_mask4() -> Path:

c = pack(mzis_gc + mzis_heater_gc)
m = c[0]
m.name = "EBeam_JoaquinMatres_14"
m.name = "EBeam_heaters_JoaquinMatres_14"
_ = m << gf.components.rectangle(size=size, layer=LAYER.FLOORPLAN)
return write_mask_gds_with_metadata(m)


def test_mask5() -> Path:
"""Ring resonators."""
rings = [pdk.ring_double_heater(length_x=length_x) for length_x in [2]]
"""Heated Ring resonators."""
lengths_x = [0.2]
gaps = [0.2]

rings = [
pdk.ring_double_heater(radius=12, length_x=length_x, gap=gap)
for length_x in lengths_x
for gap in gaps
]
rings = [gf.functions.rotate180(ring) for ring in rings]
rings_gc = [pdk.add_fiber_array_pads_rf(ring) for ring in rings]
rings_gc += [
add_gc(pdk.ring_double(radius=12, gap=gap, length_x=length_x))
for gap in gaps
for length_x in lengths_x
]

c = pack(rings_gc)
m = c[0]
m.name = "EBeam_JoaquinMatres_15"
m.name = "EBeam_heaters_JoaquinMatres_15"
_ = m << gf.components.rectangle(size=size, layer=LAYER.FLOORPLAN)
return write_mask_gds_with_metadata(m)

Expand All @@ -147,7 +157,7 @@ def test_mask6() -> Path:
]
mmis += [
gf.components.cutback_splitter(
component=pdk.ebeam_y_1550, cols=6, rows=7, bend180=pdk.bend_euler180_sc
component=pdk.ebeam_y_1550, cols=4, rows=7, bend180=pdk.bend_euler180_sc
)
]
mmis_gc = [pdk.add_fiber_array(mmi, optical_routing_type=1) for mmi in mmis]
Expand All @@ -172,8 +182,8 @@ def test_mask7() -> Path:
mmi2x2_with_sbend.name = "mmi2x2_with_sbend"

mmis = []
mmis += [cutback_2x2(component=pdk.ebeam_bdc_te1550, cols=3)]
mmis += [cutback_2x2(component=mmi2x2_with_sbend, cols=6)]
mmis += [cutback_2x2(component=pdk.ebeam_bdc_te1550, cols=2)]
mmis += [cutback_2x2(component=mmi2x2_with_sbend, cols=4)]

mmis += [mmi2x2_with_sbend]
mmis += [pdk.ebeam_bdc_te1550()]
Expand All @@ -184,19 +194,21 @@ def test_mask7() -> Path:
c = pack(mmis_gc)

m = c[0]
if len(c) > 1:
raise ValueError(f"Failed to pack. It requires {len(c)}")
m.name = "EBeam_JoaquinMatres_17"
_ = m << gf.components.rectangle(size=size, layer=LAYER.FLOORPLAN)
return write_mask_gds_with_metadata(m)


if __name__ == "__main__":
c = test_mask1() # dbr and mzi
# c = test_mask1() # dbr and mzi
# c = test_mask2() # spirals
# c = test_mask3() # coupler and crossing
# c = test_mask4() # heated mzis
c = test_mask5() # heated rings
# c = test_mask5() # heated rings
# c = test_mask6() # 1x2 mmis
# c = test_mask7() # 2x2mmis
c = test_mask7() # 2x2mmis
gf.show(c)
# c = partial(
# gf.components.mmi2x2_with_sbend,
Expand Down
14 changes: 6 additions & 8 deletions ubc2/ubc_simon.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,12 +297,12 @@ def test_mask1() -> Path:

m.add_ports(g.ports)
_ = m << gf.components.rectangle(size=size, layer=LAYER.FLOORPLAN)
m.name = "EBeam_JoaquinMatres_Simon_0"
m.name = "EBeam_heaters_JoaquinMatres_Simon_0"
return write_mask_gds_with_metadata(m)


def crosstalk_experiment_parametrized_mask(
name="EBeam_JoaquinMatres_Simon_1",
name="EBeam_heaters_JoaquinMatres_Simon_1",
num_gcs: int = 10,
num_gc_per_pitch: int = 5,
sep_resonators: float = 15.0,
Expand All @@ -311,7 +311,6 @@ def crosstalk_experiment_parametrized_mask(
fill_layers=None,
fill_margin=2,
fill_size=(0.5, 0.5),
padding=20,
) -> gf.Component:
"""Ring resonators with thermal cross-talk.
Expand All @@ -325,7 +324,6 @@ def crosstalk_experiment_parametrized_mask(
fill_layers: layers to add as unity dennity fill around the rings.
fill_margin: keepout between the fill_layers and the same design layers.
fill_size: tiling size.
padding: how much to extend the fill beyond the ring component.
"""
m = gf.Component()

Expand Down Expand Up @@ -495,7 +493,7 @@ def test_mask3() -> Path:
def test_mask4() -> Path:
"""Rings with thermal crosstalk, far rings"""
m = crosstalk_experiment_parametrized_mask(
name="EBeam_JoaquinMatres_Simon_2",
name="EBeam_heaters_JoaquinMatres_Simon_2",
sep_resonators=20.0,
ring_y_offset=40.0,
resonator_func=rings_proximity,
Expand All @@ -506,7 +504,7 @@ def test_mask4() -> Path:
def test_mask5() -> Path:
"""Rings with thermal crosstalk, metal fill"""
m = crosstalk_experiment_parametrized_mask(
name="EBeam_JoaquinMatres_Simon_3",
name="EBeam_heaters_JoaquinMatres_Simon_3",
sep_resonators=20.0,
ring_y_offset=40.0,
resonator_func=rings_proximity,
Expand All @@ -518,7 +516,7 @@ def test_mask5() -> Path:
def test_mask6() -> Path:
"""Rings with thermal crosstalk, silicon fill"""
m = crosstalk_experiment_parametrized_mask(
name="EBeam_JoaquinMatres_Simon_4",
name="EBeam_heaters_JoaquinMatres_Simon_4",
sep_resonators=20.0,
ring_y_offset=40.0,
resonator_func=rings_proximity,
Expand All @@ -530,7 +528,7 @@ def test_mask6() -> Path:


if __name__ == "__main__":
# m = test_mask1()
m = test_mask1()
# m = test_mask3()
m = test_mask4()
# m = test_mask5()
Expand Down
2 changes: 1 addition & 1 deletion ubc2/write_mask.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

from ubc2.config import PATH

size = (440, 470)
size = (440, 410)
add_gc = ubcpdk.components.add_fiber_array
pack = partial(
gf.pack, max_size=size, add_ports_prefix=False, add_ports_suffix=False, spacing=2
Expand Down

0 comments on commit 39d6904

Please sign in to comment.