Cells Si SOI 220nm e-beam (EVENT-ONLY)¶
bend_circular¶
A circular bend; the routing bend.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
radius
|
float | None
|
radius in um (defaults to 25). |
None
|
angle
|
float
|
angle in degrees. |
90.0
|
width
|
float | None
|
width in um (defaults to the cross-section's). |
None
|
cross_section
|
CrossSectionSpec
|
cross-section spec. |
'rib'
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.bend_circular(angle=90, cross_section='rib')
c.draw_ports()
c.plot()
bend_euler¶
An Euler bend whose tightest curvature is at least 25 um.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
radius
|
float
|
effective radius in um. |
radius_euler
|
angle
|
float
|
angle in degrees. |
90.0
|
p
|
float
|
fraction of the bend that is an Euler curve. |
0.5
|
width
|
float | None
|
width in um (defaults to the cross-section's). |
None
|
cross_section
|
CrossSectionSpec
|
cross-section spec. |
'rib'
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.bend_euler(radius=36, angle=90, p=0.5, cross_section='rib')
c.draw_ports()
c.plot()
bend_s¶
A Bezier S-bend whose tightest curvature is at least 25 um.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
tuple[float, float]
|
length and offset (dx, dy) in um. |
(50.0, 5.0)
|
cross_section
|
CrossSectionSpec
|
cross-section spec. |
'rib'
|
allow_min_radius_violation
|
bool
|
accepted because gdsfactory's coupler passes it; the minimum radius is always enforced. |
False
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.bend_s(size=(50, 5), cross_section='rib', allow_min_radius_violation=False)
c.draw_ports()
c.plot()
coupler¶
A symmetric directional coupler.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
gap
|
float
|
gap in um (>= 0.2). |
gap
|
length
|
float
|
coupling length in um. |
20.0
|
dx
|
float
|
length of each S-bend in um. |
16.0
|
dy
|
float
|
port pitch in um. |
3.5
|
cross_section
|
CrossSectionSpec
|
cross-section spec. |
'rib'
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.coupler(gap=0.25, length=20, dx=16, dy=3.5, cross_section='rib')
c.draw_ports()
c.plot()
coupler_ring¶
The coupling section of a ring: a bus and two quarter-circle bends.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
gap
|
float
|
gap in um (>= 0.2). |
gap
|
radius
|
float
|
bend radius in um (>= 25). |
radius_rib
|
length_x
|
float
|
coupling length in um. |
4.0
|
bend
|
ComponentSpec
|
90 degree bend spec. |
'bend_circular'
|
straight
|
ComponentSpec
|
straight spec. |
'straight'
|
cross_section
|
CrossSectionSpec
|
cross-section spec. |
'rib'
|
length_extension
|
float | None
|
bus extension at each end in um (default radius + 5). |
None
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.coupler_ring(gap=0.25, radius=25, length_x=4, bend='bend_circular', straight='straight', cross_section='rib')
c.draw_ports()
c.plot()
die¶
The 6 x 3 mm design area with placeholder grating I/O.
Inputs on the west face outputs on the east, at least 500 um apart. Ports o1..o{n_io} are the inputs (bottom to top); o{n_io+1}..o{2 n_io} the outputs (top to bottom), so o{i} and o{2 n_io + 1 - i} share a row.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
tuple[float, float]
|
design area (width, height) in um. |
die_size
|
n_io
|
int
|
number of inputs (and of outputs). |
8
|
io_pitch
|
float
|
vertical pitch in um. |
io_pitch
|
edge_margin
|
float
|
distance from the floorplan edge to each grating's end in um. |
100.0
|
grating_coupler
|
ComponentSpec
|
grating coupler spec. |
'grating_coupler'
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.die(size=(6000, 3000), n_io=8, io_pitch=250, edge_margin=100, grating_coupler='grating_coupler')
c.draw_ports()
c.plot()
grating_coupler¶
The CORNERSTONE student-batch rib grating, with the teeth on GRA (6/0).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
period
|
float
|
period in um. |
0.67
|
fill_factor
|
float
|
etched fraction of the period. |
0.5
|
n_periods
|
int
|
number of teeth. |
60
|
length_taper
|
float
|
taper length in um. |
350.0
|
width_grating
|
float
|
grating width in um. |
10.0
|
length_end
|
float
|
unetched Si after the last tooth in um. |
4.163
|
cross_section
|
CrossSectionSpec
|
cross-section of the waveguide port. |
'rib'
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.grating_coupler(period=0.67, fill_factor=0.5, n_periods=60, length_taper=350, width_grating=10, length_end=4.163, cross_section='rib')
c.draw_ports()
c.plot()
grating_coupler_sweep¶
Grating loopbacks over period and fill factor, one row per pair.
info["rows"] lists the (period, fill factor) of each row, bottom up.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
periods
|
tuple[float, ...]
|
periods in um. |
(0.65, 0.67, 0.69)
|
fill_factors
|
tuple[float, ...]
|
etched fill factors. |
(0.45, 0.5, 0.55)
|
length
|
float
|
straight between the two gratings of a row in um. |
100.0
|
pitch
|
float
|
row pitch in um. |
io_pitch
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.grating_coupler_sweep(periods=(0.65, 0.67, 0.69), fill_factors=(0.45, 0.5, 0.55), length=100, pitch=250)
c.draw_ports()
c.plot()
ring_single¶
An all-pass ring.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
gap
|
float
|
gap in um (>= 0.2). |
gap
|
radius
|
float
|
bend radius in um (>= 25). |
radius_rib
|
length_x
|
float
|
coupling length in um. |
4.0
|
length_y
|
float
|
length of the vertical straights in um. |
0.6
|
cross_section
|
CrossSectionSpec
|
cross-section spec. |
'rib'
|
length_extension
|
float | None
|
bus extension at each end in um (default radius + 5). |
None
|
:noindex:

from cspdk.si220_ebeam_event import cells, PDK
PDK.activate()
c = cells.ring_single(gap=0.25, radius=25, length_x=4, length_y=0.6, cross_section='rib')
c.draw_ports()
c.plot()
straight¶
A straight rib waveguide.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
length in um. |
10.0
|
width
|
float | None
|
width in um (defaults to the cross-section's). |
None
|
cross_section
|
CrossSectionSpec
|
cross-section spec. |
'rib'
|
:noindex:
