Spiral waveguide

SiFab contains three spirals:

FixedPortWithLengthSpiral

This class allows to connect two ports with a fixed position (input_port and output_port) using a spiral. The total port-to-port spiral length (total_length) and the number of loops (n_o_loops) can be fully controlled by the user. Alternatively to using two ports with fixed position, the user can specify

  • a fixed input port (input_port) and the distance between the ports (ports_distance), or

  • the distance between the ports (ports_distance) without specifying any port. In this case, input_port is placed at the origin.

By default, the spiral is drawn starting 100 um from the input port (along the vector connecting the input and the output ports), however this can be adapted by changing the value of offset_spiral_start. If a layout with the given property values cannot be generated, an exception is raised with suggestions on how to meet the layout specifications.

Reference

Click on the name of the component below to see the complete PCell reference.

si_fab.all.FixedPortWithLengthSpiral

Spiral with fixed position for the ports or a fixed length.

Example

from si_fab import all as pdk
from ipkiss3 import all as i3

p1 = i3.OpticalPort(
    name="in",
    position=(0.0, 0.0),
    angle_deg=0.0,
    trace_template=pdk.SiWireWaveguideTemplate(),
)
p2 = i3.OpticalPort(
    name="out",
    position=(400.0, 0.0),
    angle_deg=180.0,
    trace_template=pdk.SiWireWaveguideTemplate(),
)

sp = pdk.FixedPortWithLengthSpiral(
    input_port=p1,
    output_port=p2,
    total_length=5000.0,
    n_o_loops=5,
)
sp_lv = sp.Layout()
sp_lv.visualize(annotate=True)
../../../../../../../../_images/example_fixed_port_with_length_spiral.png

DoubleSpiralFixedBend

This class is used to create a double spiral with a fixed bend cell that can be re-used for each bend of the spiral. This bend cell that is provided can be defined by the user. The user can also provide the trace template for the straight sections, the length of the tapers and the minimum length of the straight sections both between and before the tapers. Otherwise, this PCell works identically to the DoubleSpiral class from Picazzo.

Reference

Click on the name of the component below to see the complete PCell reference.

si_fab.all.DoubleSpiralFixedBend

Parameters:

Example

from si_fab import all as pdk
from ipkiss3 import all as i3

trace_template = pdk.SiWireWaveguideTemplate()
trace_template.Layout(core_width=0.5, cladding_width=6.0)

bend = pdk.WaveguideBend(trace_template=trace_template)
bend.Layout(bend_size=5.0, bend_radius=5.0, rounding_algorithm=i3.ShapeRound)

spiral = pdk.DoubleSpiralFixedBend(bend=bend, n_o_loops=5)
spiral_lo = spiral.Layout()
spiral_lo.visualize()
../../../../../../../../_images/example_double_spiral_fixed_bend.png

DoubleSpiralWithInCouplingFixedBend

This class is used to create a double spiral with a fixed bend cell that can be re-used for each bend of the spiral. This bend cell that is provided can be defined by the user. The user can also provide the trace template for the straight sections, the length of the tapers and the minimum length of the straight sections both between and before the tapers. Otherwise, this PCell works identically to the DoubleSpiralWithInCoupling class from Picazzo.

Reference

Click on the name of the component below to see the complete PCell reference.

si_fab.all.DoubleSpiralWithInCouplingFixedBend

Parameters:

Example

from si_fab import all as pdk
from ipkiss3 import all as i3

trace_template = pdk.SiWireWaveguideTemplate()
trace_template.Layout(core_width=0.5, cladding_width=6.0)

bend = pdk.WaveguideBend(trace_template=trace_template)
bend.Layout(bend_size=5.0, bend_radius=5.0, rounding_algorithm=i3.SplineRoundingAlgorithm())

spiral = pdk.DoubleSpiralWithInCouplingFixedBend(bend=bend, n_o_loops=5)
spiral_lo = spiral.Layout()
spiral_lo.visualize()
../../../../../../../../_images/example_double_spiral_with_in_coupling_fixed_bend.png

FixedLengthSpiralFixedBend

This class is used to create a double spiral with a fixed length and a fixed bend cell that can be re-used for each bend of the spiral. This bend cell that is provided can be defined by the user. The user can also provide the trace template for the straight sections, the length of the tapers and the minimum length of the straight sections both between and before the tapers. Otherwise, this PCell works identically to the FixedLengthSpiral class from Picazzo.

Reference

Click on the name of the component below to see the complete PCell reference.

si_fab.all.FixedLengthSpiralFixedBend

Parameters:

Example

from si_fab import all as pdk


bend = pdk.EulerFixedBend()

spiral = pdk.FixedLengthSpiralFixedBend(bend=bend, total_length=4000, n_o_loops=4)
spiral_lo = spiral.Layout(
    incoupling_length=10.0,
    spacing=7,
    stub_direction="V",  # either H or V
    growth_direction="V",
)
spiral_lo.visualize()
../../../../../../../../_images/example_fixed_length_spiral_fixed_bend.png