Skip to content

IHP 130nm Tech Narrowband 160 GHz LNA Factory

This notebook contains the parametrized cell-like factories for the generation of a 4-stage 160GHz narrowband (27 GHz) RF LNA.

The PCell is generated for a single stage, including parametric decoupling and matching RF MIM capacitors, parametric inductance stubs controlled through their length for biasing the decoupled nodes, parametric NPN BJT transistors and biasing resistors. For multiple stage approach, it is required to generate each stage and cascade them.

from pathlib import Path

import gdsfactory as gf
from gdsfactory import Component
from gdsfactory.typings import LayerSpec
from ihp import PDK, cells
from ihp.cells import rfcmim
PDK.activate()
@gf.cell
def lna_160g_stage(
    npn_emitter_width: float = 0.07,
    npn_emitter_length: float = 0.9,
    m: int = 4,
    rows: int = 16,
    rfcmim_width: float = 14.28,
    rfcmim_length: float = 9.28,
    rfcmim_width2: float = 3.0,
    rfcmim_length2: float = 31.0,
    ymax_ref: float | None = None,
    emitter_stub_length: float = 94.66,
    output_stub_length: float = 71.0,
    bias_con_length: float = 30.0,
    layer_metal1draw: LayerSpec = "Metal1drawing",
    layer_metal2pin: LayerSpec = "Metal2pin",
    layer_metal2draw: LayerSpec = "Metal2drawing",
    layer_metal2label: LayerSpec = "Metal2label",
    layer_metal5draw: LayerSpec = "Metal5drawing",
    layer_metal5pin: LayerSpec = "Metal5pin",
    layer_topmetal1draw: LayerSpec = "TopMetal1drawing",
    layer_topmetal1pin: LayerSpec = "TopMetal1pin",
    layer_topmetal1label: LayerSpec = "TopMetal1label",
    layer_topmetal2draw: LayerSpec = "TopMetal2drawing",
    layer_topmetal2pin: LayerSpec = "TopMetal2pin",
    layer_topmetal2label: LayerSpec = "TopMetal2label",
    model="rflna_stage",
) -> Component:
    """
    Generates the layout for a single stage of a 160 GHz Low Noise Amplifier (LNA).

    The stage includes input/output matching capacitors (RF MIM), a Bi-Polar
    Junction Transistor (BJT) amplifier (NPN), biasing resistors (Rhigh/Rsil),
    and associated passive routing structures (stubs, tapers, vias).

    The layout is constructed by placing, rotating, and aligning component references,
    followed by adding detailed routing, tapers, pins, and ports.



    Args:
        npn_emitter_width: Width of the NPN emitter finger (microns).
        npn_emitter_length: Length of the NPN emitter finger (microns).
        m: Multiplier for the NPN transistor (number of fingers/devices).
        rows: Number of rows used for the via stacks connecting to the active device.
        rfcmim_width: Width of the input MIM capacitor.
        rfcmim_length: Length of the input MIM capacitor.
        rfcmim_width2: Width of the output MIM capacitor.
        rfcmim_length2: Length of the output MIM capacitor.
        ymax_ref: Optional vertical reference coordinate (ymax) for the Rhigh resistor.
            If None, defaults to the ymax of the input RF MIM.
        emitter_stub_length: Length of the grounded emitter matching stub.
        output_stub_length: Length of the grounded output matching stub.
        bias_con_length: Length offset for the VBB bias connection rectangle.

        # --- Layer Arguments ---
        layer_metal1draw (LayerSpec): Layer for Metal1 drawing.
        layer_metal2pin (LayerSpec): Layer for Metal2 pin definition (e.g., VBB).
        layer_metal2draw (LayerSpec): Drawing layer for general routing on Metal 2.
        layer_metal2label (LayerSpec): Text label layer associated with Metal 2 features.
        layer_metal5draw (LayerSpec): Drawing layer for general routing and shapes on Metal 5.
        layer_metal5pin (LayerSpec): Definition of a contact/port on Metal 5.
        layer_topmetal1draw (LayerSpec): Drawing layer for the first upper metal level (e.g., RF matching).
        layer_topmetal1pin (LayerSpec): Definition of a contact/port on Top Metal 1 (e.g., RFIN/RFOUT pins).
        layer_topmetal1label (LayerSpec): Text label layer associated with Top Metal 1 features.
        layer_topmetal2draw (LayerSpec): Drawing layer for the second upper metal level (e.g., power/ground stubs).
        layer_topmetal2pin (LayerSpec): Definition of a contact/port on Top Metal 2 (e.g., VCC/GND pins).
        layer_topmetal2label (LayerSpec): Text label layer associated with Top Metal 2 features.

        model (str): The name assigned to the component's info dictionary for simulation/modeling.

    Returns:
        Component: A GDSFactory Component containing the complete LNA stage layout.

    Raises:
        ImportError: If required cells (rfcmim, npn13G2, via_stack, etc.) are not available.
    """
    c = Component()

    # ----------------------------------------------------------------
    # 1. LOCAL CONSTANTS (Replacing Magic Numbers)
    # ----------------------------------------------------------------

    # Spacing and Positioning
    # NPN_SPACING = 0.6
    # NPN_Y_OFFSET = 5.0
    # RSIL_Y_OFFSET = 1.7
    # VBB_PAD_SIZE = 5.0
    # VBB_X_OFFSET = 5.0

    # Component Dimensions
    # RHIGH_DY = 6.0
    # RHIGH_DX = 1.9
    # RSIL_DX = 7.5
    # RSIL_DY = 5.0
    # GND_STUB_WIDTH = 15.0
    # GND_STUB_HEIGHT = 3.9
    # STUB_WIDTH = 3.0
    # OUT_STUB_WIDTH = 9.0

    # Via Configuration
    # VIA2_VBB_COLS = 5
    # VIA_RHIGH_P2_COLS = 4
    # NPN_TERM_VIA_COLS = 3
    # NPN_COL_X_OFFSET = 0.645

    # Routing and Taper Dimensions
    # COL_RSIL_Y_OFFSET = 2.0
    # OUT_STUB_STAGE_W1 = 4.0
    # TAPER_LENGTH_SHORT = 3.0

    rfmim1 = c.add_ref(rfcmim(width=rfcmim_width, length=rfcmim_length))
    rhigh1 = c.add_ref(cells.resistors.rhigh(dy=6.0, dx=1.9, model="rhigh"))
    rhigh1.xmin = rfmim1.xmax + 0.6
    rhigh1.ymax = rfmim1.ymax if ymax_ref is None else ymax_ref
    rfnpn1 = c.add_ref(
        cells.npn13G2(
            emitter_width=npn_emitter_width, emitter_length=npn_emitter_length, Nx=m
        )
    )

    rfnpn1.rotate(-90)
    rfnpn1.xmin = rfmim1.xmax + 0.6
    rfnpn1.ymax = rhigh1.ymin - 5.0
    # rfnpn1.ymin = rfmim1.ymin + 1.0

    rsil1 = c.add_ref(cells.resistors.rsil(dx=7.5, dy=5.0))
    rsil1.ymin = rhigh1.ymin + 1.7
    rsil1.xmin = rhigh1.xmax + 0.6
    rfcmim2 = c.add_ref(rfcmim(width=rfcmim_width2, length=rfcmim_length2))
    rfcmim2.xmin = rsil1.xmax + 0.6
    rfcmim2.y = rfmim1.y

    # add biasing from stage to exterior
    vbb = c.add_ref(gf.components.rectangle(size=(5.0, 5.0), layer=layer_metal2pin))
    vbb.xmin = rfmim1.xmin - 5.0
    vbb.ymin = rhigh1.ymax + bias_con_length
    vbb_port = c.add_port(
        name="VBB",
        center=(vbb.x, vbb.y),
        width=5.0,
        orientation=-90,
        layer=layer_metal2pin,
    )
    via2acc_vbb1 = c.add_ref(
        cells.via_stack(
            bottom_layer="Metal1", top_layer="Metal2", vn_columns=5, vn_rows=1
        )
    )
    via2acc_vbb1.x = rhigh1.ports["P1"].center[0]
    via2acc_vbb1.ymin = rhigh1.ports["P1"].center[1]
    via_rhigh_p2 = c.add_ref(
        cells.via_stack(
            bottom_layer="Metal1", top_layer="Metal5", vn_columns=4, vn_rows=1
        )
    )
    via_rhigh_p2.x = rhigh1.ports["P2"].center[0]
    via_rhigh_p2.ymax = rhigh1.ports["P2"].center[1]
    via_rsil_p1 = c.add_ref(
        cells.via_stack(
            bottom_layer="Metal1",
            top_layer="TopMetal2",
            vn_columns=16,
            vn_rows=4,
            vt1_columns=9,
            vt1_rows=2,
            vt2_columns=4,
        )
    )
    via_rsil_p1.x = rsil1.ports["P1"].center[0]
    via_rsil_p1.ymin = rsil1.ports["P1"].center[1] - 0.26
    via_rsil_p2 = c.add_ref(
        cells.via_stack(
            bottom_layer="Metal1",
            top_layer="TopMetal1",
            vn_columns=16,
            vn_rows=4,
            vt1_columns=9,
            vt1_rows=2,
        )
    )
    via_rsil_p2.x = rsil1.ports["P2"].center[0]
    via_rsil_p2.ymax = rsil1.ports["P2"].center[1] + 0.2
    route_bias_rhigh = c.add_ref(
        gf.components.shapes.L(
            width=5.0,
            size=(rhigh1.xmin - vbb.xmin, vbb.ymax - via2acc_vbb1.ymax - 2.0),
            layer=layer_metal2draw,
            port_type="electrical",
        )
    )
    route_bias_rhigh.xmin = vbb.xmin
    route_bias_rhigh.ymax = vbb.ymax

    # add grounded stub to emmiter
    via_emiter_gndstub = c.add_ref(
        cells.via_stack(
            top_layer="Metal5",
            bottom_layer="Metal2",
            vn_columns=3,
            vn_rows=rows,
        )
    )
    via_emiter_gndstub.x = rfnpn1.ports["E"].center[0]
    via_emiter_gndstub.y = rfnpn1.ports["E"].center[1]

    via_base_in = c.add_ref(
        cells.via_stack(
            top_layer="Metal5",
            bottom_layer="Metal1",
            vn_columns=3,
            vn_rows=rows,
        )
    )
    via_base_in.xmax = rfnpn1.ports["B"].center[0]
    via_base_in.y = rfnpn1.ports["B"].center[1]

    via_col_out = c.add_ref(
        cells.via_stack(
            top_layer="TopMetal1",
            bottom_layer="Metal1",
            vn_columns=3,
            vn_rows=rows,
            vt1_rows=int(rows / 2),
            vt1_columns=2,
        )
    )
    via_col_out.xmin = rfnpn1.ports["C"].center[0] - 0.645
    via_col_out.y = rfnpn1.ports["C"].center[1]
    gnd_pin = c.add_ref(
        gf.components.rectangle(size=(15.0, 3.9), layer=layer_topmetal2pin)
    )
    gnd_pin.x = rfnpn1.ports["E"].center[0]
    gnd_pin.ymin = rfnpn1.ports["E"].center[1] - emitter_stub_length

    gnd = c.add_ref(
        gf.components.rectangle(size=(15.0, 3.9), layer=layer_topmetal2draw)
    )
    gnd.x = rfnpn1.ports["E"].center[0]
    gnd.ymin = rfnpn1.ports["E"].center[1] - emitter_stub_length
    # add grounded stud to output
    P = gf.Path()
    P += gf.path.euler(radius=5, angle=-90)  # Circular arc.
    P += gf.path.straight(length=2.0)  # Straight section.
    P += gf.path.euler(radius=5, angle=90)  # Euler bend (aka "racetrack" curve).
    out_stub = Component()
    out_stub_ref = out_stub.add_ref(
        gf.path.extrude(P, layer=layer_topmetal2draw, width=9.0)
    )
    out_stub_ref.rotate(-90)
    out_stub_ref.xmax = rfcmim2.xmax + 5.0
    out_stub_ref.ymax = rfcmim2.ports["PLUS"].center[1] - 5.0

    gnd2 = c.add_ref(
        gf.components.rectangle(size=(15.0, 3.9), layer=layer_topmetal2pin)
    )
    gnd2.x = out_stub_ref.xmin + 4.5
    gnd2.ymin = out_stub_ref.ymin - output_stub_length

    c.add_ref(out_stub)
    # add routing tapers
    # in MIM to NPN base
    in_stub_width = 3.0
    in_stub_length = abs(rfmim1.ports["MINUS"].center[0] - rfmim1.xmax)
    in_rfmim_minus_stub = c.add_ref(
        gf.components.rectangle(
            size=(in_stub_length, in_stub_width), layer=layer_metal5draw
        )
    )
    in_rfmim_minus_stub.xmin = rfmim1.ports["MINUS"].center[0]
    in_rfmim_minus_stub.y = rfmim1.ports["MINUS"].center[1]
    # NPN collector to out MIM
    out_stub_width = 3.0
    out_stub_length = abs(rfcmim2.ports["PLUS"].center[0] - rfcmim2.xmin)
    out_rfmim_plus_stub = c.add_ref(
        gf.components.rectangle(
            size=(out_stub_length, out_stub_width), layer=layer_topmetal1draw
        )
    )
    out_rfmim_plus_stub.xmax = rfcmim2.ports["PLUS"].center[0]
    out_rfmim_plus_stub.y = rfcmim2.ports["PLUS"].center[1]
    # Add rhigh to NPN base connector
    r_base_con_length = via_base_in.xmax - via_rhigh_p2.xmin
    r_base_con_width = via_rhigh_p2.ymax - via_base_in.ymin
    r_base_stub = c.add_ref(
        gf.components.rectangle(
            size=(r_base_con_length, r_base_con_width), layer=layer_metal5draw
        )
    )
    r_base_stub.xmax = via_base_in.xmax
    r_base_stub.ymax = via_rhigh_p2.ymax
    # Add rsil to NPN collector connector
    rsil_col_length = 2 * (rsil1.x - via_col_out.xmin)
    rsil_col_width = via_rsil_p2.ymin - 2.0 - via_col_out.ymin
    rsil_col_stub = c.add_ref(
        gf.components.rectangle(
            size=(rsil_col_length, rsil_col_width), layer=layer_topmetal1draw
        )
    )
    rsil_col_stub.xmin = via_col_out.xmin
    rsil_col_stub.ymin = via_col_out.ymin
    # add tapers
    # Add input taper to base from RF MIM
    base_taper_width1 = in_stub_width
    base_taper_width2 = 2 * min(
        [
            via_rhigh_p2.ymax - in_rfmim_minus_stub.y,
            in_rfmim_minus_stub.y - via_base_in.ymin,
        ]
    )
    base_taper_length = via_base_in.xmax - in_rfmim_minus_stub.xmax

    base_taper = c.add_ref(
        gf.components.taper(
            width1=base_taper_width1,
            width2=base_taper_width2,
            length=base_taper_length,
            layer=layer_metal5draw,
        )
    )
    base_taper.xmax = via_base_in.xmax
    base_taper.y = in_rfmim_minus_stub.y
    # Add output taper from collector to output RF MIM
    col_taper_width2 = out_stub_width
    col_taper_width1 = 2 * min(
        [
            abs(out_rfmim_plus_stub.y - rsil_col_stub.ymin),
            abs(rsil_col_stub.ymax - out_rfmim_plus_stub.y),
        ]
    )
    col_taper_length = -(rsil_col_stub.xmax - out_rfmim_plus_stub.xmin)

    col_taper = c.add_ref(
        gf.components.taper(
            width1=col_taper_width1,
            width2=col_taper_width2,
            length=col_taper_length,
            layer=layer_topmetal1draw,
        )
    )
    col_taper.xmin = rsil_col_stub.xmax
    col_taper.y = out_rfmim_plus_stub.y
    # Add taper from collector to RSIL
    col_rsil_taper_width2 = via_rsil_p2.xmax - via_rsil_p1.xmin
    col_rsil_taper_width1 = rsil_col_stub.xmax - rsil_col_stub.xmin
    col_rsil_taper_length = via_rsil_p2.ymin - rsil_col_stub.ymax

    col_rsil_taper = c.add_ref(
        gf.components.taper(
            width1=col_rsil_taper_width1,
            width2=col_rsil_taper_width2,
            length=col_rsil_taper_length,
            layer=layer_topmetal1draw,
        )
    )
    col_rsil_taper.rotate(90)
    col_rsil_taper.ymax = via_rsil_p2.ymin
    col_rsil_taper.x = rsil_col_stub.x

    # Add taper from emitter to emitter stub ground
    via_emit_stub = c.add_ref(
        cells.via_stack(
            bottom_layer="Metal5",
            top_layer="TopMetal2",
            vn_rows=3,
            vn_columns=7,
            vt1_rows=3,
            vt1_columns=7,
            vt2_rows=1,
            vt2_columns=3,
        )
    )
    via_emit_stub.x = rfnpn1.ports["E"].center[0]
    via_emit_stub.ymax = rfnpn1.ymin

    enc_tm1 = 0.42
    enc_m5 = 0.1
    emit_taper_width2 = via_emiter_gndstub.xmax - via_emiter_gndstub.xmin
    emit_taper_width1 = via_emit_stub.xmax - via_emit_stub.xmin - 2 * (enc_tm1 - enc_m5)
    emit_taper_length = (
        via_emiter_gndstub.ymin - via_emit_stub.ymax + (enc_tm1 - enc_m5)
    )

    emit_gnd_taper = c.add_ref(
        gf.components.taper(
            width1=emit_taper_width1,
            width2=emit_taper_width2,
            length=emit_taper_length,
            layer=layer_metal5draw,
        )
    )
    emit_gnd_taper.rotate(90)
    emit_gnd_taper.ymax = via_emiter_gndstub.ymin
    emit_gnd_taper.x = via_emit_stub.x

    stub_gnd_taper = c.add_ref(
        gf.components.taper(
            width1=emit_taper_width1, width2=15.0, length=5.5, layer=layer_topmetal2draw
        )
    )
    stub_gnd_taper.rotate(-90)
    stub_gnd_taper.ymax = via_emit_stub.ymax - (enc_tm1 - enc_m5)
    stub_gnd_taper.x = via_emit_stub.x
    # Add rsil p1 taper
    rsil_p1_taper_width2 = via_rsil_p1.xmax - via_rsil_p1.xmin
    rsil_p1_taper_width1 = 10.0
    rsil_p1_taper_length = 3.0

    rsil_p1_taper = c.add_ref(
        gf.components.taper(
            width1=rsil_p1_taper_width1,
            width2=rsil_p1_taper_width2,
            length=rsil_p1_taper_length,
            layer=layer_topmetal2draw,
        )
    )
    rsil_p1_taper.rotate(-90)
    rsil_p1_taper.ymin = via_rsil_p1.ymin
    rsil_p1_taper.x = via_rsil_p1.x
    # Add output ground stub input and output tapers
    out_stub_stage_taper_width2 = 9.0
    out_stub_stage_taper_width1 = 4.0
    out_stub_stage_taper_length = 3.0

    out_stub_stage_taper = c.add_ref(
        gf.components.taper(
            width1=out_stub_stage_taper_width1,
            width2=out_stub_stage_taper_width2,
            length=out_stub_stage_taper_length,
            layer=layer_topmetal2draw,
        )
    )
    out_stub_stage_taper.rotate(-90)
    out_stub_stage_taper.ymin = out_stub_ref.ymax
    out_stub_stage_taper.xmax = out_stub_ref.xmax
    out_stub_gnd_taper_width2 = 9.0
    out_stub_gnd_taper_width1 = 15.0
    out_stub_gnd_taper_length = 3.0

    out_stub_gnd_taper = c.add_ref(
        gf.components.taper(
            width1=out_stub_gnd_taper_width1,
            width2=out_stub_gnd_taper_width2,
            length=out_stub_gnd_taper_length,
            layer=layer_topmetal2draw,
        )
    )
    out_stub_gnd_taper.rotate(90)
    out_stub_gnd_taper.ymax = out_stub_ref.ymin
    out_stub_gnd_taper.xmin = out_stub_ref.xmin - 3.0
    # Add connections between tapers and pins
    # Emitter stub interconnect
    gnd_stub_length = stub_gnd_taper.ymin - gnd.ymin
    gnd_stub_width = 15.0
    gnd_stub = c.add_ref(
        gf.components.rectangle(
            size=(gnd_stub_width, gnd_stub_length), layer=layer_topmetal2draw
        )
    )
    gnd_stub.ymax = stub_gnd_taper.ymin
    gnd_stub.x = stub_gnd_taper.x
    # Output stub interconnect to gnd
    out_stub_gnd_length = out_stub_gnd_taper.ymin - gnd2.ymin
    out_stub_gnd_width = 15.0
    out_stub_gnd = c.add_ref(
        gf.components.rectangle(
            size=(out_stub_gnd_width, out_stub_gnd_length), layer=layer_topmetal2draw
        )
    )
    out_stub_gnd.ymax = out_stub_gnd_taper.ymin
    out_stub_gnd.x = out_stub_gnd_taper.x

    # Input stub interconnect
    in_plus_stub_width = 3.0
    in_plus_stub_length = rfmim1.ports["PLUS"].center[0] - rfmim1.xmin
    in_rfmim_plus_stub = c.add_ref(
        gf.components.rectangle(
            size=(in_plus_stub_length, in_plus_stub_width), layer=layer_topmetal1draw
        )
    )
    in_rfmim_plus_stub.xmax = rfmim1.ports["PLUS"].center[0]
    in_rfmim_plus_stub.y = rfmim1.ports["PLUS"].center[1]
    # Output stub interconnect to output
    mimout_plus_width = 3.0
    mimout_plus_length = abs(rfcmim2.ports["MINUS"].center[0] - rfcmim2.xmax)
    mimout_plus = c.add_ref(
        gf.components.rectangle(
            size=(mimout_plus_length, mimout_plus_width), layer=layer_metal5draw
        )
    )
    mimout_plus.xmin = rfcmim2.ports["MINUS"].center[0]
    mimout_plus.y = rfcmim2.ports["MINUS"].center[1]

    # Add output via stack to connect grounded stub
    via_out_gnd = c.add_ref(
        cells.via_stack(
            bottom_layer="Metal5",
            top_layer="TopMetal2",
            vn_rows=3,
            vn_columns=3,
            vt1_columns=2,
            vt1_rows=2,
            vt2_columns=1,
            vt2_rows=2,
        )
    )
    via_out_gnd.x = mimout_plus.xmax
    via_out_gnd.y = mimout_plus.y
    mimout_stub_con_width = 4.0
    mimout_stub_con_length = via_out_gnd.ymax - out_stub_stage_taper.ymax
    mimout_stub_con = c.add_ref(
        gf.components.rectangle(
            size=(mimout_stub_con_width, mimout_stub_con_length),
            layer=layer_topmetal2draw,
        )
    )
    mimout_stub_con.x = out_stub_stage_taper.x
    mimout_stub_con.ymin = out_stub_stage_taper.ymax

    rfout_width = 3.0
    rfout_length = mimout_stub_con.xmax - via_out_gnd.xmin
    rfout_con = c.add_ref(
        gf.components.rectangle(
            size=(rfout_length, rfout_width), layer=layer_topmetal1draw
        )
    )
    rfout_con.xmin = via_out_gnd.xmin
    rfout_con.y = via_out_gnd.y
    # RSIL p1 interconnect to VCC
    rsil_vcc_con_width = rsil_p1_taper_width1
    rsil_vcc_con_length = vbb.ymax - rsil_p1_taper.ymax
    rsil_vcc_con = c.add_ref(
        gf.components.rectangle(
            size=(rsil_vcc_con_width, rsil_vcc_con_length), layer=layer_topmetal2draw
        )
    )
    rsil_vcc_con.x = rsil_p1_taper.x
    rsil_vcc_con.ymin = rsil_p1_taper.ymax

    # Add pin rectangles ports
    rfin_pin = c.add_ref(
        gf.components.rectangle(size=(3.0, 3.0), layer=layer_topmetal1pin)
    )
    rfin_pin.xmin = in_rfmim_plus_stub.xmin
    rfin_pin.y = in_rfmim_plus_stub.y

    rfin_port = c.add_port(
        name="RFIN",
        center=(rfin_pin.x, rfin_pin.y),
        width=3.0,
        orientation=0,
        layer=layer_topmetal1draw,
    )
    rfout_pin = c.add_ref(
        gf.components.rectangle(size=(3.0, 3.0), layer=layer_topmetal1pin)
    )
    rfout_pin.xmax = rfout_con.xmax
    rfout_pin.y = rfout_con.y

    rfout_port = c.add_port(
        name="RFOUT",
        center=(rfout_pin.x, rfout_pin.y),
        width=3.0,
        orientation=0,
        layer=layer_topmetal1draw,
    )
    vcc_pin = c.add_ref(
        gf.components.rectangle(size=(10.0, 3.0), layer=layer_topmetal2pin)
    )
    vcc_pin.xmax = rsil_vcc_con.xmax
    vcc_pin.ymax = rsil_vcc_con.ymax

    vcc_port = c.add_port(
        name="VCC",
        center=(vcc_pin.x, vcc_pin.y),
        width=3.0,
        orientation=-90,
        layer=layer_topmetal2draw,
    )

    gnd_port = c.add_port(
        name="GND",
        center=(gnd.x, gnd.y),
        width=3.9,
        orientation=90,
        layer=layer_topmetal2draw,
    )
    gnd2_port = c.add_port(
        name="GND2",
        center=(gnd2.x, gnd2.y),
        width=3.9,
        orientation=90,
        layer=layer_topmetal2draw,
    )
    gf.labels.add_port_labels(
        c, ports=[rfin_port, rfout_port], layer=layer_topmetal1label
    )

    gf.labels.add_port_labels(
        c, ports=[gnd_port, gnd2_port], layer=layer_topmetal2label
    )
    gf.labels.add_port_labels(c, ports=[vcc_port], layer=layer_topmetal2label)
    gf.labels.add_port_labels(c, ports=[vbb_port], layer=layer_metal2label)

    c.info["model"] = model
    return c

