Source code for qpdk.cells.launcher
"""Launcher component for RF applications.
This module provides a launcher component for RF wirebonding and probe testing.
The launcher consists of a straight section connected to a tapered section,
transitioning from a large cross-section suitable for probing to a smaller
cross-section for circuit integration.
"""
from __future__ import annotations
from functools import partial
import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.components import straight
from gdsfactory.typings import CrossSectionSpec
from qpdk.cells.waveguides import taper_cross_section
from qpdk.tech import LAYER, coplanar_waveguide, launcher_cross_section_big
LAUNCHER_CROSS_SECTION_BIG = launcher_cross_section_big
LAUNCHER_CROSS_SECTION_SMALL = partial(coplanar_waveguide, etch_layer=LAYER.M1_ETCH)
[docs]
@gf.cell
def launcher(
straight_length: float = 200.0,
taper_length: float = 100.0,
cross_section_big: CrossSectionSpec = LAUNCHER_CROSS_SECTION_BIG,
cross_section_small: CrossSectionSpec = "cpw",
) -> Component:
"""Generate an RF launcher pad for wirebonding or probe testing.
Creates a launcher component consisting of a straight section with large
cross-section connected to a tapered transition down to a smaller cross-section.
This design facilitates RF signal access through probes or wirebonds while
maintaining good impedance matching.
The default dimensions are taken from :cite:`tuokkolaMethodsAchieveNearmillisecond2025`.
Args:
straight_length: Length of the straight, wirebond landing area, section in µm.
taper_length: Length of the taper section in µm.
cross_section_big: Cross-section specification for the large end
of the launcher (probe/wirebond interface).
cross_section_small: Cross-section specification for the small end
of the launcher (circuit interface).
Returns:
Component: A gdsfactory component containing the complete launcher
geometry with one output port ("o1") at the small end.
"""
c = Component()
# Add the straight section (large cross-section for probe access)
straight_ref = c << straight(
length=straight_length, cross_section=cross_section_big
)
# Add the tapered transition section
taper_ref = c << taper_cross_section(
length=taper_length,
cross_section1=cross_section_big,
cross_section2=cross_section_small,
linear=True,
)
# Connect the taper to the straight section
taper_ref.connect("o1", straight_ref.ports["o2"])
# Add output port at the small end for circuit connection
c.add_port(port=taper_ref.ports["o2"], name="o1", cross_section=cross_section_small)
# Add a port at the large end for reference and simulation purposes
c.add_port(
port=straight_ref.ports["o1"],
name="waveport",
cross_section=cross_section_big,
)
return c
if __name__ == "__main__":
# Example usage and testing
from qpdk import PDK
PDK.activate()
# Create and display a launcher with default parameters
c = launcher()
c.show()