Cells

Contents

Here are the components available in the PDK

Cells#

ANT_MMI_1x2_te1550_3dB_BB#

ubcpdk.cells.ANT_MMI_1x2_te1550_3dB_BB()[source]#

Returns ANT_MMI_1x2_te1550_3dB_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ANT_MMI_1x2_te1550_3dB_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-1.png

Alignment_Marker#

ubcpdk.cells.Alignment_Marker()[source]#

Returns Alignment_Marker fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.Alignment_Marker()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-2.png

GC_SiN_TE_1310_8degOxide_BB#

ubcpdk.cells.GC_SiN_TE_1310_8degOxide_BB()[source]#

Returns GC_SiN_TE_1310_8degOxide_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.GC_SiN_TE_1310_8degOxide_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-3.png

GC_SiN_TE_1550_8degOxide_BB#

ubcpdk.cells.GC_SiN_TE_1550_8degOxide_BB()[source]#

Returns GC_SiN_TE_1550_8degOxide_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.GC_SiN_TE_1550_8degOxide_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-4.png

GC_TE_1310_8degOxide_BB#

ubcpdk.cells.GC_TE_1310_8degOxide_BB()[source]#

Returns GCs_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.GC_TE_1310_8degOxide_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-5.png

GC_TE_1550_8degOxide_BB#

ubcpdk.cells.GC_TE_1550_8degOxide_BB()[source]#

Returns GCs_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.GC_TE_1550_8degOxide_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-6.png

GC_TM_1310_8degOxide_BB#

ubcpdk.cells.GC_TM_1310_8degOxide_BB()[source]#

Returns GCs_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.GC_TM_1310_8degOxide_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-7.png

GC_TM_1550_8degOxide_BB#

ubcpdk.cells.GC_TM_1550_8degOxide_BB()[source]#

Returns GCs_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.GC_TM_1550_8degOxide_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-8.png

Packaging_FibreArray_8ch#

ubcpdk.cells.Packaging_FibreArray_8ch()[source]#

Returns Packaging_FibreArray_8ch fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.Packaging_FibreArray_8ch()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-9.png

SEM_example#

ubcpdk.cells.SEM_example()[source]#

Returns SEM_example fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.SEM_example()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-10.png

add_fiber_array#

ubcpdk.cells.add_fiber_array(component='ring_single', component_name=None, gc_port_name='o1', with_loopback=False, fanout_length=0, grating_coupler='ebeam_gc_te1550', cross_section='strip', straight='straight', taper=None, mirror_grating_coupler=True, gc_rotation=90, **kwargs)[source]#

Returns component with grating couplers and labels on each port.

Routes all component ports south. Can add align_ports loopback reference structure on the edges.

Parameters:
  • component (str | Callable[[...], Component] | dict[str, Any] | DKCell) – to connect.

  • component_name (str | None) – for the label.

  • gc_port_name (str) – grating coupler input port name ‘o1’.

  • with_loopback (bool) – True, adds loopback structures.

  • fanout_length (float | None) – None # if None, automatic calculation of fanout length.

  • grating_coupler (str | Callable[[...], Component] | dict[str, Any] | DKCell) – grating coupler instance, function or list of functions.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.

  • straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight component.

  • taper (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – taper component.

  • kwargs – cross_section settings.

  • mirror_grating_coupler (bool)

  • gc_rotation (float)

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.add_fiber_array(component='ring_single', gc_port_name='o1', with_loopback=False, fanout_length=0, grating_coupler='ebeam_gc_te1550', cross_section='strip', straight='straight', mirror_grating_coupler=True, gc_rotation=90)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-11.png

add_fiber_array_pads_rf#

ubcpdk.cells.add_fiber_array_pads_rf(component='ring_single_heater', username='JoaquinMatres', orientation=0, pad_yspacing=50, component_name=None, **kwargs)[source]#

Returns fiber array with label and electrical pads.

Parameters:
  • component (str | Callable[[...], Component] | dict[str, Any] | DKCell) – to add fiber array and pads.

  • username (str) – for the label.

  • orientation (float) – for adding pads.

  • pad_yspacing (float) – for adding pads.

  • component_name (str | None) – for the label.

  • kwargs – for add_fiber_array.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.add_fiber_array_pads_rf(component='ring_single_heater', username='JoaquinMatres', orientation=0, pad_yspacing=50)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-12.png

add_pads#

ubcpdk.cells.add_pads(component='ring_single_heater', username='JoaquinMatres', label_port_name='l_e1', **kwargs)[source]#

Returns fiber array with label and electrical pads.

Parameters:
  • component (str | Callable[[...], Component] | dict[str, Any] | DKCell) – to add fiber array and pads.

  • username (str) – for the label.

  • kwargs – for add_fiber_array.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.add_pads(component='ring_single_heater', username='JoaquinMatres', label_port_name='l_e1')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-13.png

add_pads_rf#

ubcpdk.cells.add_pads_rf(*, component='ring_single_heater', direction='top', spacing=(0.0, 100.0), pad_array='pad_array', select_ports=functools.partial(<function select_ports>, port_type='electrical'), port_names=None, layer='MTOP', **kwargs)#

Returns new component with electrical ports connected to top pad array.

Parameters:
  • component (ComponentSpec) – to route.

  • direction (Literal['top', 'right']) – sets direction of the array (top or right).

  • spacing (Float2) – component to pad spacing.

  • pad_array (ComponentSpec) – function for pad_array.

  • select_ports (SelectPorts) – function to select electrical ports.

  • port_names (Strs | None) – optional port names. Overrides select_ports.

  • layer (LayerSpec) – for the routes.

  • kwargs (Any) – additional arguments.

Keyword Arguments:
  • ports – Dict[str, Port] a port dict {port name: port}.

  • prefix – select ports with port name prefix.

  • suffix – select ports with port name suffix.

  • orientation – select ports with orientation in degrees.

  • width – select ports with port width.

  • layers_excluded – List of layers to exclude.

  • port_type – select ports with port type (optical, electrical, vertical_te).

  • clockwise – if True, sort ports clockwise, False: counter-clockwise.

Return type:

Component

import gdsfactory as gf

c = gf.components.wire_straight(length=200.)
cc = gf.routing.add_electrical_pads_top(component=c, spacing=(-150, 30))
cc.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-14.png
from ubcpdk import PDK, cells

PDK.activate()

c = cells.add_pads_rf(component='ring_single_heater', direction='top', spacing=(0.0, 100.0), pad_array='pad_array', layer='MTOP')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-15.png

bend_euler#

ubcpdk.cells.bend_euler(radius=None, angle=90, p=0.5, width=None, cross_section='strip', allow_min_radius_violation=False)[source]#

Regular degree euler bend.

Parameters:
  • radius (float | None) – in um. Defaults to cross_section_radius.

  • angle (float) – total angle of the curve.

  • p (float) – Proportion of the curve that is an Euler curve.

  • width (float | None) – width to use. Defaults to cross_section.width.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string, CrossSectionFactory dict).

  • allow_min_radius_violation (bool) – if True allows radius to be smaller than cross_section radius.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.bend_euler(angle=90, p=0.5, cross_section='strip', allow_min_radius_violation=False)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-16.png

