Skip to content

Cells suspended Si

array

An array of components.

Parameters:

Name Type Description Default
component ComponentSpec

the component of which to create an array.

partial(straight, cross_section='xs_sus')
columns int

the number of components to place in the x-direction.

6
rows int

the number of components to place in the y-direction.

1
add_ports bool

add ports to the component.

True
size

Optional x, y size. Overrides columns and rows.

None
centered bool

center the array around the origin.

False
column_pitch float

the pitch between columns.

150
row_pitch float

the pitch between rows.

150

:noindex:

array

from cspdk.si_sus import cells, PDK

PDK.activate()

c = cells.array(columns=6, rows=1, add_ports=True, centered=False, column_pitch=150, row_pitch=150)
c.draw_ports()
c.plot()

bend_circular

A circular bend with polar-wedge etch slots, like the foundry bend.

The Suspendedsilicon500nm_3800nm_TE_90_DegreeBend GDS is a 40.75um center-line radius arc (the xs_sus default) whose slots are polar wedges of 0.0075 rad at 0.01375 rad pitch (0.3um at 0.55um on the 40um inner core edge); this cell draws the same wedges. At the default radius it has 114 slot pairs per 90 degrees: the foundry cell fits a 115th by letting its last wedge overhang the port plane by 0.24 degrees, which would leave < 180nm to the slots of an abutting cell.

Parameters:

Name Type Description Default
radius float | None

the radius of the bend (defaults to the cross-section radius).

None
angle float

the angle of the bend (usually 90 degrees).

90.0
width float | None

the width of the waveguide forming the bend.

None
cross_section CrossSectionSpec

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

'xs_sus'

:noindex:

bend_circular

from cspdk.si_sus import cells, PDK

PDK.activate()

c = cells.bend_circular(angle=90, cross_section='xs_sus')
c.draw_ports()
c.plot()

bend_euler

An euler bend (not a foundry library cell; routing uses bend_circular).

Etch slots are drawn perpendicular to the curve with the pitch measured along the inner core edge, widened where the tightest curvature would break the layer-404 minima. The minimum local radius must respect the cross-section's radius_min.

Parameters:

Name Type Description Default
radius float | None

the effective radius of the bend.

None
angle float

the angle of the bend (usually 90 degrees).

90.0
p float

the fraction of the bend that's represented by a polar bend.

0.5
width float | None

the width of the waveguide forming the bend.

None
cross_section CrossSectionSpec

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

'xs_sus'

:noindex:

bend_euler

from cspdk.si_sus import cells, PDK

PDK.activate()

c = cells.bend_euler(angle=90, p=0.5, cross_section='xs_sus')
c.draw_ports()
c.plot()

bend_s

A raised-cosine S-bend with vertical etch slots.

The default size and the slot drawing follow the foundry Suspendedsilicon500nm_3800nm_TE_SBend GDS: a cosine center line y = dy (1 - cos(pi x / dx)) / 2 and vertical 0.3um slots at 0.55um x-pitch whose inner ends follow the core edges (the foundry cell matches this to within its ~10nm drawing tolerance).

Parameters:

Name Type Description Default
size tuple[float, float]

the length and height of the s-bend.

(40.0, 8.0)
cross_section CrossSectionSpec

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

'xs_sus'
allow_min_radius_violation bool

if True, allows the s-bend to have a smaller radius than the minimum radius.

True
width float | None

waveguide width; defaults to the cross-section width.

None

:noindex:

bend_s

from cspdk.si_sus import cells, PDK

PDK.activate()

c = cells.bend_s(size=(40, 8), cross_section='xs_sus', allow_min_radius_violation=True)
c.draw_ports()
c.plot()

grating_coupler_rectangular

The foundry suspended-Si 3.8um TE grating coupler.

Imports Suspendedsilicon500nm_3800nm_TE_GratingCoupler.gds unchanged: a slotted 300um taper from the 1.5um core to a 15um wide region with a 13 x 20 array of 1.15um x 0.54um holes (1.1um x 2.3um periods) for a 19 degree fiber. The GDS waveguide end is at x=0; o1 sits 0.125um further out (on un-etched Si) so that, like every other cell, the first slot is 0.125um inside the port and abutting cells keep >= 0.25um tethers. o2 is the fiber port at the center of the hole array.

Parameters:

Name Type Description Default
cross_section CrossSectionSpec

cross-section of the waveguide port.

'xs_sus'

:noindex:

grating_coupler_rectangular

from cspdk.si_sus import cells, PDK

PDK.activate()

c = cells.grating_coupler_rectangular(cross_section='xs_sus')
c.draw_ports()
c.plot()

rectangle

A rectangle.

Parameters:

Name Type Description Default
layer

LAYER.FLOORPLAN.

FLOORPLAN
**kwargs

additional arguments.

{}

:noindex:

rectangle

from cspdk.si_sus import cells, PDK

PDK.activate()

c = cells.rectangle(layer='FLOORPLAN')
c.draw_ports()
c.plot()

straight

A straight waveguide.

The slots are the xs_sus slot pairs, drawn flat at exact positions: gdsfactory's along_path adds the pitch up in floating point and can drop the last slot (e.g. at length 500). straight(500) reproduces the 909 slot pairs of the Suspendedsilicon500nm_3800nm_TE_Waveguide GDS, centered in the cell.

Parameters:

Name Type Description Default
length float

the length of the waveguide.

10.0
cross_section CrossSectionSpec

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

'xs_sus'
kwargs

additional arguments to pass to the straight function.

{}

:noindex:

straight

from cspdk.si_sus import cells, PDK

PDK.activate()

c = cells.straight(length=10, cross_section='xs_sus')
c.draw_ports()
c.plot()

taper

A linear taper with vertical etch slots along both core edges.

The slots follow the tapered core edges like those of the foundry grating-coupler taper. Suspended cores wider than 16um are rejected (MPW #7 maximum suspended waveguide width).

Parameters:

Name Type Description Default
length float

the length of the taper.

10.0
width1 float

the input width of the taper.

width_sus
width2 float | None

the output width of the taper (if not given, use port).

None
port Port | None

the port (with certain width) to taper towards (if not given, use width2).

None
cross_section CrossSectionSpec

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

'xs_sus'

:noindex:

taper

from cspdk.si_sus import cells, PDK

PDK.activate()

c = cells.taper(length=10, width1=1.5, cross_section='xs_sus')
c.draw_ports()
c.plot()