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()
- classmethod warn_if_trace_overlap(ports, pitch, min_spacing, *, port_name, tolerance=0.001)
Warn when skipping the fanout may cause overlapping traces.