bend_metal#

ubcpdk.cells.bend_metal(radius=None, angle=90, width=None, cross_section='metal_routing')[source]#

Regular degree euler bend.

Parameters:
  • radius (float | None)

  • angle (float)

  • width (float | None)

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection)

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.bend_metal(angle=90, cross_section='metal_routing')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-17.png

bend_s#

ubcpdk.cells.bend_s(size=(11, 1.8), cross_section='strip', width=None, allow_min_radius_violation=False)[source]#

Return S bend with bezier curve.

stores min_bend_radius property in self.info[‘min_bend_radius’] min_bend_radius depends on height and length

Parameters:
  • size (tuple[float, float]) – in x and y direction.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.

  • width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.

  • allow_min_radius_violation (bool) – allows min radius violations.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.bend_s(size=(11, 1.8), cross_section='strip', allow_min_radius_violation=False)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-18.png

bend_s_metal#

ubcpdk.cells.bend_s_metal(size=(11, 1.8), cross_section='metal_routing', width=None, allow_min_radius_violation=True)[source]#

Return S bend with bezier curve.

stores min_bend_radius property in self.info[‘min_bend_radius’] min_bend_radius depends on height and length

Parameters:
  • size (tuple[float, float]) – in x and y direction.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.

  • width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.

  • allow_min_radius_violation (bool) – allows min radius violations.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.bend_s_metal(size=(11, 1.8), cross_section='metal_routing', allow_min_radius_violation=True)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-19.png

compass#

ubcpdk.cells.compass(size=(4, 2), layer='MTOP', port_type=None, port_inclusion=0.0, port_orientations=(180, 90, 0, -90), auto_rename_ports=True)[source]#

Rectangle with ports on each edge (north, south, east, and west).

Parameters:
  • size (tuple[float, float]) – rectangle size.

  • layer (tuple[int, int] | str | int | LayerEnum) – tuple (int, int).

  • port_type (str | None) – optical, electrical.

  • port_inclusion (float) – from edge.

  • port_orientations (tuple[int, ...] | list[int] | None) – list of port_orientations to add. None does not add ports.

  • auto_rename_ports (bool) – auto rename ports.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.compass(size=(4, 2), layer='MTOP', port_inclusion=0.0, port_orientations=(180, 90, 0, -90), auto_rename_ports=True)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-20.png

coupler#

ubcpdk.cells.coupler(length=14.5, gap=0.2)[source]#

Returns Symmetric coupler.

Parameters:
  • length (float) – of coupling region in um.

  • gap (float) – of coupling region in um.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.coupler(length=14.5, gap=0.2)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-21.png

coupler_ring#

ubcpdk.cells.coupler_ring(length_x=4, gap=0.2, radius=10.0, bend='bend_euler', straight='straight', cross_section='strip', cross_section_bend=None, length_extension=10)[source]#

Returns Coupler for ring.

Parameters:
  • length_x (float) – length of the parallel coupled straight waveguides.

  • gap (float) – gap between for coupler.

  • radius (float) – for the bend and coupler.

  • bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – 90 degrees bend spec.

  • straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight spec.

  • cross_section (str) – cross_section spec.

  • cross_section_bend (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection | None) – cross_section for the bend. Defaults to cross_section.

  • length_extension (float) – length extension for the coupler.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.coupler_ring(length_x=4, gap=0.2, radius=10.0, bend='bend_euler', straight='straight', cross_section='strip', length_extension=10)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-22.png

crossing_SiN_1550#

ubcpdk.cells.crossing_SiN_1550()[source]#

Returns crossing_SiN_1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.crossing_SiN_1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-23.png

crossing_SiN_1550_extended#

ubcpdk.cells.crossing_SiN_1550_extended()[source]#

Returns crossing_SiN_1550_extended fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.crossing_SiN_1550_extended()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-24.png

crossing_horizontal#

ubcpdk.cells.crossing_horizontal()[source]#

Returns crossing_horizontal fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.crossing_horizontal()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-25.png

crossing_manhattan#

ubcpdk.cells.crossing_manhattan()[source]#

Returns crossing_manhattan fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.crossing_manhattan()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-26.png

die#

ubcpdk.cells.die(size=(440, 470), centered=False)[source]#

A die.

Parameters:
  • size (tuple[float, float])

  • centered (bool)

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.die(size=(440, 470), centered=False)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-27.png

ebeam_BondPad#

ubcpdk.cells.ebeam_BondPad()[source]#

Returns ebeam_BondPad fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_BondPad()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-28.png

ebeam_BondPad_75#

ubcpdk.cells.ebeam_BondPad_75()[source]#

Returns ebeam_BondPad_75 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_BondPad_75()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-29.png

ebeam_DC_2m1_te895#

ubcpdk.cells.ebeam_DC_2m1_te895()[source]#

Returns ebeam_DC_2m1_te895 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_DC_2m1_te895()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-30.png

ebeam_DC_te895#

ubcpdk.cells.ebeam_DC_te895()[source]#

Returns ebeam_DC_te895 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_DC_te895()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-31.png

ebeam_MMI_2x2_5050_te1310#

ubcpdk.cells.ebeam_MMI_2x2_5050_te1310()[source]#

Returns ULaval fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_MMI_2x2_5050_te1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-32.png

ebeam_Polarizer_TM_1550_UQAM#

ubcpdk.cells.ebeam_Polarizer_TM_1550_UQAM()[source]#

Returns ebeam_Polarizer_TM_1550_UQAM fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_Polarizer_TM_1550_UQAM()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-33.png

ebeam_YBranch_895#

ubcpdk.cells.ebeam_YBranch_895()[source]#

Returns ebeam_YBranch_895 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_YBranch_895()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-34.png

ebeam_YBranch_te1310#

ubcpdk.cells.ebeam_YBranch_te1310()[source]#

Returns ULaval fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_YBranch_te1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-35.png

ebeam_adiabatic_te1550#

ubcpdk.cells.ebeam_adiabatic_te1550()[source]#

Returns ebeam_adiabatic_te1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_adiabatic_te1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-36.png

ebeam_adiabatic_tm1550#

ubcpdk.cells.ebeam_adiabatic_tm1550()[source]#

Returns ebeam_adiabatic_tm1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_adiabatic_tm1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-37.png

ebeam_bdc_te1550#

ubcpdk.cells.ebeam_bdc_te1550()[source]#

Returns ebeam_bdc_te1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_bdc_te1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-38.png

ebeam_bdc_tm1550#

