Skip to content

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'
from ubcpdk import PDK, cells
from ubcpdk.tech import LayerMapUbc

PDK.activate()

c = cells.wire_corner45_straight(width=1.5, radius=1.5, cross_section='metal_routing')
c.plot()