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:

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:

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:

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:

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:

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:

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:

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:
