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
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-14 10:27 +0000
1"""Chip-related finishing touches."""
3import gdsfactory as gf
4from gdsfactory.typings import LayerSpec
6from qpdk.cells.waveguides import rectangle
7from qpdk.helper import show_components
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.
18 Creates a rectangular frame (hollow rectangle) on an etched metal layer,
19 typically used to define chip edge regions for proper fabrication.
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()
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 ]
36 common_params = {
37 "layer": layer,
38 "centered": False,
39 "port_type": None,
40 }
42 for config in rect_configs:
43 rect = c << rectangle(size=config["size"], **common_params)
44 rect.move(config["position"])
46 return c
49if __name__ == "__main__":
50 show_components(
51 chip_edge,
52 spacing=50,
53 )