Cells Si SOI 500nm#

array#

cspdk.si500.cells.array(component='pad', columns=6, rows=1, add_ports=True, size=None, centered=False, column_pitch=150, row_pitch=150)[source]#

An array of components.

Parameters:
  • component – the component of which to create an array

  • columns (int) – the number of components to place in the x-direction

  • rows (int) – the number of components to place in the y-direction

  • add_ports (bool) – add ports to the component

  • size – Optional x, y size. Overrides columns and rows.

  • centered (bool) – center the array around the origin.

  • row_pitch (float) – the pitch between rows.

  • column_pitch (float) – the pitch between columns.

Return type:

Component

import cspdk

c = cspdk.si500.cells.array(component='pad', columns=6, rows=1, add_ports=True, centered=False, column_pitch=150, row_pitch=150).copy()
c.draw_ports()
c.plot()

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

_images/cells_si500-1.png

bend_euler#

cspdk.si500.cells.bend_euler(radius=None, angle=90.0, p=0.5, width=None, cross_section='xs_rc')[source]#

An euler bend.

Parameters:
  • radius (float | None) – the effective radius of the bend.

  • angle (float) – the angle of the bend (usually 90 degrees).

  • p (float) – the fraction of the bend that’s represented by a polar bend.

  • width (float | None) – the width of the waveguide forming the bend.

  • 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

import cspdk

