Coverage for qpdk / cells / launcher.py: 100%

19 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-14 10:27 +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 

26def launcher( 

27 straight_length: float = 200.0, 

28 taper_length: float = 100.0, 

29 cross_section_big: CrossSectionSpec = LAUNCHER_CROSS_SECTION_BIG, 

30 cross_section_small: CrossSectionSpec = "cpw", 

31) -> Component: 

32 """Generate an RF launcher pad for wirebonding or probe testing. 

33 

34 Creates a launcher component consisting of a straight section with large 

35 cross-section connected to a tapered transition down to a smaller cross-section. 

36 This design facilitates RF signal access through probes or wirebonds while 

37 maintaining good impedance matching. 

38 

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

40 

41 Args: 

42 straight_length: Length of the straight, wirebond landing area, section in µm. 

43 taper_length: Length of the taper section in µm. 

44 cross_section_big: Cross-section specification for the large end 

45 of the launcher (probe/wirebond interface). 

46 cross_section_small: Cross-section specification for the small end 

47 of the launcher (circuit interface). 

48 

49 Returns: 

50 Component: A gdsfactory component containing the complete launcher 

51 geometry with one output port ("o1") at the small end. 

52 """ 

53 c = Component() 

54 

55 # Add the straight section (large cross-section for probe access) 

56 straight_ref = c << straight( 

57 length=straight_length, cross_section=cross_section_big 

58 ) 

59 

60 # Add the tapered transition section 

61 taper_ref = c << taper_cross_section( 

62 length=taper_length, 

63 cross_section1=cross_section_big, 

64 cross_section2=cross_section_small, 

65 linear=True, 

66 ) 

67 

68 # Connect the taper to the straight section 

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

70 

71 # Add output port at the small end for circuit connection 

72 c.add_port(port=taper_ref.ports["o2"], name="o1", cross_section=cross_section_small) 

73 

74 # Add a port at the large end for reference and simulation purposes 

75 c.add_port( 

76 port=straight_ref.ports["o1"], 

77 name="waveport", 

78 cross_section=cross_section_big, 

79 ) 

80 

81 return c 

82 

83 

84if __name__ == "__main__": 

85 # Example usage and testing 

86 from qpdk import PDK 

87 

88 PDK.activate() 

89 

90 # Create and display a launcher with default parameters 

91 c = launcher() 

92 c.show()