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

13 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-14 10:27 +0000

1"""Chip-related finishing touches.""" 

2 

3import gdsfactory as gf 

4from gdsfactory.typings import LayerSpec 

5 

6from qpdk.cells.waveguides import rectangle 

7from qpdk.helper import show_components 

8 

9 

10@gf.cell 

11def chip_edge( 

12 size: tuple[float, float] = (10000.0, 10000.0), 

13 width: float = 200.0, 

14 layer: LayerSpec = "M1_ETCH", 

15) -> gf.Component: 

16 """Returns a chip edge component with hollow rectangle frame. 

17 

18 Creates a rectangular frame (hollow rectangle) on an etched metal layer, 

19 typically used to define chip edge regions for proper fabrication. 

20 

21 Args: 

22 size: (tuple) Width and height of the chip edge area. 

23 width: Width/thickness of the etched frame border. 

24 layer: Layer to put the etched frame on. 

25 """ 

26 c = gf.Component() 

27 

28 # Create the hollow rectangle frame using four rectangles 

29 rect_configs = [ 

30 {"size": (size[0], width), "position": (0, size[1] - width)}, # Top edge 

31 {"size": (size[0], width), "position": (0, 0)}, # Bottom edge 

32 {"size": (width, size[1]), "position": (0, 0)}, # Left edge 

33 {"size": (width, size[1]), "position": (size[0] - width, 0)}, # Right edge 

34 ] 

35 

36 common_params = { 

37 "layer": layer, 

38 "centered": False, 

39 "port_type": None, 

40 } 

41 

42 for config in rect_configs: 

43 rect = c << rectangle(size=config["size"], **common_params) 

44 rect.move(config["position"]) 

45 

46 return c 

47 

48 

49if __name__ == "__main__": 

50 show_components( 

51 chip_edge, 

52 spacing=50, 

53 )