Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Interconnect plugin #14

Merged
merged 6 commits into from
Mar 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 37 additions & 3 deletions ubcpdk/components/cells.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ def y_splitter() -> Component:

import gdsfactory as gf
from gdsfactory.add_pins import add_pins_bbox_siepic
from ubcpdk.import_gds import import_gds_siepic_pins

from ubcpdk.import_gds import import_gds_siepic_pins
from ubcpdk.components.straight import straight
from ubcpdk.tech import strip, LAYER_STACK, LAYER


dc_broadband_te = gf.partial(
Expand Down Expand Up @@ -66,7 +67,40 @@ def y_splitter() -> Component:
port_e0_combiner="opt3",
)
ring_single = gf.partial(gf.components.ring_single)
ebeam_dc_halfring_straight = gf.partial(gf.components.coupler_ring)

@gf.cell
def ebeam_dc_halfring_straight(
gap: float = 0.2,
radius: float = 5.0,
length_x: float = 4.0,
cross_section=strip,
**kwargs
):
component = gf.components.coupler_ring(
gap=gap,
radius=radius,
length_x=length_x,
cross_section=cross_section,
)
x = cross_section(**kwargs) if callable(cross_section) else cross_section
thickness = LAYER_STACK.get_layer_to_thickness()
um = 1e-6
component.info["model"] = "ebeam_dc_halfring_straight"
component.info["name"] = "ebeam_dc_halfring_straight"
component.info["o1"] = "port 1"
component.info["o2"] = "port 2"
component.info["o3"] = "port 4"
component.info["o4"] = "port 3"
component.info["interconnect"] = {
"gap": gap*um,
"radius": radius*um,
"wg_thickness": thickness[LAYER.WG]*um,
"wg_width": x.info["width"]*um,
"Lc": length_x*um
}
return component


ebeam_dc_te1550 = gf.partial(gf.components.coupler)
spiral = gf.partial(gf.components.spiral_external_io)
ring_with_crossing = gf.partial(
Expand Down Expand Up @@ -99,5 +133,5 @@ def y_splitter() -> Component:
# wg = c << straight()
# wg.connect("o1", sp.ports["opt1"])

c = ring_with_crossing()
c = ebeam_dc_halfring_straight()
c.show(show_ports=False)
27 changes: 17 additions & 10 deletions ubcpdk/components/grating_couplers.py
Original file line number Diff line number Diff line change
@@ -1,43 +1,50 @@
import gdsfactory as gf
from ubcpdk.import_gds import add_ports_renamed_gratings, import_gds_siepic_pins
from ubcpdk.import_gds import add_ports_renamed_gratings, add_ports_siepic_gratings, import_gds_siepic_pins


# This rotation is causing issues in interconnect
add_ports_rotate180 = gf.compose(gf.functions.rotate180, add_ports_renamed_gratings)
add_ports_rotate180_siepic = gf.compose(gf.functions.rotate180, add_ports_siepic_gratings)

import_gc = gf.partial(
import_gds_siepic_pins,
decorator=add_ports_rotate180,
)

import_gc_interconnect = gf.partial(
import_gds_siepic_pins,
decorator=add_ports_rotate180_siepic,
)

gc_te1550 = gf.partial(
import_gds_siepic_pins,
import_gc_interconnect,
"ebeam_gc_te1550.gds",
polarization="te",
wavelength=1.55,
name="ebeam_gc_te1550",
model="ebeam_gc_te1550",
opt1="opt_wg",
decorator=add_ports_rotate180,
)

gc_te1550_broadband = gf.partial(
import_gds_siepic_pins,
import_gc,
"ebeam_gc_te1550_broadband.gds",
polarization="te",
wavelength=1.55,
decorator=add_ports_rotate180,
)


gc_te1310 = gf.partial(
import_gds_siepic_pins,
import_gc,
"ebeam_gc_te1310.gds",
polarization="te",
wavelength=1.31,
decorator=add_ports_rotate180,
)

gc_tm1550 = gf.partial(
import_gds_siepic_pins,
import_gc,
"ebeam_gc_tm1550.gds",
polarization="tm",
wavelength=1.55,
decorator=add_ports_rotate180,
)


Expand Down
28 changes: 21 additions & 7 deletions ubcpdk/import_gds.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,33 +167,47 @@ def add_siepic_labels_and_simulation_info(
position=c.center - (0, c.size_info.height / 6),
layer=label_layer,
)
# c.settings["model"] = model
# c.settings["info"] = c.info
return c


# gratings have a 2nm square that is sticking out 1nm
add_pins_gratings = gf.partial(add_pins_bbox_siepic, padding=-1e-3)

add_ports_renamed = gf.compose(
add_pins_bbox_siepic, gf.port.auto_rename_ports, remove_pins, add_ports
add_pins_bbox_siepic,
gf.port.auto_rename_ports,
remove_pins,
add_ports
)
add_ports_renamed_gratings = gf.compose(
add_pins_gratings, gf.port.auto_rename_ports, remove_pins, add_ports
add_pins_gratings,
gf.port.auto_rename_ports,
remove_pins,
add_ports
)

import_gds = gf.partial(gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_renamed)

add_ports_renamed_siepic = gf.compose(
add_ports_siepic = gf.compose(
add_siepic_labels_and_simulation_info,
add_pins_bbox_siepic,
# gf.port.auto_rename_ports,
remove_pins,
add_ports_from_siepic_pins,
)

add_ports_siepic_gratings = gf.compose(
add_siepic_labels_and_simulation_info,
add_pins_gratings,
remove_pins,
add_ports_from_siepic_pins,
)

import_gds_siepic_pins = gf.partial(
gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_renamed_siepic
gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_siepic
)

import_gds_siepic_pins_gratings = gf.partial(
gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_siepic_gratings
)


Expand Down
8 changes: 7 additions & 1 deletion ubcpdk/tech.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from gdsfactory.types import Layer
import gdsfactory.simulation as sim
import gdsfactory.simulation.lumerical as lumerical
from gdsfactory.add_pins import add_pins_siepic

from ubcpdk.config import PATH

Expand Down Expand Up @@ -83,4 +84,9 @@ def get_layer_stack_ubc(thickness: float = 220 * nm) -> LayerStack:
)


strip = gf.partial(gf.cross_section.strip, layers_cladding=(LAYER.DEVREC,))
strip = gf.partial(
gf.cross_section.strip,
layer=LAYER.WG,
layer_bbox=LAYER.DEVREC,
decorator=add_pins_siepic
)
Binary file not shown.