ubcpdk.cells.ebeam_bdc_tm1550()[source]#

Returns ebeam_bdc_tm1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_bdc_tm1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-39.png

ebeam_crossing4#

ubcpdk.cells.ebeam_crossing4()[source]#

Returns ebeam_crossing4 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_crossing4()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-40.png

ebeam_dream_FAVE_SiN_1310_BB#

ubcpdk.cells.ebeam_dream_FAVE_SiN_1310_BB()[source]#

Returns ebeam_dream_FAVE_SiN_1310_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_dream_FAVE_SiN_1310_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-41.png

ebeam_dream_FAVE_SiN_1550_BB#

ubcpdk.cells.ebeam_dream_FAVE_SiN_1550_BB()[source]#

Returns ebeam_dream_FAVE_SiN_1550_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_dream_FAVE_SiN_1550_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-42.png

ebeam_dream_FAVE_Si_1310_BB#

ubcpdk.cells.ebeam_dream_FAVE_Si_1310_BB()[source]#

Returns ebeam_dream_FAVE_Si_1310_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_dream_FAVE_Si_1310_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-43.png

ebeam_dream_FAVE_Si_1550_BB#

ubcpdk.cells.ebeam_dream_FAVE_Si_1550_BB()[source]#

Returns ebeam_dream_FAVE_Si_1550_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_dream_FAVE_Si_1550_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-44.png

ebeam_dream_FaML_SiN_1550_BB#

ubcpdk.cells.ebeam_dream_FaML_SiN_1550_BB()[source]#

Returns ebeam_dream_FaML_SiN_1550_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_dream_FaML_SiN_1550_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-45.png

ebeam_dream_FaML_Si_1310_BB#

ubcpdk.cells.ebeam_dream_FaML_Si_1310_BB()[source]#

Returns ebeam_dream_FaML_Si_1310_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_dream_FaML_Si_1310_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-46.png

ebeam_dream_FaML_Si_1550_BB#

ubcpdk.cells.ebeam_dream_FaML_Si_1550_BB()[source]#

Returns ebeam_dream_FaML_Si_1550_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_dream_FaML_Si_1550_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-47.png

ebeam_dream_splitter_1x2_te1550_BB#

ubcpdk.cells.ebeam_dream_splitter_1x2_te1550_BB()[source]#

Returns ebeam_dream_splitter_1x2_te1550_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_dream_splitter_1x2_te1550_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-48.png

ebeam_gc_te1310#

ubcpdk.cells.ebeam_gc_te1310()[source]#

Returns ebeam_gc_te1310 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_gc_te1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-49.png

ebeam_gc_te1310_broadband#

ubcpdk.cells.ebeam_gc_te1310_broadband()[source]#

Returns ebeam_gc_te1310_broadband fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_gc_te1310_broadband()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-50.png

ebeam_gc_te1550#

ubcpdk.cells.ebeam_gc_te1550()[source]#

Returns ebeam_gc_te1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_gc_te1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-51.png

ebeam_gc_te1550_90nmSlab#

ubcpdk.cells.ebeam_gc_te1550_90nmSlab()[source]#

Returns ebeam_gc_te1550_90nmSlab fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_gc_te1550_90nmSlab()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-52.png

ebeam_gc_te1550_broadband#

ubcpdk.cells.ebeam_gc_te1550_broadband()[source]#

Returns ebeam_gc_te1550_broadband fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_gc_te1550_broadband()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-53.png

ebeam_gc_te895#

ubcpdk.cells.ebeam_gc_te895()[source]#

Returns ebeam_gc_te895 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_gc_te895()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-54.png

ebeam_gc_tm1550#

ubcpdk.cells.ebeam_gc_tm1550()[source]#

Returns ebeam_gc_tm1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_gc_tm1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-55.png

ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um#

ubcpdk.cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um()[source]#

Returns ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-56.png

ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um#

ubcpdk.cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um()[source]#

Returns ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-57.png

ebeam_sin_dream_splitter1x2_te1550_BB#

ubcpdk.cells.ebeam_sin_dream_splitter1x2_te1550_BB()[source]#

Returns ebeam_sin_dream_splitter1x2_te1550_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_sin_dream_splitter1x2_te1550_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-58.png

ebeam_splitter_adiabatic_swg_te1550#

ubcpdk.cells.ebeam_splitter_adiabatic_swg_te1550()[source]#

Returns ebeam_splitter_adiabatic_swg_te1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_splitter_adiabatic_swg_te1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-59.png

ebeam_splitter_swg_assist_te1310#

ubcpdk.cells.ebeam_splitter_swg_assist_te1310()[source]#

Returns ebeam_splitter_swg_assist_te1310 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_splitter_swg_assist_te1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-60.png

ebeam_splitter_swg_assist_te1310_ANT#

ubcpdk.cells.ebeam_splitter_swg_assist_te1310_ANT()[source]#

Returns ebeam_splitter_swg_assist_te1310_ANT fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_splitter_swg_assist_te1310_ANT()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-61.png

ebeam_splitter_swg_assist_te1550#

ubcpdk.cells.ebeam_splitter_swg_assist_te1550()[source]#

Returns ebeam_splitter_swg_assist_te1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_splitter_swg_assist_te1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-62.png

ebeam_splitter_swg_assist_te1550_ANT#

ubcpdk.cells.ebeam_splitter_swg_assist_te1550_ANT()[source]#

Returns ebeam_splitter_swg_assist_te1550_ANT fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_splitter_swg_assist_te1550_ANT()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-63.png

ebeam_swg_edgecoupler#

ubcpdk.cells.ebeam_swg_edgecoupler()[source]#

Returns ebeam_swg_edgecoupler fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_swg_edgecoupler()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-64.png

ebeam_terminator_SiN_1310#

ubcpdk.cells.ebeam_terminator_SiN_1310()[source]#

Returns ebeam_terminator_SiN_1310 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_terminator_SiN_1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-65.png

ebeam_terminator_SiN_1550#

ubcpdk.cells.ebeam_terminator_SiN_1550()[source]#

Returns ebeam_terminator_SiN_1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_terminator_SiN_1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-66.png

ebeam_terminator_SiN_te895#

ubcpdk.cells.ebeam_terminator_SiN_te895()[source]#

Returns ebeam_terminator_SiN_te895 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_terminator_SiN_te895()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-67.png

ebeam_terminator_te1310#

ubcpdk.cells.ebeam_terminator_te1310()[source]#

Returns ebeam_terminator_te1310 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_terminator_te1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-68.png

ebeam_terminator_te1550#

ubcpdk.cells.ebeam_terminator_te1550()[source]#

Returns ebeam_terminator_te1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_terminator_te1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-69.png

ebeam_terminator_tm1550#

ubcpdk.cells.ebeam_terminator_tm1550()[source]#

Returns ebeam_terminator_tm1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_terminator_tm1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-70.png

ebeam_y_1310#

ubcpdk.cells.ebeam_y_1310()[source]#

Returns ebeam_y_1310 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_y_1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-71.png

ebeam_y_1550#

ubcpdk.cells.ebeam_y_1550()[source]#

Returns ebeam_y_1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_y_1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-72.png

ebeam_y_adiabatic#

ubcpdk.cells.ebeam_y_adiabatic()[source]#

Returns ebeam_y_adiabatic fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_y_adiabatic()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-73.png

ebeam_y_adiabatic_1310#

ubcpdk.cells.ebeam_y_adiabatic_1310()[source]#

Returns ebeam_y_adiabatic_1310 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_y_adiabatic_1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-74.png

ebeam_y_adiabatic_500pin#

ubcpdk.cells.ebeam_y_adiabatic_500pin()[source]#

Returns ebeam_y_adiabatic_500pin fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ebeam_y_adiabatic_500pin()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-75.png

grating_coupler_elliptical#

ubcpdk.cells.grating_coupler_elliptical(wavelength=1.55, grating_line_width=0.315, cross_section='strip')[source]#

A grating coupler with curved but parallel teeth.

Parameters:
  • wavelength (float) – the center wavelength for which the grating is designed

  • grating_line_width – the line width of the grating

  • cross_section – a cross section or its name or a function generating a cross section.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.grating_coupler_elliptical(wavelength=1.55, grating_line_width=0.315, cross_section='strip')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-76.png

import_gds#

ubcpdk.cells.import_gds(gdspath, cellname=None, port_type='optical', layer_pin=<LayerMapUbc.PORT: 35>, layer_port=<LayerMapUbc.WG: 1>, post_process=None, convert_paths_to_polygons=True, auto_rename_ports=True)[source]#

Returns klayout cell from GDS.

Parameters:
  • gdspath (str | Path) – path to gds.

  • cellname (str | None) – cell name. If None uses top cell.

  • port_type – port type.

  • layer_pin – layer where pins are drawn.

  • layer_port – layer where ports are drawn.

  • post_process (Callable[[Component], Component] | None) – function to apply to component after import.

  • convert_paths_to_polygons (bool) – convert paths to polygons.

  • auto_rename_ports (bool) – rename ports.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.import_gds(port_type='optical', layer_pin=<LayerMapUbc.PORT: 35>, layer_port=<LayerMapUbc.WG: 1>, convert_paths_to_polygons=True, auto_rename_ports=True)
c.plot()

(Source code)

metal_via#

ubcpdk.cells.metal_via()[source]#

Returns metal_via fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.metal_via()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-78.png

mmi1x2#

ubcpdk.cells.mmi1x2(width=None, width_taper=1.5, length_taper=20.0, length_mmi=31.0, width_mmi=6.0, gap_mmi=1.64, cross_section='strip')[source]#

An mmi1x2.

An mmi1x2 is a splitter that splits a single input to two outputs

Parameters:
  • width (float | None) – the width of the waveguides connecting at the mmi ports.

  • width_taper (float) – the width at the base of the mmi body.

  • length_taper (float) – the length of the tapers going towards the mmi body.

  • length_mmi (float) – the length of the mmi body.

  • width_mmi (float) – the width of the mmi body.

  • gap_mmi (float) – the gap between the tapers at the mmi body.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – a cross section or its name or a function generating a cross section.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.mmi1x2(width_taper=1.5, length_taper=20.0, length_mmi=31.0, width_mmi=6.0, gap_mmi=1.64, cross_section='strip')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-79.png

mmi2x2#

ubcpdk.cells.mmi2x2(width=None, width_taper=1.5, length_taper=20.0, length_mmi=42.5, width_mmi=6.0, gap_mmi=0.5, cross_section='strip')[source]#

An mmi2x2.

An mmi2x2 is a 2x2 splitter

Parameters:
  • width (float | None) – the width of the waveguides connecting at the mmi ports

  • width_taper (float) – the width at the base of the mmi body

  • length_taper (float) – the length of the tapers going towards the mmi body

  • length_mmi (float) – the length of the mmi body

  • width_mmi (float) – the width of the mmi body

  • gap_mmi (float) – the gap between the tapers at the mmi body

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – a cross section or its name or a function generating a cross section.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.mmi2x2(width_taper=1.5, length_taper=20.0, length_mmi=42.5, width_mmi=6.0, gap_mmi=0.5, cross_section='strip')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-80.png

mzi#

ubcpdk.cells.mzi(delta_length=10, bend='bend_euler', straight='straight', splitter='coupler', combiner=None, port_e1_splitter='o3', port_e0_splitter='o4', port_e1_combiner='o3', port_e0_combiner='o4', cross_section='strip')[source]#

Mzi.

