NoFanout

class ipkiss3.all.NoFanout

Omit the fanout stage and connect ports directly to the bundle array.

To be used with a bundle connector (such as ConnectManhattanBundle). This class acts as a pass-through without adding fanout bends. Any pitch gathering or scattering is handled directly within the central bundle array section.

Works best when:
  • The ports are already uniformly spaced or pitch-aligned.

  • Port spacing is uniform and at least equal to the bundle pitch.

  • You want to eliminate redundant bends to minimize optical loss and chip footprint.

Notes

Port spacing and potential trace overlap risks are checked prior to routing, while actual bundle route collisions are reported separately after routing.

Examples

Omit fanout stages using i3.NoFanout to minimize bends:

import si_fab.all as pdk  # noqa: F401

import ipkiss3.all as i3
from picazzo3.fibcoup.curved import FiberCouplerCurvedGrating

fc = FiberCouplerCurvedGrating()

circuit = i3.Circuit(
    specs=[
        i3.Inst([f"fc{i}" for i in range(1, 7)], fc),
        # Input ports placed with standard uniform spacing
        i3.Place("fc1:out", (0.0, 0.0), angle=0),
        i3.Place("fc2:out", (0.0, -50.0), angle=0),
        i3.Place("fc3:out", (0.0, -100.0), angle=0),
        # Output ports
        i3.Place("fc4:out", (240.0, 200.0), angle=-90),
        i3.Place("fc5:out", (170.0, 200.0), angle=-90),
        i3.Place("fc6:out", (100.0, 200.0), angle=-90),
        i3.ConnectManhattanBundle(
            connections=[
                ("fc1:out", "fc6:out"),
                ("fc2:out", "fc5:out"),
                ("fc3:out", "fc4:out"),
            ],
            # Omit start fanout since input ports are already pitch-aligned
            start_fanout=i3.NoFanout(),
            end_fanout=i3.SBendFanout(),
            pitch=5,
            bend_radius=10,
        ),
    ],
)

circuit_lo = circuit.Layout()
circuit_lo.visualize()
../../../../_images/ipkiss3-all-NoFanout-1.png
classmethod warn_if_trace_overlap(ports, pitch, min_spacing, *, port_name, tolerance=0.001)

Warn when skipping the fanout may cause overlapping traces.