Here are the components available in the PDK
Cells¶
ANT_MMI_1x2_te1550_3dB_BB¶
Returns ANT_MMI_1x2_te1550_3dB_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ANT_MMI_1x2_te1550_3dB_BB()
c.plot()
Alignment_Marker¶
Returns Alignment_Marker fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.Alignment_Marker()
c.plot()
GC_SiN_TE_1310_8degOxide_BB¶
Returns GC_SiN_TE_1310_8degOxide_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.GC_SiN_TE_1310_8degOxide_BB()
c.plot()
GC_SiN_TE_1550_8degOxide_BB¶
Returns GC_SiN_TE_1550_8degOxide_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.GC_SiN_TE_1550_8degOxide_BB()
c.plot()
GC_TE_1310_8degOxide_BB¶
Returns GCs_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.GC_TE_1310_8degOxide_BB()
c.plot()
GC_TE_1550_8degOxide_BB¶
Returns GCs_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.GC_TE_1550_8degOxide_BB()
c.plot()
GC_TM_1310_8degOxide_BB¶
Returns GCs_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.GC_TM_1310_8degOxide_BB()
c.plot()
GC_TM_1550_8degOxide_BB¶
Returns GCs_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.GC_TM_1550_8degOxide_BB()
c.plot()
Packaging_FibreArray_8ch¶
Returns Packaging_FibreArray_8ch fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.Packaging_FibreArray_8ch()
c.plot()
SEM_example¶
Returns SEM_example fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.SEM_example()
c.plot()
add_fiber_array¶
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:
| Name | Type | Description | Default |
|---|---|---|---|
component
|
ComponentSpec
|
to connect. |
'ring_single'
|
component_name
|
str | None
|
for the label. |
None
|
gc_port_name
|
str
|
grating coupler input port name 'o1'. |
'o1'
|
with_loopback
|
bool
|
True, adds loopback structures. |
False
|
fanout_length
|
float | None
|
None # if None, automatic calculation of fanout length. |
0
|
grating_coupler
|
ComponentSpec
|
grating coupler instance, function or list of functions. |
gc
|
cross_section
|
CrossSectionSpec
|
spec. |
'strip'
|
straight
|
ComponentSpec
|
straight component. |
'straight'
|
taper
|
ComponentSpec | None
|
taper component. |
None
|
kwargs
|
cross_section settings. |
{}
|
add_fiber_array_pads_rf¶
Returns fiber array with label and electrical pads.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
component
|
ComponentSpec
|
to add fiber array and pads. |
'ring_single_heater'
|
username
|
str
|
for the label. |
username
|
orientation
|
float
|
for adding pads. |
0
|
pad_yspacing
|
float
|
for adding pads. |
50
|
component_name
|
str | None
|
for the label. |
None
|
kwargs
|
for add_fiber_array. |
{}
|
add_pads¶
Returns fiber array with label and electrical pads.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
component
|
ComponentSpec
|
to add fiber array and pads. |
'ring_single_heater'
|
username
|
str
|
for the label. |
username
|
kwargs
|
for add_fiber_array. |
{}
|
add_pads_rf¶
bend_euler¶
Regular degree euler bend.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
radius
|
float | None
|
in um. Defaults to cross_section_radius. |
None
|
angle
|
float
|
total angle of the curve. |
90
|
p
|
float
|
Proportion of the curve that is an Euler curve. |
0.5
|
width
|
float | None
|
width to use. Defaults to cross_section.width. |
None
|
cross_section
|
CrossSectionSpec
|
specification (CrossSection, string, CrossSectionFactory dict). |
'strip'
|
allow_min_radius_violation
|
bool
|
if True allows radius to be smaller than cross_section radius. |
False
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.bend_euler(angle=90, p=0.5, cross_section='strip', allow_min_radius_violation=False)
c.plot()
bend_metal¶
Regular degree euler bend.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
radius
|
float | None
|
None. |
None
|
angle
|
float
|
90. |
90
|
width
|
float | None
|
None. |
None
|
cross_section
|
CrossSectionSpec
|
"metal_routing". |
'metal_routing'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.bend_metal(angle=90, cross_section='metal_routing')
c.plot()
bend_s¶
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:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
Size
|
in x and y direction. |
(11, 1.8)
|
cross_section
|
CrossSectionSpec
|
spec. |
'strip'
|
width
|
float | None
|
width of the waveguide. If None, it will use the width of the cross_section. |
None
|
allow_min_radius_violation
|
bool
|
allows min radius violations. |
False
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.bend_s(size=(11, 1.8), cross_section='strip', allow_min_radius_violation=False)
c.plot()
bend_s_metal¶
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:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
Size
|
in x and y direction. |
(11, 1.8)
|
cross_section
|
CrossSectionSpec
|
spec. |
'metal_routing'
|
width
|
float | None
|
width of the waveguide. If None, it will use the width of the cross_section. |
None
|
allow_min_radius_violation
|
bool
|
allows min radius violations. |
True
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.bend_s_metal(size=(11, 1.8), cross_section='metal_routing', allow_min_radius_violation=True)
c.plot()
compass¶
Rectangle with ports on each edge (north, south, east, and west).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
Size
|
rectangle size. |
(4, 2)
|
layer
|
LayerSpec
|
tuple (int, int). |
'MTOP'
|
port_type
|
str | None
|
optical, electrical. |
None
|
port_inclusion
|
float
|
from edge. |
0.0
|
port_orientations
|
Ints | None
|
list of port_orientations to add. None does not add ports. |
(180, 90, 0, -90)
|
auto_rename_ports
|
bool
|
auto rename ports. |
True
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
coupler¶
Returns Symmetric coupler.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
of coupling region in um. |
14.5
|
gap
|
float
|
of coupling region in um. |
gap
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.coupler(length=14.5, gap=0.2)
c.plot()
coupler_ring¶
Returns Coupler for ring.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length_x
|
float
|
length of the parallel coupled straight waveguides. |
4
|
gap
|
float
|
gap between for coupler. |
gap
|
radius
|
float
|
for the bend and coupler. |
radius
|
bend
|
ComponentSpec
|
90 degrees bend spec. |
'bend_euler'
|
straight
|
ComponentSpec
|
straight spec. |
'straight'
|
cross_section
|
str
|
cross_section spec. |
'strip'
|
cross_section_bend
|
CrossSectionSpec | None
|
cross_section for the bend. Defaults to cross_section. |
None
|
length_extension
|
float
|
length extension for the coupler. |
10
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
crossing_SiN_1550¶
Returns crossing_SiN_1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.crossing_SiN_1550()
c.plot()
crossing_SiN_1550_extended¶
Returns crossing_SiN_1550_extended fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.crossing_SiN_1550_extended()
c.plot()
crossing_horizontal¶
Returns crossing_horizontal fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.crossing_horizontal()
c.plot()
crossing_manhattan¶
Returns crossing_manhattan fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.crossing_manhattan()
c.plot()
die¶
A die.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
tuple[float, float]
|
(440, 470). |
(440, 470)
|
centered
|
bool
|
False. |
False
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.die(size=(440, 470), centered=False)
c.plot()
ebeam_BondPad¶
Returns ebeam_BondPad fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_BondPad()
c.plot()
ebeam_BondPad_75¶
Returns ebeam_BondPad_75 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_BondPad_75()
c.plot()
ebeam_DC_2m1_te895¶
Returns ebeam_DC_2m1_te895 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_DC_2m1_te895()
c.plot()
ebeam_DC_te895¶
Returns ebeam_DC_te895 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_DC_te895()
c.plot()
ebeam_MMI_2x2_5050_te1310¶
Returns ULaval fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_MMI_2x2_5050_te1310()
c.plot()
ebeam_Polarizer_TM_1550_UQAM¶
Returns ebeam_Polarizer_TM_1550_UQAM fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_Polarizer_TM_1550_UQAM()
c.plot()
ebeam_YBranch_895¶
Returns ebeam_YBranch_895 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_YBranch_895()
c.plot()
ebeam_YBranch_te1310¶
Returns ULaval fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_YBranch_te1310()
c.plot()
ebeam_adiabatic_te1550¶
Returns ebeam_adiabatic_te1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_adiabatic_te1550()
c.plot()
ebeam_adiabatic_tm1550¶
Returns ebeam_adiabatic_tm1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_adiabatic_tm1550()
c.plot()
ebeam_bdc_te1550¶
Returns ebeam_bdc_te1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_bdc_te1550()
c.plot()
ebeam_bdc_tm1550¶
Returns ebeam_bdc_tm1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_bdc_tm1550()
c.plot()
ebeam_crossing4¶
Returns ebeam_crossing4 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_crossing4()
c.plot()
ebeam_dream_FAVE_SiN_1310_BB¶
Returns ebeam_dream_FAVE_SiN_1310_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_dream_FAVE_SiN_1310_BB()
c.plot()
ebeam_dream_FAVE_SiN_1550_BB¶
Returns ebeam_dream_FAVE_SiN_1550_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_dream_FAVE_SiN_1550_BB()
c.plot()
ebeam_dream_FAVE_Si_1310_BB¶
Returns ebeam_dream_FAVE_Si_1310_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_dream_FAVE_Si_1310_BB()
c.plot()
ebeam_dream_FAVE_Si_1550_BB¶
Returns ebeam_dream_FAVE_Si_1550_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_dream_FAVE_Si_1550_BB()
c.plot()
ebeam_dream_FaML_SiN_1550_BB¶
Returns ebeam_dream_FaML_SiN_1550_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_dream_FaML_SiN_1550_BB()
c.plot()
ebeam_dream_FaML_Si_1310_BB¶
Returns ebeam_dream_FaML_Si_1310_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_dream_FaML_Si_1310_BB()
c.plot()
ebeam_dream_FaML_Si_1550_BB¶
Returns ebeam_dream_FaML_Si_1550_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_dream_FaML_Si_1550_BB()
c.plot()
ebeam_dream_splitter_1x2_te1550_BB¶
Returns ebeam_dream_splitter_1x2_te1550_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_dream_splitter_1x2_te1550_BB()
c.plot()
ebeam_gc_te1310¶
Returns ebeam_gc_te1310 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_gc_te1310()
c.plot()
ebeam_gc_te1310_broadband¶
Returns ebeam_gc_te1310_broadband fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_gc_te1310_broadband()
c.plot()
ebeam_gc_te1550¶
Returns ebeam_gc_te1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_gc_te1550()
c.plot()
ebeam_gc_te1550_90nmSlab¶
Returns ebeam_gc_te1550_90nmSlab fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_gc_te1550_90nmSlab()
c.plot()
ebeam_gc_te1550_broadband¶
Returns ebeam_gc_te1550_broadband fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_gc_te1550_broadband()
c.plot()
ebeam_gc_te895¶
Returns ebeam_gc_te895 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_gc_te895()
c.plot()
ebeam_gc_tm1550¶
Returns ebeam_gc_tm1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_gc_tm1550()
c.plot()
ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um¶
Returns ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L20um()
c.plot()
ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um¶
Returns ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_routing_taper_te1550_w500nm_to_w3000nm_L40um()
c.plot()
ebeam_sin_dream_splitter1x2_te1550_BB¶
Returns ebeam_sin_dream_splitter1x2_te1550_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_sin_dream_splitter1x2_te1550_BB()
c.plot()
ebeam_splitter_adiabatic_swg_te1550¶
Returns ebeam_splitter_adiabatic_swg_te1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_splitter_adiabatic_swg_te1550()
c.plot()
ebeam_splitter_swg_assist_te1310¶
Returns ebeam_splitter_swg_assist_te1310 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_splitter_swg_assist_te1310()
c.plot()
ebeam_splitter_swg_assist_te1310_ANT¶
Returns ebeam_splitter_swg_assist_te1310_ANT fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_splitter_swg_assist_te1310_ANT()
c.plot()
ebeam_splitter_swg_assist_te1550¶
Returns ebeam_splitter_swg_assist_te1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_splitter_swg_assist_te1550()
c.plot()
ebeam_splitter_swg_assist_te1550_ANT¶
Returns ebeam_splitter_swg_assist_te1550_ANT fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_splitter_swg_assist_te1550_ANT()
c.plot()
ebeam_swg_edgecoupler¶
Returns ebeam_swg_edgecoupler fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_swg_edgecoupler()
c.plot()
ebeam_terminator_SiN_1310¶
Returns ebeam_terminator_SiN_1310 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_terminator_SiN_1310()
c.plot()
ebeam_terminator_SiN_1550¶
Returns ebeam_terminator_SiN_1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_terminator_SiN_1550()
c.plot()
ebeam_terminator_SiN_te895¶
Returns ebeam_terminator_SiN_te895 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_terminator_SiN_te895()
c.plot()
ebeam_terminator_te1310¶
Returns ebeam_terminator_te1310 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_terminator_te1310()
c.plot()
ebeam_terminator_te1550¶
Returns ebeam_terminator_te1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_terminator_te1550()
c.plot()
ebeam_terminator_tm1550¶
Returns ebeam_terminator_tm1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_terminator_tm1550()
c.plot()
ebeam_y_1310¶
Returns ebeam_y_1310 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_y_1310()
c.plot()
ebeam_y_1550¶
Returns ebeam_y_1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_y_1550()
c.plot()
ebeam_y_adiabatic¶
Returns ebeam_y_adiabatic fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_y_adiabatic()
c.plot()
ebeam_y_adiabatic_1310¶
Returns ebeam_y_adiabatic_1310 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_y_adiabatic_1310()
c.plot()
ebeam_y_adiabatic_500pin¶
Returns ebeam_y_adiabatic_500pin fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.ebeam_y_adiabatic_500pin()
c.plot()
grating_coupler_elliptical¶
A grating coupler with curved but parallel teeth.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
wavelength
|
float
|
the center wavelength for which the grating is designed |
1.55
|
grating_line_width
|
the line width of the grating |
0.315
|
|
cross_section
|
a cross section or its name or a function generating a cross section. |
'strip'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.grating_coupler_elliptical(wavelength=1.55, grating_line_width=0.315, cross_section='strip')
c.plot()
metal_via¶
Returns metal_via fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.metal_via()
c.plot()
mmi1x2¶
An mmi1x2.
An mmi1x2 is a splitter that splits a single input to two outputs
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
width
|
float | None
|
the width of the waveguides connecting at the mmi ports. |
None
|
width_taper
|
float
|
the width at the base of the mmi body. |
1.5
|
length_taper
|
float
|
the length of the tapers going towards the mmi body. |
20.0
|
length_mmi
|
float
|
the length of the mmi body. |
31.0
|
width_mmi
|
float
|
the width of the mmi body. |
6.0
|
gap_mmi
|
float
|
the gap between the tapers at the mmi body. |
1.64
|
cross_section
|
CrossSectionSpec
|
a cross section or its name or a function generating a cross section. |
'strip'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
mmi2x2¶
An mmi2x2.
An mmi2x2 is a 2x2 splitter
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
width
|
float | None
|
the width of the waveguides connecting at the mmi ports |
None
|
width_taper
|
float
|
the width at the base of the mmi body |
1.5
|
length_taper
|
float
|
the length of the tapers going towards the mmi body |
20.0
|
length_mmi
|
float
|
the length of the mmi body |
42.5
|
width_mmi
|
float
|
the width of the mmi body |
6.0
|
gap_mmi
|
float
|
the gap between the tapers at the mmi body |
0.5
|
cross_section
|
CrossSectionSpec
|
a cross section or its name or a function generating a cross section. |
'strip'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
mzi¶
Mzi.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
delta_length
|
float
|
bottom arm vertical extra length. |
10
|
bend
|
ComponentSpec
|
90 degrees bend library. |
'bend_euler'
|
straight
|
ComponentSpec
|
straight function. |
'straight'
|
splitter
|
ComponentSpec
|
splitter function. |
'coupler'
|
combiner
|
ComponentSpec | None
|
combiner function. |
None
|
port_e1_splitter
|
str
|
east top splitter port. |
'o3'
|
port_e0_splitter
|
str
|
east bot splitter port. |
'o4'
|
port_e1_combiner
|
str
|
east top combiner port. |
'o3'
|
port_e0_combiner
|
str
|
east bot combiner port. |
'o4'
|
cross_section
|
CrossSectionSpec
|
for routing (sxtop/sxbot to combiner). |
'strip'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
mzi_1x1¶
Mzi.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
delta_length
|
float
|
bottom arm vertical extra length. |
10
|
bend
|
ComponentSpec
|
90 degrees bend library. |
'bend_euler'
|
straight
|
ComponentSpec
|
straight function. |
'straight'
|
splitter
|
ComponentSpec
|
splitter function. |
'ebeam_y_1550'
|
combiner
|
ComponentSpec | None
|
combiner function. |
None
|
port_e1_splitter
|
str
|
east top splitter port. |
'o2'
|
port_e0_splitter
|
str
|
east bot splitter port. |
'o3'
|
port_e1_combiner
|
str
|
east top combiner port. |
'o2'
|
port_e0_combiner
|
str
|
east bot combiner port. |
'o3'
|
cross_section
|
CrossSectionSpec
|
for routing (sxtop/sxbot to combiner). |
'strip'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
mzi_heater¶
Mzi with heater on the bottom arm.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length_x
|
float
|
horizontal length of the top arm (with heater). |
200
|
delta_length
|
float
|
bottom arm vertical extra length. |
10
|
splitter
|
ComponentSpec
|
splitter function. |
'ebeam_y_1550'
|
straight_x_top
|
ComponentSpec
|
straight function for the top arm (with heater). |
'straight_heater_metal'
|
kwargs
|
other arguments for mzi. |
{}
|
mzi_heater_2x2¶
Mzi 2x2 with heater on the top arm.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length_x
|
float
|
horizontal length of the top arm (with heater). |
200
|
delta_length
|
float
|
bottom arm vertical extra length. |
10
|
splitter
|
ComponentSpec
|
splitter function. |
'mmi2x2'
|
combiner
|
ComponentSpec
|
combiner function. |
'mmi2x2'
|
straight_x_top
|
ComponentSpec
|
straight function for the top arm (with heater). |
'straight_heater_metal'
|
kwargs
|
other arguments for mzi. |
{}
|
pack_doe¶
pack_doe_grid¶
pad¶
Returns rectangular pad with ports.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
tuple[float, float]
|
x, y size. |
(90.0, 90.0)
|
layer
|
LayerSpec
|
pad layer. |
'MTOP'
|
bbox_layers
|
list of layers. |
required | |
bbox_offsets
|
Optional offsets for each layer with respect to size. positive grows, negative shrinks the size. |
required | |
port_inclusion
|
float
|
from edge. |
0
|
port_orientation
|
float
|
in degrees. |
0
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
pad_array¶
Returns 2D array of pads.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
pad
|
ComponentSpec
|
pad element. |
'pad'
|
columns
|
int
|
number of columns. |
6
|
rows
|
int
|
number of rows. |
1
|
column_pitch
|
float
|
x pitch. |
125.0
|
row_pitch
|
float
|
y pitch. |
125.0
|
port_orientation
|
AngleInDegrees
|
port orientation in deg. None for low speed DC ports. |
270
|
size
|
Float2 | None
|
pad size. |
None
|
layer
|
LayerSpec | None
|
pad layer. |
None
|
centered_ports
|
bool
|
True add ports to center. False add ports to the edge. |
False
|
auto_rename_ports
|
bool
|
True to auto rename ports. |
False
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
pbs_1550_eskid¶
Returns pbs_1550_eskid fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.pbs_1550_eskid()
c.plot()
photonic_wirebond_surfacetaper_1310¶
Returns photonic_wirebond_surfacetaper_1310 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.photonic_wirebond_surfacetaper_1310()
c.plot()
photonic_wirebond_surfacetaper_1550¶
Returns photonic_wirebond_surfacetaper_1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.photonic_wirebond_surfacetaper_1550()
c.plot()
rectangle¶
Returns a rectangle.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
Size
|
(tuple) Width and height of rectangle. |
(4, 2)
|
layer
|
LayerSpec
|
Specific layer to put polygon geometry on. |
'MTOP'
|
centered
|
bool
|
True sets center to (0, 0), False sets south-west to (0, 0). |
False
|
port_type
|
str | None
|
optical, electrical. |
None
|
port_orientations
|
Ints | None
|
list of port_orientations to add. None adds no ports. |
(180, 90, 0, -90)
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.rectangle(size=(4, 2), layer='MTOP', centered=False, port_orientations=(180, 90, 0, -90))
c.plot()
ring_double¶
Returns a double bus ring.
two couplers (ct: top, cb: bottom) connected with two vertical straights (sl: left, sr: right)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
gap
|
float
|
gap between for coupler. |
gap_strip
|
gap_top
|
float | None
|
gap for the top coupler. Defaults to gap. |
None
|
gap_bot
|
float | None
|
gap for the bottom coupler. Defaults to gap. |
None
|
radius
|
float
|
for the bend and coupler. |
10.0
|
length_x
|
float
|
ring coupler length. |
0.01
|
length_y
|
float
|
vertical straight length. |
0.01
|
bend
|
90 degrees bend spec. |
required | |
straight
|
straight spec. |
required | |
coupler_ring
|
ring coupler spec. |
required | |
coupler_ring_top
|
top ring coupler spec. Defaults to coupler_ring. |
required | |
cross_section
|
CrossSectionSpec
|
cross_section spec. |
'strip'
|
length_extension
|
float
|
straight length extension at the end of the coupler bottom ports. |
10.0
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
ring_double_heater¶
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:
| Name | Type | Description | Default |
|---|---|---|---|
gap
|
float
|
gap between for coupler. |
0.2
|
gap_top
|
float | None
|
gap for the top coupler. Defaults to gap. |
None
|
gap_bot
|
float | None
|
gap for the bottom coupler. Defaults to gap. |
None
|
radius
|
float
|
for the bend and coupler. |
10.0
|
length_x
|
float
|
ring coupler length. |
2.0
|
length_y
|
float
|
vertical straight length. |
0.01
|
coupler_ring
|
ComponentSpec
|
ring coupler spec. |
'coupler_ring'
|
coupler_ring_top
|
ComponentSpec | None
|
ring coupler spec for coupler away from vias (defaults to coupler_ring) |
None
|
straight
|
ComponentSpec
|
straight spec. |
'straight'
|
bend
|
ComponentSpec
|
bend spec. |
'bend_euler'
|
cross_section_heater
|
CrossSectionSpec
|
for heater. |
'heater_metal'
|
cross_section_waveguide_heater
|
CrossSectionSpec
|
for waveguide with heater. |
'strip_heater_metal'
|
cross_section
|
CrossSectionSpec
|
for regular waveguide. |
'strip'
|
via_stack
|
ComponentSpec
|
for heater to routing metal. |
'via_stack_heater_mtop'
|
port_orientation
|
AngleInDegrees | None
|
for electrical ports to promote from via_stack. |
None
|
via_stack_size
|
Float2
|
size of via_stack. |
(4, 4)
|
via_stack_offset
|
Float2
|
x,y offset for via_stack. |
(1, 0)
|
with_drop
|
adds drop ports. |
required | |
length_extension
|
float | None
|
straight length extension at the end of the coupler bottom ports. None defaults to 3.0 + radius. |
None
|
.. code::
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
from ubcpdk.tech import LayerMapUbc
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()
ring_single¶
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:
| Name | Type | Description | Default |
|---|---|---|---|
gap
|
float
|
gap between for coupler. |
gap_strip
|
radius
|
float
|
for the bend and coupler. |
10.0
|
length_x
|
float
|
ring coupler length. |
4.0
|
length_y
|
float
|
vertical straight length. |
0.6
|
cross_section
|
CrossSectionSpec
|
cross_section spec. |
'strip'
|
length_extension
|
float
|
straight length extension at the end of the coupler bottom ports. |
10.0
|
bend
|
ComponentSpec
|
bend type for the ring. Defaults to "bend_euler". |
'bend_euler'
|
p
|
float
|
percentage of the bend that is euler. 1 means full euler, 0 means full circular. |
0
|
.. code::
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
from ubcpdk.tech import LayerMapUbc
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, bend='bend_euler', p=0)
c.plot()
ring_single_heater¶
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:
| Name | Type | Description | Default |
|---|---|---|---|
gap
|
float
|
gap between for coupler. |
0.2
|
gap_top
|
gap for the top coupler. Defaults to gap. |
required | |
gap_bot
|
gap for the bottom coupler. Defaults to gap. |
required | |
radius
|
float
|
for the bend and coupler. |
10.0
|
length_x
|
float
|
ring coupler length. |
2.0
|
length_y
|
float
|
vertical straight length. |
0.01
|
coupler_ring
|
ComponentSpec
|
ring coupler spec. |
'coupler_ring'
|
coupler_ring_top
|
ComponentSpec | None
|
ring coupler spec for coupler away from vias (defaults to coupler_ring) |
None
|
straight
|
ComponentSpec
|
straight spec. |
'straight'
|
bend
|
ComponentSpec
|
bend spec. |
'bend_euler'
|
cross_section_heater
|
CrossSectionSpec
|
for heater. |
'heater_metal'
|
cross_section_waveguide_heater
|
CrossSectionSpec
|
for waveguide with heater. |
'strip_heater_metal'
|
cross_section
|
CrossSectionSpec
|
for regular waveguide. |
'strip'
|
via_stack
|
ComponentSpec
|
for heater to routing metal. |
'via_stack_heater_mtop'
|
port_orientation
|
AngleInDegrees | None
|
for electrical ports to promote from via_stack. |
None
|
via_stack_size
|
Float2
|
size of via_stack. |
(4, 4)
|
via_stack_offset
|
Float2
|
x,y offset for via_stack. |
(1, 0)
|
with_drop
|
adds drop ports. |
required | |
length_extension
|
float | None
|
straight length extension at the end of the coupler bottom ports. None defaults to 3.0 + radius. |
None
|
.. code::
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
from ubcpdk.tech import LayerMapUbc
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()
siepic_o_gc_te1270_BB¶
Returns siepic_o_gc_te1270_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.siepic_o_gc_te1270_BB()
c.plot()
siepic_o_pwbstlas_si_BB¶
Returns siepic_o_pwbstlas_si_BB fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.siepic_o_pwbstlas_si_BB()
c.plot()
spiral¶
Returns a spiral double (spiral in, and then out).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
length of the spiral straight section. |
100
|
cross_section
|
CrossSectionSpec
|
cross_section component. |
'strip'
|
spacing
|
float
|
spacing between the spiral loops. |
3
|
n_loops
|
int
|
number of loops. |
6
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.spiral(length=100, cross_section='strip', spacing=3, n_loops=6)
c.plot()
spiral_racetrack¶
Returns Racetrack-Spiral.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
min_radius
|
float | None
|
smallest radius in um. |
None
|
straight_length
|
float
|
length of the straight segments in um. |
20.0
|
spacings
|
Floats
|
space between the center of neighboring waveguides in um. |
(2, 2, 3, 3, 2, 2)
|
straight
|
ComponentSpec
|
factory to generate the straight segments. |
'straight'
|
bend
|
ComponentSpec
|
factory to generate the bend segments. |
'bend_euler'
|
bend_s
|
ComponentSpec
|
factory to generate the s-bend segments. |
'bend_s'
|
cross_section
|
CrossSectionSpec
|
cross-section of the waveguides. |
'strip'
|
cross_section_s
|
CrossSectionSpec | None
|
cross-section of the s bend waveguide (optional). |
None
|
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. |
False
|
allow_min_radius_violation
|
bool
|
if True, will allow the s-bend to have a smaller radius than the minimum radius. |
False
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
spiral_racetrack_heater¶
Returns spiral racetrack with a heater above.
based on https://doi.org/10.1364/OL.400230 .
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
spacing
|
float
|
center to center spacing between the waveguides. |
4.0
|
num
|
int
|
number of spiral loops. |
8
|
straight_length
|
float
|
length of the straight segments. |
100
|
cross_section
|
CrossSectionSpec
|
cross_section. |
'strip'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.spiral_racetrack_heater(spacing=4.0, num=8, straight_length=100, cross_section='strip')
c.plot()
straight¶
Returns a Straight waveguide.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
straight length (um). |
10
|
cross_section
|
CrossSectionSpec
|
specification (CrossSection, string or dict). |
'strip'
|
width
|
float | None
|
width of the waveguide. If None, it will use the width of the cross_section. |
None
|
npoints
|
int
|
number of points. |
2
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.straight(length=10, cross_section='strip', npoints=2)
c.plot()
straight_heater_meander¶
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:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
phase shifter length. |
320.0
|
heater_width
|
float
|
width of the heater. |
2.5
|
spacing
|
float
|
waveguide spacing (center to center). |
2
|
cross_section
|
CrossSectionSpec
|
for waveguide. |
'strip'
|
layer_heater
|
LayerSpec
|
for top heater, if None, it does not add a heater. |
'M1_HEATER'
|
via_stack
|
ComponentSpec | None
|
for the heater to via_stack metal. |
'via_stack_heater_mtop'
|
n
|
int | None
|
number of meanders. |
3
|
port_orientation1
|
float | None
|
orientation of the first port. None for all orientations. |
None
|
port_orientation2
|
float | None
|
orientation of the second port. None for all orientations. |
None
|
radius
|
float | None
|
radius of the meander. |
None
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
straight_heater_metal¶
Returns a thermal phase shifter.
dimensions from https://doi.org/10.1364/OE.27.010456
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
phase shifter length. |
320.0
|
length_undercut_spacing
|
float
|
spacing between the waveguide and the undercut. |
6.0
|
length_undercut
|
float
|
undercut length. |
30.0
|
length_straight
|
float
|
straight length. |
0.1
|
length_straight_input
|
float
|
straight length input. |
15.0
|
with_undercut
|
bool
|
isolation trenches for higher efficiency. |
False
|
port_orientation1
|
int | None
|
orientation of the first port. None for all orientations. |
None
|
port_orientation2
|
int | None
|
orientation of the second port. None for all orientations. |
None
|
cross_section
|
CrossSectionSpec
|
for waveguide. |
'strip'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
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()
straight_metal¶
Returns a Straight waveguide.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
straight length (um). |
10
|
cross_section
|
CrossSectionSpec
|
specification (CrossSection, string or dict). |
'metal_routing'
|
width
|
float | None
|
width of the waveguide. If None, it will use the width of the cross_section. |
None
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.straight_metal(length=10, cross_section='metal_routing')
c.plot()
taper¶
Linear taper, which tapers only the main cross section section.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
taper length. |
10.0
|
width1
|
float
|
width of the west/left port. |
width
|
width2
|
float | None
|
width of the east/right port. Defaults to width1. |
None
|
cross_section
|
CrossSectionSpec
|
specification (CrossSection, string, CrossSectionFactory dict). |
'strip'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.taper(length=10.0, width1=0.5, cross_section='strip')
c.plot()
taper_SiN_750_3000¶
Returns taper_SiN_750_3000 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.taper_SiN_750_3000()
c.plot()
taper_metal¶
Linear taper, which tapers only the main cross section section.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
length
|
float
|
taper length. |
10.0
|
width1
|
float
|
width of the west/left port. |
width_metal
|
width2
|
float | None
|
width of the east/right port. Defaults to width1. |
None
|
cross_section
|
CrossSectionSpec
|
specification (CrossSection, string, CrossSectionFactory dict). |
'metal_routing'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.taper_metal(length=10.0, width1=1.5, cross_section='metal_routing')
c.plot()
taper_si_simm_1310¶
Returns taper_si_simm_1310 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.taper_si_simm_1310()
c.plot()
taper_si_simm_1550¶
Returns taper_si_simm_1550 fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.taper_si_simm_1550()
c.plot()
text_rectangular¶
Pixel based font, guaranteed to be manhattan, without acute angles.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text
|
str
|
string. |
'abc'
|
size
|
float
|
pixel size. |
3
|
justify
|
str
|
left, right or center. |
'left'
|
layer
|
LayerSpec
|
for text. |
'M2_ROUTER'
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.text_rectangular(text='abc', size=3, justify='left', layer='M2_ROUTER')
c.plot()
text_rectangular_multi_layer¶
Returns rectangular text in different layers.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text
|
str
|
string of text. |
'abc'
|
layers
|
LayerSpecs
|
list of layers to replicate the text. |
('WG', 'M2_ROUTER')
|
text_factory
|
ComponentSpec
|
function to create the text Components. |
'text_rectangular'
|
kwargs
|
Any
|
keyword arguments for text_factory. |
{}
|
thermal_phase_shifter_multimode_¶
Returns thermal_phase_shifters fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.thermal_phase_shifter_multimode_()
c.plot()
thermal_phase_shifter_te_1310_¶
Returns thermal_phase_shifters fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.thermal_phase_shifter_te_1310_()
c.plot()
thermal_phase_shifter_te_1310_50¶
Returns thermal_phase_shifters fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.thermal_phase_shifter_te_1310_50()
c.plot()
thermal_phase_shifter_te_1550_50¶
Returns thermal_phase_shifters fixed cell.
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.thermal_phase_shifter_te_1550_50()
c.plot()
via_stack_heater_mtop¶
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:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
Size
|
of the layers. |
(20.0, 10.0)
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.via_stack_heater_mtop(size=(20.0, 10.0))
c.plot()
wire_corner¶
Returns 45 degrees electrical corner wire.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cross_section
|
CrossSectionSpec
|
spec. |
'metal_routing'
|
width
|
float | None
|
optional width. Defaults to cross_section width. |
None
|
radius
|
float | None
|
ignored. |
None
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.wire_corner(cross_section='metal_routing')
c.plot()
wire_corner45¶
Returns 90 degrees electrical corner wire.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cross_section
|
CrossSectionSpec
|
spec. |
'metal_routing'
|
radius
|
float
|
ignored. |
10
|
width
|
float | None
|
optional width. Defaults to cross_section width. |
None
|
layer
|
LayerSpec | None
|
ignored. |
None
|
with_corner90_ports
|
bool
|
if True, adds ports at 90 degrees. |
True
|
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc
PDK.activate()
c = cells.wire_corner45(cross_section='metal_routing', radius=10, with_corner90_ports=True)
c.plot()
wire_corner45_straight¶
Returns 90 degrees electrical corner wire.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
width
|
float | None
|
of the wire. |
width_metal
|
radius
|
float | None
|
of the corner. Defaults to width. |
width_metal
|
cross_section
|
CrossSectionSpec
|
metal_routing. |
'metal_routing'
|