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

1"""Launcher component for RF applications. 

2 

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""" 

8 

9from __future__ import annotations 

10 

11from functools import partial 

12 

13import gdsfactory as gf 

14from gdsfactory.component import Component 

15from gdsfactory.components import straight 

16from gdsfactory.typings import CrossSectionSpec 

17 

18from qpdk.cells.waveguides import taper_cross_section 

19from qpdk.tech import LAYER, coplanar_waveguide, launcher_cross_section_big 

20 

21LAUNCHER_CROSS_SECTION_BIG = launcher_cross_section_big 

22LAUNCHER_CROSS_SECTION_SMALL = partial(coplanar_waveguide, etch_layer=LAYER.M1_ETCH) 

23 

24 

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. 

38 

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. 

43 

44 .. svgbob:: 

45 

46 ┌───────\ 

47 │ \ 

48 │ │ ── o1 

49 │ / 

50 └───────/ 

51 

52 The default dimensions are taken from :cite:`tuokkolaMethodsAchieveNearmillisecond2025`. 

53 

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). 

61 

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() 

67 

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 ) 

72 

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 ) 

80 

81 # Connect the taper to the straight section 

82 taper_ref.connect("o1", straight_ref.ports["o2"]) 

83 

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) 

86 

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 ) 

93 

94 return c 

95 

96 

97if __name__ == "__main__": 

98 # Example usage and testing 

99 from qpdk import PDK 

100 

101 PDK.activate() 

102 

103 # Create and display a launcher with default parameters 

104 c = launcher() 

105 c.show()