c = cspdk.si500.cells.bend_euler(angle=90.0, p=0.5, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

bend_euler_rc#

cspdk.si500.cells.bend_euler_rc(radius=None, angle=90.0, p=0.5, width=None, *, cross_section='xs_rc')#

An euler bend.

Parameters:
  • radius (float | None) – the effective radius of the bend.

  • angle (float) – the angle of the bend (usually 90 degrees).

  • p (float) – the fraction of the bend that’s represented by a polar bend.

  • width (float | None) – the width of the waveguide forming the bend.

  • 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

import cspdk

c = cspdk.si500.cells.bend_euler_rc(angle=90.0, p=0.5, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

bend_euler_ro#

cspdk.si500.cells.bend_euler_ro(radius=None, angle=90.0, p=0.5, width=None, *, cross_section='xs_ro')#

An euler bend.

Parameters:
  • radius (float | None) – the effective radius of the bend.

  • angle (float) – the angle of the bend (usually 90 degrees).

  • p (float) – the fraction of the bend that’s represented by a polar bend.

  • width (float | None) – the width of the waveguide forming the bend.

  • 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

import cspdk

c = cspdk.si500.cells.bend_euler_ro(angle=90.0, p=0.5, cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

bend_s#

cspdk.si500.cells.bend_s(size=(20.0, 1.8), cross_section='xs_rc')[source]#

An S-bend.

Parameters:
  • size (tuple[float, float]) – the width and height of the s-bend.

  • 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

import cspdk

c = cspdk.si500.cells.bend_s(size=(20.0, 1.8), cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

compass#

cspdk.si500.cells.compass(size=(4.0, 2.0), layer='PAD', port_type='electrical', 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

import cspdk

c = cspdk.si500.cells.compass(size=(4.0, 2.0), layer='PAD', port_type='electrical', port_inclusion=0.0, port_orientations=(180, 90, 0, -90), auto_rename_ports=True).copy()
c.draw_ports()
c.plot()

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

_images/cells_si500-6.png

coupler#

cspdk.si500.cells.coupler(gap=0.236, length=20.0, dy=4.0, dx=15.0, cross_section='xs_rc')[source]#

A coupler.

a coupler is a 2x2 splitter

Parameters:
  • gap (float) – the gap between the waveguides forming the straight part of the coupler.

  • length (float) – the length of the coupler.

  • dy (float) – the height of the s-bend.

  • dx (float) – the length of the s-bend.

  • 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

import cspdk

c = cspdk.si500.cells.coupler(gap=0.236, length=20.0, dy=4.0, dx=15.0, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

coupler_rc#

cspdk.si500.cells.coupler_rc(gap=0.236, length=20.0, dy=4.0, dx=15.0, *, cross_section='xs_rc')#

A coupler.

a coupler is a 2x2 splitter

Parameters:
  • gap (float) – the gap between the waveguides forming the straight part of the coupler.

  • length (float) – the length of the coupler.

  • dy (float) – the height of the s-bend.

  • dx (float) – the length of the s-bend.

  • 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

import cspdk

c = cspdk.si500.cells.coupler_rc(gap=0.236, length=20.0, dy=4.0, dx=15.0, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

coupler_ro#

cspdk.si500.cells.coupler_ro(gap=0.236, length=20.0, dy=4.0, dx=15.0, *, cross_section='xs_ro')#

A coupler.

a coupler is a 2x2 splitter

Parameters:
  • gap (float) – the gap between the waveguides forming the straight part of the coupler.

  • length (float) – the length of the coupler.

  • dy (float) – the height of the s-bend.

  • dx (float) – the length of the s-bend.

  • 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

import cspdk

c = cspdk.si500.cells.coupler_ro(gap=0.236, length=20.0, dy=4.0, dx=15.0, cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

coupler_straight#

cspdk.si500.cells.coupler_straight(length=20.0, gap=0.236, cross_section='xs_rc')[source]#

The straight part of a coupler.

Parameters:
  • length (float) – the length of the straight part of the coupler.

  • gap (float) – the gap between the waveguides forming the straight part of the coupler.

  • 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

import cspdk

c = cspdk.si500.cells.coupler_straight(length=20.0, gap=0.236, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

die#

cspdk.si500.cells.die(cross_section='xs_rc')[source]#

A die template.

Parameters:

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

Return type:

Component

import cspdk

c = cspdk.si500.cells.die(cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

die_rc#

cspdk.si500.cells.die_rc(*, cross_section='xs_rc')#

A die template.

Parameters:

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

Return type:

Component

import cspdk

c = cspdk.si500.cells.die_rc(cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

die_ro#

cspdk.si500.cells.die_ro(*, cross_section='xs_ro')#

A die template.

Parameters:

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

Return type:

Component

import cspdk

c = cspdk.si500.cells.die_ro(cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

grating_coupler_array#

cspdk.si500.cells.grating_coupler_array(pitch=127.0, n=6, cross_section='xs_rc', centered=True, grating_coupler=None, port_name='o1', with_loopback=False, rotation=-90, straight_to_grating_spacing=10.0, radius=None)[source]#

An array of grating couplers.

Parameters:
  • pitch (float) – the pitch of the grating couplers

  • n (int) – the number of grating couplers

  • centered – if True, centers the array around the origin.

  • grating_coupler – the name of the grating coupler to use in the array.

  • port_name – port name

  • with_loopback – if True, adds a loopback between edge GCs. Only works for rotation = 90 for now.

  • rotation – rotation angle for each reference.

  • straight_to_grating_spacing – spacing between the last grating coupler and the loopback.

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

  • radius (float | None) – optional radius for routing the loopback.

Return type:

Component

import cspdk

c = cspdk.si500.cells.grating_coupler_array(pitch=127.0, n=6, cross_section='xs_rc', centered=True, port_name='o1', with_loopback=False, rotation=-90, straight_to_grating_spacing=10.0).copy()
c.draw_ports()
c.plot()

(Source code)

grating_coupler_elliptical#

cspdk.si500.cells.grating_coupler_elliptical(wavelength=1.55, grating_line_width=0.315, cross_section='xs_rc')[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

import cspdk

c = cspdk.si500.cells.grating_coupler_elliptical(wavelength=1.55, grating_line_width=0.315, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

grating_coupler_elliptical_rc#

cspdk.si500.cells.grating_coupler_elliptical_rc(*, wavelength=1.55, grating_line_width=0.315, cross_section='xs_rc')#

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

import cspdk

c = cspdk.si500.cells.grating_coupler_elliptical_rc(wavelength=1.55, grating_line_width=0.315, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

grating_coupler_elliptical_ro#

cspdk.si500.cells.grating_coupler_elliptical_ro(*, wavelength=1.31, grating_line_width=0.25, cross_section='xs_ro')#

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

import cspdk

c = cspdk.si500.cells.grating_coupler_elliptical_ro(wavelength=1.31, grating_line_width=0.25, cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

grating_coupler_rectangular#

cspdk.si500.cells.grating_coupler_rectangular(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, cross_section='xs_rc')[source]#

A grating coupler with straight and parallel teeth.

Parameters:
  • period – the period of the grating.

  • n_periods (int) – the number of grating teeth.

  • length_taper (float) – the length of the taper tapering up to the grating.

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

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

Return type:

Component

import cspdk

c = cspdk.si500.cells.grating_coupler_rectangular(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

grating_coupler_rectangular_rc#

cspdk.si500.cells.grating_coupler_rectangular_rc(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, *, cross_section='xs_rc')#

A grating coupler with straight and parallel teeth.

Parameters:
  • period – the period of the grating.

  • n_periods (int) – the number of grating teeth.

  • length_taper (float) – the length of the taper tapering up to the grating.

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

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

Return type:

Component

import cspdk

c = cspdk.si500.cells.grating_coupler_rectangular_rc(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

grating_coupler_rectangular_ro#

cspdk.si500.cells.grating_coupler_rectangular_ro(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, *, cross_section='xs_ro')#

A grating coupler with straight and parallel teeth.

Parameters:
  • period – the period of the grating.

  • n_periods (int) – the number of grating teeth.

  • length_taper (float) – the length of the taper tapering up to the grating.

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

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

Return type:

Component

import cspdk

c = cspdk.si500.cells.grating_coupler_rectangular_ro(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

mmi1x2#

cspdk.si500.cells.mmi1x2(width=None, width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, cross_section='xs_rc')[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 – the width at the base of the mmi body.

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

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

  • width_mmi – 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

import cspdk

c = cspdk.si500.cells.mmi1x2(width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

mmi1x2_rc#

cspdk.si500.cells.mmi1x2_rc(width=None, width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, *, cross_section='xs_rc')#

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 – the width at the base of the mmi body.

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

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

  • width_mmi – 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

import cspdk

c = cspdk.si500.cells.mmi1x2_rc(width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

mmi1x2_ro#

cspdk.si500.cells.mmi1x2_ro(width=None, width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, *, cross_section='xs_ro')#

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 – the width at the base of the mmi body.

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

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

  • width_mmi – 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

import cspdk

c = cspdk.si500.cells.mmi1x2_ro(width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

mmi2x2#

cspdk.si500.cells.mmi2x2(width=None, width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, cross_section='xs_rc')[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

import cspdk

c = cspdk.si500.cells.mmi2x2(width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

mmi2x2_rc#

cspdk.si500.cells.mmi2x2_rc(width=None, width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, *, cross_section='xs_rc')#

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

import cspdk

c = cspdk.si500.cells.mmi2x2_rc(width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

mmi2x2_ro#

cspdk.si500.cells.mmi2x2_ro(width=None, width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, *, cross_section='xs_ro')#

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

import cspdk

c = cspdk.si500.cells.mmi2x2_ro(width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

mzi#

cspdk.si500.cells.mzi(delta_length=10.0, bend='bend_euler_rc', straight='straight_rc', splitter='mmi1x2_rc', combiner='mmi2x2_rc', cross_section='xs_rc')[source]#

A Mach-Zehnder Interferometer.

Parameters:
  • delta_length (float) – the difference in length between the upper and lower arms of the mzi.

  • bend – the name of the default bend of the mzi.

  • straight – the name of the default straight of the mzi.

  • splitter – the name of the default splitter of the mzi.

  • combiner – the name of the default combiner of the mzi.

  • 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

import cspdk

c = cspdk.si500.cells.mzi(delta_length=10.0, bend='bend_euler_rc', straight='straight_rc', splitter='mmi1x2_rc', combiner='mmi2x2_rc', cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

mzi_rc#

cspdk.si500.cells.mzi_rc(delta_length=10.0, *, bend='bend_euler_rc', straight='straight_rc', splitter='mmi1x2_rc', combiner='mmi2x2_rc', cross_section='xs_rc')#

A Mach-Zehnder Interferometer.

Parameters:
  • delta_length (float) – the difference in length between the upper and lower arms of the mzi.

  • bend – the name of the default bend of the mzi.

  • straight – the name of the default straight of the mzi.

  • splitter – the name of the default splitter of the mzi.

  • combiner – the name of the default combiner of the mzi.

  • 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

import cspdk

c = cspdk.si500.cells.mzi_rc(delta_length=10.0, bend='bend_euler_rc', straight='straight_rc', splitter='mmi1x2_rc', combiner='mmi2x2_rc', cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

mzi_ro#

cspdk.si500.cells.mzi_ro(delta_length=10.0, *, bend='bend_euler_ro', straight='straight_ro', splitter='mmi1x2_ro', combiner='mmi2x2_ro', cross_section='xs_ro')#

A Mach-Zehnder Interferometer.

Parameters:
  • delta_length (float) – the difference in length between the upper and lower arms of the mzi.

  • bend – the name of the default bend of the mzi.

  • straight – the name of the default straight of the mzi.

  • splitter – the name of the default splitter of the mzi.

  • combiner – the name of the default combiner of the mzi.

  • 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

import cspdk

c = cspdk.si500.cells.mzi_ro(delta_length=10.0, bend='bend_euler_ro', straight='straight_ro', splitter='mmi1x2_ro', combiner='mmi2x2_ro', cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

pad#

cspdk.si500.cells.pad()[source]#

An electrical pad.

Return type:

Component

import cspdk

c = cspdk.si500.cells.pad().copy()
c.draw_ports()
c.plot()

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

_images/cells_si500-30.png

rectangle#

cspdk.si500.cells.rectangle(layer=<LayerMapCornerstone.FLOORPLAN: 46>, **kwargs)[source]#

A rectangle.

Return type:

Component

import cspdk

c = cspdk.si500.cells.rectangle(layer=<LayerMapCornerstone.FLOORPLAN: 46>).copy()
c.draw_ports()
c.plot()

(Source code)

straight#

cspdk.si500.cells.straight(length=10.0, cross_section='xs_rc', **kwargs)[source]#

A straight waveguide.

Parameters:
  • length (float) – the length of the waveguide.

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

  • kwargs – additional arguments to pass to the straight function.

Return type:

Component

import cspdk

c = cspdk.si500.cells.straight(length=10.0, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

straight_rc#

cspdk.si500.cells.straight_rc(length=10.0, *, cross_section='xs_rc', **kwargs)#

A straight waveguide.

Parameters:
  • length (float) – the length of the waveguide.

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

  • kwargs – additional arguments to pass to the straight function.

Return type:

Component

import cspdk

c = cspdk.si500.cells.straight_rc(length=10.0, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

straight_ro#

cspdk.si500.cells.straight_ro(length=10.0, *, cross_section='xs_ro', **kwargs)#

A straight waveguide.

Parameters:
  • length (float) – the length of the waveguide.

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

  • kwargs – additional arguments to pass to the straight function.

Return type:

Component

import cspdk

c = cspdk.si500.cells.straight_ro(length=10.0, cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

taper#

cspdk.si500.cells.taper(length=10.0, width1=0.45, width2=None, port=None, cross_section='xs_rc')[source]#

A taper.

A taper is a transition between two waveguide widths

Parameters:
  • length (float) – the length of the taper.

  • width1 (float) – the input width of the taper.

  • width2 (float | None) – the output width of the taper (if not given, use port).

  • port (DPort | None) – the port (with certain width) to taper towards (if not given, use width2).

  • 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

import cspdk

c = cspdk.si500.cells.taper(length=10.0, width1=0.45, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

taper_rc#

cspdk.si500.cells.taper_rc(*, length=10.0, width1=0.45, width2=None, port=None, cross_section='xs_rc')#

A taper.

A taper is a transition between two waveguide widths

Parameters:
  • length (float) – the length of the taper.

  • width1 (float) – the input width of the taper.

  • width2 (float | None) – the output width of the taper (if not given, use port).

  • port (DPort | None) – the port (with certain width) to taper towards (if not given, use width2).

  • 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

import cspdk

c = cspdk.si500.cells.taper_rc(length=10.0, width1=0.45, cross_section='xs_rc').copy()
c.draw_ports()
c.plot()

(Source code)

taper_ro#

cspdk.si500.cells.taper_ro(*, length=10.0, width1=0.4, width2=None, port=None, cross_section='xs_ro')#

A taper.

A taper is a transition between two waveguide widths

Parameters:
  • length (float) – the length of the taper.

  • width1 (float) – the input width of the taper.

  • width2 (float | None) – the output width of the taper (if not given, use port).

  • port (DPort | None) – the port (with certain width) to taper towards (if not given, use width2).

  • 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

import cspdk

c = cspdk.si500.cells.taper_ro(length=10.0, width1=0.4, cross_section='xs_ro').copy()
c.draw_ports()
c.plot()

(Source code)

wire_corner#

cspdk.si500.cells.wire_corner(cross_section='metal_routing', **kwargs)[source]#

A wire corner.

A wire corner is a bend for electrical routes.

Return type:

Component

import cspdk

c = cspdk.si500.cells.wire_corner(cross_section='metal_routing').copy()
c.draw_ports()
c.plot()

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

_images/cells_si500-38.png