Parameters:
  • delta_length (float) – bottom arm vertical extra length.

  • bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – 90 degrees bend library.

  • straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight function.

  • splitter (str | Callable[[...], Component] | dict[str, Any] | DKCell) – splitter function.

  • combiner (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – combiner function.

  • port_e1_splitter (str) – east top splitter port.

  • port_e0_splitter (str) – east bot splitter port.

  • port_e1_combiner (str) – east top combiner port.

  • port_e0_combiner (str) – east bot combiner port.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for routing (sxtop/sxbot to combiner).

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.mzi(delta_length=10, bend='bend_euler', straight='straight', splitter='coupler', port_e1_splitter='o3', port_e0_splitter='o4', port_e1_combiner='o3', port_e0_combiner='o4', cross_section='strip')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-81.png

mzi_1x1#

ubcpdk.cells.mzi_1x1(delta_length=10, bend='bend_euler', straight='straight', splitter='ebeam_y_1550', combiner=None, port_e1_splitter='o2', port_e0_splitter='o3', port_e1_combiner='o2', port_e0_combiner='o3', cross_section='strip')[source]#

Mzi.

Parameters:
  • delta_length (float) – bottom arm vertical extra length.

  • bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – 90 degrees bend library.

  • straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight function.

  • splitter (str | Callable[[...], Component] | dict[str, Any] | DKCell) – splitter function.

  • combiner (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – combiner function.

  • port_e1_splitter (str) – east top splitter port.

  • port_e0_splitter (str) – east bot splitter port.

  • port_e1_combiner (str) – east top combiner port.

  • port_e0_combiner (str) – east bot combiner port.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for routing (sxtop/sxbot to combiner).

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.mzi_1x1(delta_length=10, bend='bend_euler', straight='straight', splitter='ebeam_y_1550', port_e1_splitter='o2', port_e0_splitter='o3', port_e1_combiner='o2', port_e0_combiner='o3', cross_section='strip')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-82.png

mzi_heater#

ubcpdk.cells.mzi_heater(delta_length=10, length_x=200, splitter='ebeam_y_1550', straight_x_top='straight_heater_metal', **kwargs)[source]#

Mzi with heater on the bottom arm.

Parameters:
  • length_x (float) – horizontal length of the top arm (with heater).

  • delta_length (float) – bottom arm vertical extra length.

  • splitter (str | Callable[[...], Component] | dict[str, Any] | DKCell) – splitter function.

  • straight_x_top (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight function for the top arm (with heater).

  • kwargs – other arguments for mzi.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.mzi_heater(delta_length=10, length_x=200, splitter='ebeam_y_1550', straight_x_top='straight_heater_metal')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-83.png

mzi_heater_2x2#

ubcpdk.cells.mzi_heater_2x2(delta_length=10, length_x=200, splitter='mmi2x2', combiner='mmi2x2', straight_x_top='straight_heater_metal', **kwargs)[source]#

Mzi 2x2 with heater on the top arm.

Parameters:
  • length_x (float) – horizontal length of the top arm (with heater).

  • delta_length (float) – bottom arm vertical extra length.

  • splitter (str | Callable[[...], Component] | dict[str, Any] | DKCell) – splitter function.

  • combiner (str | Callable[[...], Component] | dict[str, Any] | DKCell) – combiner function.

  • straight_x_top (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight function for the top arm (with heater).

  • kwargs – other arguments for mzi.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.mzi_heater_2x2(delta_length=10, length_x=200, splitter='mmi2x2', combiner='mmi2x2', straight_x_top='straight_heater_metal')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-84.png

pack_doe#

ubcpdk.cells.pack_doe(doe, settings, do_permutations=False, function=None, **kwargs)[source]#

Packs a component DOE (Design of Experiment) using pack.

Parameters:
  • doe (str | Callable[[...], Component] | dict[str, Any] | DKCell) – function to return Components.

  • settings (dict[str, tuple[Any, ...]]) – component settings.

  • do_permutations (bool) – for each setting.

  • function (str | Callable[[...], Component] | dict[str, Any] | None) – to apply (add padding, grating couplers).

  • kwargs – for pack.

Keyword Arguments:
  • spacing – Minimum distance between adjacent shapes.

  • aspect_ratio – (width, height) ratio of the rectangular bin.

  • max_size – Limits the size into which the shapes will be packed.

  • sort_by_area – Pre-sorts the shapes by area.

  • density – Values closer to 1 pack tighter but require more computation.

  • precision – Desired precision for rounding vertex coordinates.

  • text – Optional function to add text labels.

  • text_prefix – for labels. For example. ‘A’ for ‘A1’, ‘A2’…

  • text_offsets – relative to component size info anchor. Defaults to center.

  • text_anchors – relative to component (ce cw nc ne nw sc se sw center cc).

  • name_prefix – for each packed component (avoids the Unnamed cells warning). Note that the suffix contains a uuid so the name will not be deterministic.

  • rotation – for each component in degrees.

  • h_mirror – horizontal mirror in y axis (x, 1) (1, 0). This is the most common.

  • v_mirror – vertical mirror using x axis (1, y) (0, y).

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.pack_doe(do_permutations=False)
c.plot()

(Source code)

pack_doe_grid#

ubcpdk.cells.pack_doe_grid(doe, settings, do_permutations=False, function=None, with_text=False, **kwargs)[source]#

Packs a component DOE (Design of Experiment) using grid.

Parameters:
  • doe (str | Callable[[...], Component] | dict[str, Any] | DKCell) – function to return Components.

  • settings (dict[str, tuple[Any, ...]]) – component settings.

  • do_permutations (bool) – for each setting.

  • function (str | Callable[[...], Component] | dict[str, Any] | None) – to apply to component (add padding, grating couplers).

  • with_text (bool) – includes text label.

  • kwargs – for grid.

Keyword Arguments:
  • spacing – between adjacent elements on the grid, can be a tuple for different distances in height and width.

  • separation – If True, guarantees elements are separated with fixed spacing if False, elements are spaced evenly along a grid.

  • shape – x, y shape of the grid (see np.reshape). If no shape and the list is 1D, if np.reshape were run with (1, -1).

  • align_x – {‘x’, ‘xmin’, ‘xmax’} for x (column) alignment along.

  • align_y – {‘y’, ‘ymin’, ‘ymax’} for y (row) alignment along.

  • edge_x – {‘x’, ‘xmin’, ‘xmax’} for x (column) (ignored if separation = True).

  • edge_y – {‘y’, ‘ymin’, ‘ymax’} for y (row) (ignored if separation = True).

  • rotation – for each component in degrees.

  • h_mirror – horizontal mirror y axis (x, 1) (1, 0). most common mirror.

  • v_mirror – vertical mirror using x axis (1, y) (0, y).

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.pack_doe_grid(do_permutations=False, with_text=False)
c.plot()

(Source code)

pad#

ubcpdk.cells.pad(size=(90.0, 90.0), layer='MTOP', port_inclusion=0, port_orientation=0, port_orientations=(180, 90, 0, -90))[source]#

Returns rectangular pad with ports.

Parameters:
  • size (tuple[float, float]) – x, y size.

  • layer (tuple[int, int] | str | int | LayerEnum) – pad layer.

  • bbox_layers – list of layers.

  • bbox_offsets – Optional offsets for each layer with respect to size. positive grows, negative shrinks the size.

  • port_inclusion (float) – from edge.

  • port_orientation (float) – in degrees.

  • port_orientations (tuple[int, ...] | list[int] | None)

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.pad(size=(90.0, 90.0), layer='MTOP', port_inclusion=0, port_orientation=0, port_orientations=(180, 90, 0, -90))
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-87.png

pad_array#

ubcpdk.cells.pad_array(pad='pad', columns=6, rows=1, column_pitch=125.0, row_pitch=125.0, port_orientation=270, size=None, layer=None, centered_ports=False, auto_rename_ports=False)[source]#

Returns 2D array of pads.

Parameters:
  • pad (str | Callable[[...], Component] | dict[str, Any] | DKCell) – pad element.

  • columns (int) – number of columns.

  • rows (int) – number of rows.

  • column_pitch (float) – x pitch.

  • row_pitch (float) – y pitch.

  • port_orientation (float) – port orientation in deg. None for low speed DC ports.

  • size (tuple[float, float] | None) – pad size.

  • layer (tuple[int, int] | str | int | LayerEnum | None) – pad layer.

  • centered_ports (bool) – True add ports to center. False add ports to the edge.

  • auto_rename_ports (bool) – True to auto rename ports.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.pad_array(pad='pad', columns=6, rows=1, column_pitch=125.0, row_pitch=125.0, port_orientation=270, centered_ports=False, auto_rename_ports=False)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-88.png

pbs_1550_eskid#

ubcpdk.cells.pbs_1550_eskid()[source]#

Returns pbs_1550_eskid fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.pbs_1550_eskid()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-89.png

photonic_wirebond_surfacetaper_1310#

ubcpdk.cells.photonic_wirebond_surfacetaper_1310()[source]#

Returns photonic_wirebond_surfacetaper_1310 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.photonic_wirebond_surfacetaper_1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-90.png

photonic_wirebond_surfacetaper_1550#

ubcpdk.cells.photonic_wirebond_surfacetaper_1550()[source]#

Returns photonic_wirebond_surfacetaper_1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.photonic_wirebond_surfacetaper_1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-91.png

rectangle#

ubcpdk.cells.rectangle(size=(4, 2), layer='MTOP', centered=False, port_type=None, port_orientations=(180, 90, 0, -90))[source]#

Returns a rectangle.

Parameters:
  • size (tuple[float, float]) – (tuple) Width and height of rectangle.

  • layer (tuple[int, int] | str | int | LayerEnum) – Specific layer to put polygon geometry on.

  • centered (bool) – True sets center to (0, 0), False sets south-west to (0, 0).

  • port_type (str | None) – optical, electrical.

  • port_orientations (tuple[int, ...] | list[int] | None) – list of port_orientations to add. None adds no ports.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.rectangle(size=(4, 2), layer='MTOP', centered=False, port_orientations=(180, 90, 0, -90))
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-92.png

ring_double#

ubcpdk.cells.ring_double(gap=0.2, gap_top=None, gap_bot=None, radius=10.0, length_x=0.01, length_y=0.01, cross_section='strip', length_extension=10.0)[source]#

Returns a double bus ring.

two couplers (ct: top, cb: bottom) connected with two vertical straights (sl: left, sr: right)

Parameters:
  • gap (float) – gap between for coupler.

  • gap_top (float | None) – gap for the top coupler. Defaults to gap.

  • gap_bot (float | None) – gap for the bottom coupler. Defaults to gap.

  • radius (float) – for the bend and coupler.

  • length_x (float) – ring coupler length.

  • length_y (float) – vertical straight length.

  • bend – 90 degrees bend spec.

  • straight – straight spec.

  • coupler_ring – ring coupler spec.

  • coupler_ring_top – top ring coupler spec. Defaults to coupler_ring.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section spec.

  • length_extension (float) – straight length extension at the end of the coupler bottom ports.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.ring_double(gap=0.2, radius=10.0, length_x=0.01, length_y=0.01, cross_section='strip', length_extension=10.0)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-93.png

ring_double_heater#

ubcpdk.cells.ring_double_heater(gap=0.2, gap_top=None, gap_bot=None, radius=10.0, length_x=2.0, length_y=0.01, coupler_ring='coupler_ring', coupler_ring_top=None, straight='straight', bend='bend_euler', cross_section_heater='heater_metal', cross_section_waveguide_heater='strip_heater_metal', cross_section='strip', via_stack='via_stack_heater_mtop', port_orientation=None, via_stack_offset=(1, 0), via_stack_size=(4, 4), length_extension=None)[source]#

Returns a double bus ring with heater on top.

two couplers (ct: top, cb: bottom) connected with two vertical straights (sl: left, sr: right)

Parameters:
  • gap (float) – gap between for coupler.

  • gap_top (float | None) – gap for the top coupler. Defaults to gap.

  • gap_bot (float | None) – gap for the bottom coupler. Defaults to gap.

  • radius (float) – for the bend and coupler.

  • length_x (float) – ring coupler length.

  • length_y (float) – vertical straight length.

  • coupler_ring (str | Callable[[...], Component] | dict[str, Any] | DKCell) – ring coupler spec.

  • coupler_ring_top (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – ring coupler spec for coupler away from vias (defaults to coupler_ring)

  • straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight spec.

  • bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – bend spec.

  • cross_section_heater (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for heater.

  • cross_section_waveguide_heater (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for waveguide with heater.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for regular waveguide.

  • via_stack (str | Callable[[...], Component] | dict[str, Any] | DKCell) – for heater to routing metal.

  • port_orientation (float | None) – for electrical ports to promote from via_stack.

  • via_stack_size (tuple[float, float]) – size of via_stack.

  • via_stack_offset (tuple[float, float]) – x,y offset for via_stack.

  • with_drop – adds drop ports.

  • length_extension (float | None) – straight length extension at the end of the coupler bottom ports. None defaults to 3.0 + radius.

Return type:

Component

     o2──────▲─────────o3
             │gap_top
     xx──────▼─────────xxx
    xxx                   xxx
  xxx                       xxx
 xx                           xxx
 x                             xxx
xx                              xx▲
xx                              xx│length_y
xx                              xx▼
xx                             xx
 xx          length_x          x
  xx     ◄───────────────►    x
   xx                       xxx
     xx                   xxx
      xxx──────▲─────────xxx
               │gap
       o1──────▼─────────o4
from ubcpdk import PDK, cells

PDK.activate()

c = cells.ring_double_heater(gap=0.2, radius=10.0, length_x=2.0, length_y=0.01, coupler_ring='coupler_ring', straight='straight', bend='bend_euler', cross_section_heater='heater_metal', cross_section_waveguide_heater='strip_heater_metal', cross_section='strip', via_stack='via_stack_heater_mtop', via_stack_offset=(1, 0), via_stack_size=(4, 4))
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-94.png

ring_single#

ubcpdk.cells.ring_single(gap=0.2, radius=10.0, length_x=4.0, length_y=0.6, cross_section='strip', length_extension=10.0)[source]#

Returns a single ring.

ring coupler (cb: bottom) connects to two vertical straights (sl: left, sr: right), two bends (bl, br) and horizontal straight (wg: top)

Parameters:
  • gap (float) – gap between for coupler.

  • radius (float) – for the bend and coupler.

  • length_x (float) – ring coupler length.

  • length_y (float) – vertical straight length.

  • coupler_ring – ring coupler spec.

  • bend – 90 degrees bend spec.

  • straight – straight spec.

  • coupler_ring – ring coupler spec.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section spec.

  • length_extension (float) – straight length extension at the end of the coupler bottom ports.

Return type:

Component

          xxxxxxxxxxxxx
      xxxxx           xxxx
    xxx                   xxx
  xxx                       xxx
 xx                           xxx
 x                             xxx
xx                              xx▲
xx                              xx│length_y
xx                              xx▼
xx                             xx
 xx          length_x          x
  xx     ◄───────────────►    x
   xx                       xxx
     xx                   xxx
      xxx──────▲─────────xxx
               │gap
       o1──────▼─────────o2
from ubcpdk import PDK, cells

PDK.activate()

c = cells.ring_single(gap=0.2, radius=10.0, length_x=4.0, length_y=0.6, cross_section='strip', length_extension=10.0)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-95.png

ring_single_heater#

ubcpdk.cells.ring_single_heater(gap=0.2, radius=10.0, length_x=2.0, length_y=0.01, coupler_ring='coupler_ring', coupler_ring_top=None, straight='straight', bend='bend_euler', cross_section_heater='heater_metal', cross_section_waveguide_heater='strip_heater_metal', cross_section='strip', via_stack='via_stack_heater_mtop', port_orientation=None, via_stack_offset=(1, 0), via_stack_size=(4, 4), length_extension=None)[source]#

Returns a double bus ring with heater on top.

two couplers (ct: top, cb: bottom) connected with two vertical straights (sl: left, sr: right)

Parameters:
  • gap (float) – gap between for coupler.

  • gap_top – gap for the top coupler. Defaults to gap.

  • gap_bot – gap for the bottom coupler. Defaults to gap.

  • radius (float) – for the bend and coupler.

  • length_x (float) – ring coupler length.

  • length_y (float) – vertical straight length.

  • coupler_ring (str | Callable[[...], Component] | dict[str, Any] | DKCell) – ring coupler spec.

  • coupler_ring_top (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – ring coupler spec for coupler away from vias (defaults to coupler_ring)

  • straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – straight spec.

  • bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – bend spec.

  • cross_section_heater (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for heater.

  • cross_section_waveguide_heater (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for waveguide with heater.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for regular waveguide.

  • via_stack (str | Callable[[...], Component] | dict[str, Any] | DKCell) – for heater to routing metal.

  • port_orientation (float | None) – for electrical ports to promote from via_stack.

  • via_stack_size (tuple[float, float]) – size of via_stack.

  • via_stack_offset (tuple[float, float]) – x,y offset for via_stack.

  • with_drop – adds drop ports.

  • length_extension (float | None) – straight length extension at the end of the coupler bottom ports. None defaults to 3.0 + radius.

Return type:

Component

         xxx          xx
      xxx               xxx
    xxx                   xxx
  xxx                       xxx
 xx                           xxx
 x                             xxx
xx                              xx▲
xx                              xx│length_y
xx                              xx▼
xx                             xx
 xx          length_x          x
  xx     ◄───────────────►    x
   xx                       xxx
     xx                   xxx
      xxx──────▲─────────xxx
               │gap
       o1──────▼─────────o4
from ubcpdk import PDK, cells

PDK.activate()

c = cells.ring_single_heater(gap=0.2, radius=10.0, length_x=2.0, length_y=0.01, coupler_ring='coupler_ring', straight='straight', bend='bend_euler', cross_section_heater='heater_metal', cross_section_waveguide_heater='strip_heater_metal', cross_section='strip', via_stack='via_stack_heater_mtop', via_stack_offset=(1, 0), via_stack_size=(4, 4))
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-96.png

siepic_o_gc_te1270_BB#

ubcpdk.cells.siepic_o_gc_te1270_BB()[source]#

Returns siepic_o_gc_te1270_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.siepic_o_gc_te1270_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-97.png

siepic_o_pwbstlas_si_BB#

ubcpdk.cells.siepic_o_pwbstlas_si_BB()[source]#

Returns siepic_o_pwbstlas_si_BB fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.siepic_o_pwbstlas_si_BB()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-98.png

spiral#

ubcpdk.cells.spiral(length=100, cross_section='strip', spacing=3, n_loops=6)[source]#

Returns a spiral double (spiral in, and then out).

Parameters:
  • length (float) – length of the spiral straight section.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section component.

  • spacing (float) – spacing between the spiral loops.

  • n_loops (int) – number of loops.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.spiral(length=100, cross_section='strip', spacing=3, n_loops=6)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-99.png

spiral_racetrack#

ubcpdk.cells.spiral_racetrack(min_radius=None, straight_length=20.0, spacings=(2, 2, 3, 3, 2, 2), straight='straight', bend='bend_euler', bend_s='bend_s', cross_section='strip', cross_section_s=None, extra_90_deg_bend=False, allow_min_radius_violation=False)[source]#

Returns Racetrack-Spiral.

Parameters:
  • min_radius (float | None) – smallest radius in um.

  • straight_length (float) – length of the straight segments in um.

  • spacings (Sequence[float]) – space between the center of neighboring waveguides in um.

  • straight (str | Callable[[...], Component] | dict[str, Any] | DKCell) – factory to generate the straight segments.

  • bend (str | Callable[[...], Component] | dict[str, Any] | DKCell) – factory to generate the bend segments.

  • bend_s (str | Callable[[...], Component] | dict[str, Any] | DKCell) – factory to generate the s-bend segments.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross-section of the waveguides.

  • cross_section_s (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection | None) – cross-section of the s bend waveguide (optional).

  • extra_90_deg_bend (bool) – if True, we add an additional straight + 90 degree bent at the output, so the output port is looking down.

  • allow_min_radius_violation (bool) – if True, will allow the s-bend to have a smaller radius than the minimum radius.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.spiral_racetrack(straight_length=20.0, spacings=(2, 2, 3, 3, 2, 2), straight='straight', bend='bend_euler', bend_s='bend_s', cross_section='strip', extra_90_deg_bend=False, allow_min_radius_violation=False)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-100.png

spiral_racetrack_heater#

ubcpdk.cells.spiral_racetrack_heater(spacing=4.0, num=8, straight_length=100, cross_section='strip')[source]#

Returns spiral racetrack with a heater above.

based on https://doi.org/10.1364/OL.400230 .

Parameters:
  • spacing (float) – center to center spacing between the waveguides.

  • num (int) – number of spiral loops.

  • straight_length (float) – length of the straight segments.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.spiral_racetrack_heater(spacing=4.0, num=8, straight_length=100, cross_section='strip')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-101.png

straight#

ubcpdk.cells.straight(length=10, cross_section='strip', width=None, npoints=2)[source]#

Returns a Straight waveguide.

Parameters:
  • length (float) – straight length (um).

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string or dict).

  • width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.

  • npoints (int) – number of points.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.straight(length=10, cross_section='strip', npoints=2)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-102.png

straight_heater_meander#

ubcpdk.cells.straight_heater_meander(length=320.0, heater_width=2.5, spacing=2, cross_section='strip', layer_heater='M1_HEATER', via_stack='via_stack_heater_mtop', n=3, port_orientation1=None, port_orientation2=None, radius=None)[source]#

Returns a meander based heater.

based on SungWon Chung, Makoto Nakai, and Hossein Hashemi, Low-power thermo-optic silicon modulator for large-scale photonic integrated systems Opt. Express 27, 13430-13459 (2019) https://www.osapublishing.org/oe/abstract.cfm?URI=oe-27-9-13430

Parameters:
  • length (float) – phase shifter length.

  • heater_width (float) – width of the heater.

  • spacing (float) – waveguide spacing (center to center).

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for waveguide.

  • layer_heater (tuple[int, int] | str | int | LayerEnum) – for top heater, if None, it does not add a heater.

  • via_stack (str | Callable[[...], Component] | dict[str, Any] | DKCell | None) – for the heater to via_stack metal.

  • n (int | None) – number of meanders.

  • port_orientation1 (float | None) – orientation of the first port. None for all orientations.

  • port_orientation2 (float | None) – orientation of the second port. None for all orientations.

  • radius (float | None) – radius of the meander.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.straight_heater_meander(length=320.0, heater_width=2.5, spacing=2, cross_section='strip', layer_heater='M1_HEATER', via_stack='via_stack_heater_mtop', n=3)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-103.png

straight_heater_metal#

ubcpdk.cells.straight_heater_metal(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, with_undercut=False, port_orientation1=None, port_orientation2=None, cross_section='strip')[source]#

Returns a thermal phase shifter.

dimensions from https://doi.org/10.1364/OE.27.010456

Parameters:
  • length (float) – phase shifter length.

  • length_undercut_spacing (float) – spacing between the waveguide and the undercut.

  • length_undercut (float) – undercut length.

  • length_straight (float) – straight length.

  • length_straight_input (float) – straight length input.

  • with_undercut (bool) – isolation trenches for higher efficiency.

  • port_orientation1 (int | None) – orientation of the first port. None for all orientations.

  • port_orientation2 (int | None) – orientation of the second port. None for all orientations.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – for waveguide.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.straight_heater_metal(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, with_undercut=False, cross_section='strip')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-104.png

straight_metal#

ubcpdk.cells.straight_metal(length=10, cross_section='metal_routing', width=None)[source]#

Returns a Straight waveguide.

Parameters:
  • length (float) – straight length (um).

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string or dict).

  • width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.straight_metal(length=10, cross_section='metal_routing')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-105.png

taper#

ubcpdk.cells.taper(length=10.0, width1=0.5, width2=None, cross_section='strip')[source]#

Linear taper, which tapers only the main cross section section.

Parameters:
  • length (float) – taper length.

  • width1 (float) – width of the west/left port.

  • width2 (float | None) – width of the east/right port. Defaults to width1.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string, CrossSectionFactory dict).

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.taper(length=10.0, width1=0.5, cross_section='strip')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-106.png

taper_SiN_750_3000#

ubcpdk.cells.taper_SiN_750_3000()[source]#

Returns taper_SiN_750_3000 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.taper_SiN_750_3000()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-107.png

taper_metal#

ubcpdk.cells.taper_metal(length=10.0, width1=1.5, width2=None, cross_section='metal_routing')[source]#

Linear taper, which tapers only the main cross section section.

Parameters:
  • length (float) – taper length.

  • width1 (float) – width of the west/left port.

  • width2 (float | None) – width of the east/right port. Defaults to width1.

  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string, CrossSectionFactory dict).

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.taper_metal(length=10.0, width1=1.5, cross_section='metal_routing')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-108.png

taper_si_simm_1310#

ubcpdk.cells.taper_si_simm_1310()[source]#

Returns taper_si_simm_1310 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.taper_si_simm_1310()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-109.png

taper_si_simm_1550#

ubcpdk.cells.taper_si_simm_1550()[source]#

Returns taper_si_simm_1550 fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.taper_si_simm_1550()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-110.png

text_rectangular#

ubcpdk.cells.text_rectangular(text='abc', size=3, justify='left', layer='M2_ROUTER')[source]#

Pixel based font, guaranteed to be manhattan, without acute angles.

Parameters:
  • text (str) – string.

  • size (float) – pixel size.

  • justify (str) – left, right or center.

  • layer (tuple[int, int] | str | int | LayerEnum) – for text.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.text_rectangular(text='abc', size=3, justify='left', layer='M2_ROUTER')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-111.png

text_rectangular_multi_layer#

ubcpdk.cells.text_rectangular_multi_layer(text='abc', layers=('WG', 'M2_ROUTER'), text_factory='text_rectangular', **kwargs)[source]#

Returns rectangular text in different layers.

Parameters:
  • text (str) – string of text.

  • layers (Sequence[tuple[int, int] | str | int | LayerEnum]) – list of layers to replicate the text.

  • text_factory (str | Callable[[...], Component] | dict[str, Any] | DKCell) – function to create the text Components.

  • kwargs (Any) – keyword arguments for text_factory.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.text_rectangular_multi_layer(text='abc', layers=('WG', 'M2_ROUTER'), text_factory='text_rectangular')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-112.png

thermal_phase_shifter_multimode#

ubcpdk.cells.thermal_phase_shifter_multimode_()[source]#

Returns thermal_phase_shifters fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.thermal_phase_shifter_multimode_()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-113.png

thermal_phase_shifter_te_1310#

ubcpdk.cells.thermal_phase_shifter_te_1310_()[source]#

Returns thermal_phase_shifters fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.thermal_phase_shifter_te_1310_()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-114.png

thermal_phase_shifter_te_1310_50#

ubcpdk.cells.thermal_phase_shifter_te_1310_50()[source]#

Returns thermal_phase_shifters fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.thermal_phase_shifter_te_1310_50()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-115.png

thermal_phase_shifter_te_1550_50#

ubcpdk.cells.thermal_phase_shifter_te_1550_50()[source]#

Returns thermal_phase_shifters fixed cell.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.thermal_phase_shifter_te_1550_50()
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-116.png

via_stack_heater_mtop#

ubcpdk.cells.via_stack_heater_mtop(size=(20.0, 10.0))[source]#

Rectangular via array stack.

You can use it to connect different metal layers or metals to silicon. You can use the naming convention via_stack_layerSource_layerDestination contains 4 ports (e1, e2, e3, e4)

also know as Via array http://www.vlsi-expert.com/2017/12/vias.html

Parameters:

size (tuple[float, float]) – of the layers.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.via_stack_heater_mtop(size=(20.0, 10.0))
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-117.png

wire_corner#

ubcpdk.cells.wire_corner(cross_section='metal_routing', width=None)[source]#

Returns 45 degrees electrical corner wire.

Parameters:
  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.

  • width (float | None) – optional width. Defaults to cross_section width.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.wire_corner(cross_section='metal_routing')
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-118.png

wire_corner45#

ubcpdk.cells.wire_corner45(cross_section='metal_routing', radius=10, width=None, layer=None, with_corner90_ports=True)[source]#

Returns 90 degrees electrical corner wire.

Parameters:
  • cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.

  • radius (float) – ignored.

  • width (float | None) – optional width. Defaults to cross_section width.

  • layer (tuple[int, int] | str | int | LayerEnum | None) – ignored.

  • with_corner90_ports (bool) – if True, adds ports at 90 degrees.

Return type:

Component

from ubcpdk import PDK, cells

PDK.activate()

c = cells.wire_corner45(cross_section='metal_routing', radius=10, with_corner90_ports=True)
c.plot()

(Source code, png, hires.png, pdf)

_images/components_plot-119.png