Generation of each stage individually and cascading them to replicate the design including in IHP April 2025 Tapeout Data

import os

# Get the notebook's directory and navigate to gds folder
GDS_PATH = Path(os.getcwd()).parent.parent / "gds"
GDS_PATH.mkdir(parents=True, exist_ok=True)

c = Component()

First Stage

stg1 = c.add_ref(lna_160g_stage())

Second Stage

stg2 = c.add_ref(lna_160g_stage(rfcmim_width=1.62, rfcmim_length=4.48, ymax_ref=13.75))

stg2.xmin = stg1.xmax - 8.0

Third Stage

stg3 = c.add_ref(
    lna_160g_stage(rfcmim_width=1.62, rfcmim_length=6.88, m=2, ymax_ref=13.75)
)
stg3.xmin = stg2.xmax - 8.0

Fourth Stage

stg4 = c.add_ref(
    lna_160g_stage(
        rfcmim_width=1.62, rfcmim_length=4.48, m=2, rfcmim_width2=5.48, ymax_ref=13.75
    )
)
stg4.xmin = stg3.xmax - 8.0

Output decoupling (RF) MIM Cap

cmim_out = c.add_ref(rfcmim(width=1.62, length=4.48))
cmim_out.xmin = stg4.xmax - 3.0
c.write(GDS_PATH / "ihp_160g_lna_factory_gen.gds")

