Coverage for qpdk / cells / launcher.py: 100%
19 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-02 17:50 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-02 17:50 +0000
1"""Launcher component for RF applications.
3This module provides a launcher component for RF wirebonding and probe testing.
4The launcher consists of a straight section connected to a tapered section,
5transitioning from a large cross-section suitable for probing to a smaller
6cross-section for circuit integration.
7"""
9from __future__ import annotations
11from functools import partial
13import gdsfactory as gf
14from gdsfactory.component import Component
15from gdsfactory.components import straight
16from gdsfactory.typings import CrossSectionSpec
18from qpdk.cells.waveguides import taper_cross_section
19from qpdk.tech import LAYER, coplanar_waveguide, launcher_cross_section_big
21LAUNCHER_CROSS_SECTION_BIG = launcher_cross_section_big
22LAUNCHER_CROSS_SECTION_SMALL = partial(coplanar_waveguide, etch_layer=LAYER.M1_ETCH)
25@gf.cell(
26 tags=(
27 "waveguides",
28 "interconnects",
29 )
30)
31def launcher(
32 straight_length: float = 200.0,
33 taper_length: float = 100.0,
34 cross_section_big: CrossSectionSpec = LAUNCHER_CROSS_SECTION_BIG,
35 cross_section_small: CrossSectionSpec = "cpw",
36) -> Component:
37 r"""Generate an RF launcher pad for wirebonding or probe testing.
39 Creates a launcher component consisting of a straight section with large
40 cross-section connected to a tapered transition down to a smaller cross-section.
41 This design facilitates RF signal access through probes or wirebonds while
42 maintaining good impedance matching.
44 .. svgbob::
46 ┌───────\
47 │ \
48 │ │ ── o1
49 │ /
50 └───────/
52 The default dimensions are taken from :cite:`tuokkolaMethodsAchieveNearmillisecond2025`.
54 Args:
55 straight_length: Length of the straight, wirebond landing area, section in µm.
56 taper_length: Length of the taper section in µm.
57 cross_section_big: Cross-section specification for the large end
58 of the launcher (probe/wirebond interface).
59 cross_section_small: Cross-section specification for the small end
60 of the launcher (circuit interface).
62 Returns:
63 Component: A gdsfactory component containing the complete launcher
64 geometry with one output port ("o1") at the small end.
65 """
66 c = Component()
68 # Add the straight section (large cross-section for probe access)
69 straight_ref = c << straight(
70 length=straight_length, cross_section=cross_section_big
71 )
73 # Add the tapered transition section
74 taper_ref = c << taper_cross_section(
75 length=taper_length,
76 cross_section1=cross_section_big,
77 cross_section2=cross_section_small,
78 linear=True,
79 )
81 # Connect the taper to the straight section
82 taper_ref.connect("o1", straight_ref.ports["o2"])
84 # Add output port at the small end for circuit connection
85 c.add_port(port=taper_ref.ports["o2"], name="o1", cross_section=cross_section_small)
87 # Add a port at the large end for reference and simulation purposes
88 c.add_port(
89 port=straight_ref.ports["o1"],
90 name="waveport",
91 cross_section=cross_section_big,
92 )
94 return c
97if __name__ == "__main__":
98 # Example usage and testing
99 from qpdk import PDK
101 PDK.activate()
103 # Create and display a launcher with default parameters
104 c = launcher()
105 c.show()