Visualize the Layout

# Plot the complete 4-stage LNA layout
c.plot()

png

Load and Plot the Saved GDS File

# Import the saved GDS file back as a gdsfactory component
c_loaded = gf.import_gds(GDS_PATH / "FMD_QNC_04_160GHz_LNA.gds")

# Display information about the loaded component
print(f"Loaded component: {c_loaded.name}")
print(f"Number of polygons: {len(c_loaded.get_polygons())}")
print(f"Bounding box: {c_loaded.bbox}")
Loaded component: FMD_QNC_04_160GHz_LNA


Number of polygons: 61
Bounding box: <bound method UMGeometricObject.bbox of Component(name=FMD_QNC_04_160GHz_LNA, ports=[], pins=[], instances=['GatP_FILL_CELL_595000_123500', 'GatP_FILL_CELL_695000_123500', 'GatP_FILL_CELL_685000_123500', 'GatP_FILL_CELL_675000_123500', 'GatP_FILL_CELL_665000_123500', 'GatP_FILL_CELL_655000_123500', 'GatP_FILL_CELL_645000_123500', 'GatP_FILL_CELL_635000_123500', 'GatP_FILL_CELL_625000_123500', 'GatP_FILL_CELL_615000_123500', 'GatP_FILL_CELL_605000_123500', 'GatP_FILL_CELL_705000_123500', 'GatP_FILL_CELL_585000_123500', 'GatP_FILL_CELL_575000_123500', 'GatP_FILL_CELL_565000_123500', 'GatP_FILL_CELL_555000_123500', 'GatP_FILL_CELL_545000_123500', 'GatP_FILL_CELL_535000_123500', 'GatP_FILL_CELL_525000_123500', 'GatP_FILL_CELL_515000_123500', 'GatP_FILL_CELL_505000_123500', 'GatP_FILL_CELL_495000_123500', 'GatP_FILL_CELL_485000_123500', 'GatP_FILL_CELL_825000_123500', 'GatP_FILL_CELL_935000_133500', 'GatP_FILL_CELL_925000_123500', 'GatP_FILL_CELL_915000_123500', 'GatP_FILL_CELL_905000_123500', 'GatP_FILL_CELL_895000_123500', 'GatP_FILL_CELL_885000_123500', 'GatP_FILL_CELL_875000_123500', 'GatP_FILL_CELL_865000_123500', 'GatP_FILL_CELL_855000_123500', 'GatP_FILL_CELL_845000_123500', 'GatP_FILL_CELL_835000_123500', 'GatP_FILL_CELL_465000_123500', 'GatP_FILL_CELL_815000_123500', 'GatP_FILL_CELL_805000_123500', 'GatP_FILL_CELL_795000_123500', 'GatP_FILL_CELL_785000_123500', 'GatP_FILL_CELL_775000_123500', 'GatP_FILL_CELL_765000_123500', 'GatP_FILL_CELL_755000_123500', 'GatP_FILL_CELL_745000_123500', 'GatP_FILL_CELL_735000_123500', 'GatP_FILL_CELL_725000_123500', 'GatP_FILL_CELL_715000_123500', 'GatP_FILL_CELL_800000_126000', 'GatP_FILL_CELL_910000_126000', 'GatP_FILL_CELL_900000_126000', 'GatP_FILL_CELL_890000_126000', 'GatP_FILL_CELL_880000_126000', 'GatP_FILL_CELL_870000_126000', 'GatP_FILL_CELL_860000_126000', 'GatP_FILL_CELL_850000_126000', 'GatP_FILL_CELL_840000_126000', 'GatP_FILL_CELL_830000_126000', 'GatP_FILL_CELL_820000_126000', 'GatP_FILL_CELL_810000_126000', 'GatP_FILL_CELL_920000_126000', 'GatP_FILL_CELL_790000_126000', 'GatP_FILL_CELL_780000_126000', 'GatP_FILL_CELL_770000_126000', 'GatP_FILL_CELL_760000_126000', 'GatP_FILL_CELL_750000_126000', 'GatP_FILL_CELL_740000_126000', 'GatP_FILL_CELL_730000_126000', 'GatP_FILL_CELL_720000_126000', 'GatP_FILL_CELL_710000_126000', 'GatP_FILL_CELL_700000_126000', 'GatP_FILL_CELL_345000_123500', 'GatP_FILL_CELL_455000_123500', 'GatP_FILL_CELL_445000_123500', 'GatP_FILL_CELL_435000_123500', 'GatP_FILL_CELL_425000_123500', 'GatP_FILL_CELL_415000_123500', 'GatP_FILL_CELL_405000_123500', 'GatP_FILL_CELL_395000_123500', 'GatP_FILL_CELL_385000_123500', 'GatP_FILL_CELL_375000_123500', 'GatP_FILL_CELL_365000_123500', 'GatP_FILL_CELL_355000_123500', 'GatP_FILL_CELL_945000_143500', 'GatP_FILL_CELL_335000_123500', 'GatP_FILL_CELL_325000_123500', 'GatP_FILL_CELL_315000_123500', 'GatP_FILL_CELL_305000_123500', 'GatP_FILL_CELL_295000_123500', 'GatP_FILL_CELL_285000_123500', 'GatP_FILL_CELL_275000_123500', 'GatP_FILL_CELL_265000_133500', 'GatP_FILL_CELL_940000_136000', 'GatP_FILL_CELL_930000_131000', 'GatP_FILL_CELL_475000_123500', 'GatP_FILL_CELL_350000_126000', 'GatP_FILL_CELL_460000_126000', 'GatP_FILL_CELL_450000_126000', 'GatP_FILL_CELL_440000_126000', 'GatP_FILL_CELL_430000_126000', 'GatP_FILL_CELL_420000_126000', 'GatP_FILL_CELL_410000_126000', 'GatP_FILL_CELL_400000_126000', 'GatP_FILL_CELL_390000_126000', 'GatP_FILL_CELL_380000_126000', 'GatP_FILL_CELL_370000_126000', 'GatP_FILL_CELL_360000_126000', 'GatP_FILL_CELL_680000_126000', 'GatP_FILL_CELL_340000_126000', 'GatP_FILL_CELL_330000_126000', 'GatP_FILL_CELL_320000_126000', 'GatP_FILL_CELL_310000_126000', 'GatP_FILL_CELL_300000_126000', 'GatP_FILL_CELL_290000_126000', 'GatP_FILL_CELL_280000_126000', 'GatP_FILL_CELL_270000_131000', 'GatP_FILL_CELL_260000_136000', 'GatP_FILL_CELL_490000_606000', 'GatP_FILL_CELL_480000_126000', 'GatP_FILL_CELL_690000_126000', 'GatP_FILL_CELL_670000_126000', 'GatP_FILL_CELL_660000_126000', 'GatP_FILL_CELL_650000_126000', 'GatP_FILL_CELL_640000_126000', 'GatP_FILL_CELL_630000_126000', 'GatP_FILL_CELL_620000_126000', 'GatP_FILL_CELL_610000_126000', 'GatP_FILL_CELL_600000_126000', 'GatP_FILL_CELL_590000_126000', 'GatP_FILL_CELL_580000_126000', 'GatP_FILL_CELL_560000_126000', 'GatP_FILL_CELL_470000_126000', 'GatP_FILL_CELL_490000_126000', 'GatP_FILL_CELL_490000_616000', 'GatP_FILL_CELL_500000_126000', 'GatP_FILL_CELL_510000_126000', 'GatP_FILL_CELL_530000_126000', 'GatP_FILL_CELL_570000_126000', 'GatP_FILL_CELL_550000_126000', 'GatP_FILL_CELL_520000_126000', 'GatP_FILL_CELL_540000_126000', 'Act_FILL_CELL_600800_125000', 'Act_FILL_CELL_650800_125000', 'Act_FILL_CELL_640800_125000', 'Act_FILL_CELL_630800_125000', 'Act_FILL_CELL_620800_125000', 'Act_FILL_CELL_610800_125000', 'Act_FILL_CELL_590800_125000', 'Act_FILL_CELL_580800_125000', 'Act_FILL_CELL_570800_125000', 'Act_FILL_CELL_560800_125000', 'Act_FILL_CELL_550800_125000', 'Act_FILL_CELL_810800_125000', 'Act_FILL_CELL_790800_125000', 'Act_FILL_CELL_780800_125000', 'Act_FILL_CELL_770800_125000', 'Act_FILL_CELL_760800_125000', 'Act_FILL_CELL_750800_125000', 'Act_FILL_CELL_740800_125000', 'Act_FILL_CELL_730800_125000', 'Act_FILL_CELL_720800_125000', 'Act_FILL_CELL_710800_125000', 'Act_FILL_CELL_700800_125000', 'Act_FILL_CELL_540800_125000', 'Act_FILL_CELL_690800_125000', 'Act_FILL_CELL_680800_125000', 'Act_FILL_CELL_670800_125000', 'Act_FILL_CELL_660800_125000', 'Act_FILL_CELL_290800_125000', 'Act_FILL_CELL_370800_125000', 'Act_FILL_CELL_360800_125000', 'Act_FILL_CELL_350800_125000', 'Act_FILL_CELL_340800_125000', 'Act_FILL_CELL_330800_125000', 'Act_FILL_CELL_320800_125000', 'Act_FILL_CELL_310800_125000', 'Act_FILL_CELL_300800_125000', 'Act_FILL_CELL_280800_125000', 'Act_FILL_CELL_270800_130000', 'Act_FILL_CELL_260800_135000', 'Act_FILL_CELL_420800_125000', 'Act_FILL_CELL_530800_125000', 'Act_FILL_CELL_520800_125000', 'Act_FILL_CELL_510800_125000', 'Act_FILL_CELL_500800_125000', 'Act_FILL_CELL_490800_125000', 'Act_FILL_CELL_480800_125000', 'Act_FILL_CELL_470800_125000', 'Act_FILL_CELL_460800_125000', 'Act_FILL_CELL_450800_125000', 'Act_FILL_CELL_440800_125000', 'Act_FILL_CELL_430800_125000', 'Act_FILL_CELL_410800_125000', 'Act_FILL_CELL_400800_125000', 'Act_FILL_CELL_390800_125000', 'Act_FILL_CELL_380800_125000', 'Act_FILL_CELL_515800_122500', 'Act_FILL_CELL_655800_122500', 'Act_FILL_CELL_645800_122500', 'Act_FILL_CELL_635800_122500', 'Act_FILL_CELL_625800_122500', 'Act_FILL_CELL_615800_122500', 'Act_FILL_CELL_605800_122500', 'Act_FILL_CELL_595800_122500', 'Act_FILL_CELL_585800_122500', 'Act_FILL_CELL_575800_122500', 'Act_FILL_CELL_565800_122500', 'Act_FILL_CELL_555800_122500', 'Act_FILL_CELL_545800_122500', 'Act_FILL_CELL_535800_122500', 'Act_FILL_CELL_525800_122500', 'Act_FILL_CELL_665800_122500', 'Act_FILL_CELL_505800_122500', 'Act_FILL_CELL_495800_122500', 'Act_FILL_CELL_485800_122500', 'Act_FILL_CELL_475800_122500', 'Act_FILL_CELL_465800_122500', 'Act_FILL_CELL_455800_122500', 'Act_FILL_CELL_445800_122500', 'Act_FILL_CELL_435800_122500', 'Act_FILL_CELL_425800_122500', 'Act_FILL_CELL_805800_122500', 'Act_FILL_CELL_945800_142500', 'Act_FILL_CELL_935800_132500', 'Act_FILL_CELL_925800_122500', 'Act_FILL_CELL_915800_122500', 'Act_FILL_CELL_905800_122500', 'Act_FILL_CELL_895800_122500', 'Act_FILL_CELL_885800_122500', 'Act_FILL_CELL_875800_122500', 'Act_FILL_CELL_865800_122500', 'Act_FILL_CELL_855800_122500', 'Act_FILL_CELL_845800_122500', 'Act_FILL_CELL_835800_122500', 'Act_FILL_CELL_825800_122500', 'Act_FILL_CELL_815800_122500', 'Act_FILL_CELL_415800_122500', 'Act_FILL_CELL_795800_122500', 'Act_FILL_CELL_785800_122500', 'Act_FILL_CELL_775800_122500', 'Act_FILL_CELL_765800_122500', 'Act_FILL_CELL_755800_122500', 'Act_FILL_CELL_745800_122500', 'Act_FILL_CELL_735800_122500', 'Act_FILL_CELL_725800_122500', 'Act_FILL_CELL_715800_122500', 'Act_FILL_CELL_705800_122500', 'Act_FILL_CELL_695800_122500', 'Act_FILL_CELL_685800_122500', 'Act_FILL_CELL_675800_122500', 'Act_FILL_CELL_920800_125000', 'Act_FILL_CELL_910800_125000', 'Act_FILL_CELL_900800_125000', 'Act_FILL_CELL_890800_125000', 'Act_FILL_CELL_880800_125000', 'Act_FILL_CELL_870800_125000', 'Act_FILL_CELL_860800_125000', 'Act_FILL_CELL_850800_125000', 'Act_FILL_CELL_840800_125000', 'Act_FILL_CELL_830800_125000', 'Act_FILL_CELL_820800_125000', 'Act_FILL_CELL_325800_122500', 'Act_FILL_CELL_405800_122500', 'Act_FILL_CELL_395800_122500', 'Act_FILL_CELL_385800_122500', 'Act_FILL_CELL_375800_122500', 'Act_FILL_CELL_365800_122500', 'Act_FILL_CELL_355800_122500', 'Act_FILL_CELL_345800_122500', 'Act_FILL_CELL_335800_122500', 'Act_FILL_CELL_800800_125000', 'Act_FILL_CELL_315800_122500', 'Act_FILL_CELL_305800_122500', 'Act_FILL_CELL_295800_122500', 'Act_FILL_CELL_285800_122500', 'Act_FILL_CELL_275800_122500', 'Act_FILL_CELL_265800_132500', 'Act_FILL_CELL_940800_135000', 'Act_FILL_CELL_930800_130000', 'LNA_246205_151710', 'GND_0_0', 'sealring$1_217950_84160', 'GatP_FILL_CELL_535000_618500', 'GatP_FILL_CELL_525000_618500', 'GatP_FILL_CELL_515000_618500', 'GatP_FILL_CELL_505000_618500', 'GatP_FILL_CELL_495000_618500', 'GatP_FILL_CELL_750000_616000', 'GatP_FILL_CELL_510000_616000', 'GatP_FILL_CELL_500000_616000', 'GatP_FILL_CELL_745000_613500', 'GatP_FILL_CELL_735000_618500', 'GatP_FILL_CELL_725000_618500', 'GatP_FILL_CELL_715000_618500', 'GatP_FILL_CELL_705000_618500', 'GatP_FILL_CELL_620000_626000', 'GatP_FILL_CELL_730000_616000', 'GatP_FILL_CELL_720000_616000', 'GatP_FILL_CELL_710000_616000', 'GatP_FILL_CELL_700000_616000', 'GatP_FILL_CELL_690000_626000', 'Act_FILL_CELL_740800_615000', 'GatP_FILL_CELL_680000_621000', 'Act_FILL_CELL_595800_617500', 'GatP_FILL_CELL_670000_616000', 'GatP_FILL_CELL_660000_621000', 'Act_FILL_CELL_605800_617500', 'GatP_FILL_CELL_650000_621000', 'Act_FILL_CELL_750800_615000', 'GatP_FILL_CELL_640000_621000', 'GatP_FILL_CELL_630000_621000', 'Act_FILL_CELL_555800_617500', 'Act_FILL_CELL_565800_617500', 'Act_FILL_CELL_730800_615000', 'Act_FILL_CELL_575800_617500', 'GatP_FILL_CELL_740000_616000', 'GatP_FILL_CELL_610000_621000', 'Act_FILL_CELL_585800_617500', 'GatP_FILL_CELL_600000_616000', 'GatP_FILL_CELL_590000_616000', 'GatP_FILL_CELL_580000_616000', 'Act_FILL_CELL_720800_615000', 'GatP_FILL_CELL_570000_616000', 'GatP_FILL_CELL_560000_616000', 'GatP_FILL_CELL_550000_626000', 'GatP_FILL_CELL_540000_626000', 'Act_FILL_CELL_610800_620000', 'GatP_FILL_CELL_530000_616000', 'Act_FILL_CELL_705800_617500', 'Act_FILL_CELL_715800_617500', 'Act_FILL_CELL_530800_615000', 'Act_FILL_CELL_725800_617500', 'Act_FILL_CELL_735800_617500', 'Act_FILL_CELL_540800_625000', 'Act_FILL_CELL_745800_612500', 'Act_FILL_CELL_550800_625000', 'Act_FILL_CELL_560800_615000', 'Act_FILL_CELL_570800_615000', 'Act_FILL_CELL_580800_615000', 'Act_FILL_CELL_590800_615000', 'Act_FILL_CELL_600800_615000', 'Act_FILL_CELL_520800_615000', 'Act_FILL_CELL_620800_625000', 'Act_FILL_CELL_630800_620000', 'Act_FILL_CELL_640800_620000', 'Act_FILL_CELL_680800_620000', 'GatP_FILL_CELL_520000_616000', 'GatP_FILL_CELL_585000_618500', 'GatP_FILL_CELL_695000_623500', 'GatP_FILL_CELL_685000_623500', 'GatP_FILL_CELL_675000_613500', 'Act_FILL_CELL_650800_620000', 'GatP_FILL_CELL_665000_618500', 'GatP_FILL_CELL_655000_618500', 'Act_FILL_CELL_660800_620000', 'GatP_FILL_CELL_645000_618500', 'Act_FILL_CELL_615800_627500', 'GatP_FILL_CELL_635000_618500', 'Act_FILL_CELL_670800_615000', 'Act_FILL_CELL_625800_627500', 'GatP_FILL_CELL_625000_628500', 'GatP_FILL_CELL_615000_628500', 'Act_FILL_CELL_635800_617500', 'GatP_FILL_CELL_605000_618500', 'GatP_FILL_CELL_595000_618500', 'Act_FILL_CELL_645800_617500', 'Act_FILL_CELL_690800_625000', 'Act_FILL_CELL_655800_617500', 'GatP_FILL_CELL_575000_618500', 'Act_FILL_CELL_500800_615000', 'Act_FILL_CELL_495800_617500', 'Act_FILL_CELL_665800_617500', 'GatP_FILL_CELL_565000_618500', 'Act_FILL_CELL_505800_617500', 'Act_FILL_CELL_675800_612500', 'Act_FILL_CELL_700800_615000', 'Act_FILL_CELL_510800_615000', 'Act_FILL_CELL_515800_617500', 'Act_FILL_CELL_685800_622500', 'Act_FILL_CELL_525800_617500', 'Act_FILL_CELL_710800_615000', 'Act_FILL_CELL_695800_622500', 'Act_FILL_CELL_535800_617500', 'Act_FILL_CELL_545800_627500', 'GatP_FILL_CELL_555000_618500', 'GatP_FILL_CELL_545000_628500', 'GatP_FILL_CELL_500000_606000', 'GatP_FILL_CELL_585000_603500', 'GatP_FILL_CELL_575000_603500', 'GatP_FILL_CELL_565000_603500', 'GatP_FILL_CELL_555000_603500', 'GatP_FILL_CELL_580000_606000', 'GatP_FILL_CELL_570000_606000', 'GatP_FILL_CELL_560000_606000', 'GatP_FILL_CELL_530000_606000', 'GatP_FILL_CELL_720000_601000', 'GatP_FILL_CELL_710000_601000', 'GatP_FILL_CELL_700000_601000', 'Act_FILL_CELL_570800_605000', 'GatP_FILL_CELL_605000_603500', 'GatP_FILL_CELL_600000_606000', 'GatP_FILL_CELL_675000_603500', 'Act_FILL_CELL_580800_605000', 'GatP_FILL_CELL_655000_598500', 'GatP_FILL_CELL_645000_598500', 'GatP_FILL_CELL_635000_598500', 'Act_FILL_CELL_555800_602500', 'GatP_FILL_CELL_725000_603500', 'GatP_FILL_CELL_640000_601000', 'GatP_FILL_CELL_630000_601000', 'GatP_FILL_CELL_515000_603500', 'Act_FILL_CELL_565800_602500', 'GatP_FILL_CELL_505000_603500', 'Act_FILL_CELL_495800_602500', 'Act_FILL_CELL_515800_602500', 'Act_FILL_CELL_575800_602500', 'Act_FILL_CELL_675800_602500', 'Act_FILL_CELL_605800_602500', 'Act_FILL_CELL_700800_600000', 'Act_FILL_CELL_645800_597500', 'Act_FILL_CELL_640800_600000', 'Act_FILL_CELL_585800_602500', 'via_stack$35_518650_803200', 'Act_FILL_CELL_710800_600000', 'Act_FILL_CELL_510800_605000', 'Act_FILL_CELL_655800_597500', 'Act_FILL_CELL_600800_605000', 'Act_FILL_CELL_720800_600000', 'Act_FILL_CELL_530800_605000', 'Act_FILL_CELL_630800_600000', 'Act_FILL_CELL_500800_605000', 'Act_FILL_CELL_705800_602500', 'GatP_FILL_CELL_650000_601000', 'Act_FILL_CELL_505800_602500', 'Act_FILL_CELL_635800_597500', 'Act_FILL_CELL_715800_602500', 'Act_FILL_CELL_650800_600000', 'Act_FILL_CELL_725800_602500', 'Act_FILL_CELL_560800_605000', 'GatP_FILL_CELL_715000_603500', 'GatP_FILL_CELL_495000_603500', 'GatP_FILL_CELL_705000_603500', 'GatP_FILL_CELL_510000_606000', 'Act_FILL_CELL_480800_625000', 'Act_FILL_CELL_485800_602500', 'Act_FILL_CELL_465800_622500', 'Act_FILL_CELL_460800_625000', 'Act_FILL_CELL_475800_627500', 'Act_FILL_CELL_490800_605000', 'Act_FILL_CELL_485800_617500', 'Act_FILL_CELL_470800_625000', 'GatP_FILL_CELL_460000_626000', 'GatP_FILL_CELL_450000_626000', 'GatP_FILL_CELL_485000_618500', 'GatP_FILL_CELL_475000_628500', 'GatP_FILL_CELL_455000_603500', 'GatP_FILL_CELL_465000_623500', 'GatP_FILL_CELL_460000_601000', 'Act_FILL_CELL_455800_602500', 'GatP_FILL_CELL_445000_623500', 'Act_FILL_CELL_490800_615000', 'Act_FILL_CELL_445800_622500', 'GatP_FILL_CELL_480000_626000', 'Act_FILL_CELL_450800_625000', 'GatP_FILL_CELL_485000_603500', 'Act_FILL_CELL_455800_622500', 'Act_FILL_CELL_460800_600000', 'GatP_FILL_CELL_455000_623500', 'GatP_FILL_CELL_470000_626000', 'ac_gp_filler_1270_-40'], locked=False, kcl=DEFAULT)>
# Plot the loaded GDS component
c_loaded.plot()

png