Channel Autorouter

The channel autorouter connects pairs of pins by routing wires through a user-defined network of channels. Routing proceeds in two steps: channel assignment (choosing which channels each net's wire passes through) and track assignment (assigning non-overlapping tracks within each channel). See Concepts: Channel Autorouter for a conceptual overview.

The full code for these examples can be found in examples/ChannelAutorouter/ChannelAutorouter.jl in the DeviceLayout.jl repository.

using DeviceLayout, FileIO
include("../../../examples/ChannelAutorouter/ChannelAutorouter.jl")
using .ChannelAutorouter

Simple

One horizontal channel, two pins, one net. The simplest possible autorouting scenario.

c, ar = ChannelAutorouter.example_simple()

Parallel

Three nets routed left-to-right at matching heights through a grid of two vertical and three horizontal channels. No crossings needed.

c, ar = ChannelAutorouter.example_parallel()

Crossing

Two nets that must cross in a shared vertical channel, forcing the router to assign multiple tracks.

c, ar = ChannelAutorouter.example_crossing()

There is also a variant of this example using the schematic routing interface.

Fan-in / fan-out

Clustered pins on one side, spread-out pins on the other, routed through a single shared horizontal channel. The router assigns multiple tracks to accommodate the asymmetric spacing.

c, ar = ChannelAutorouter.example_fanin_fanout()

Multichannel fan-out

Same topology as fan-in/fan-out, but with a dedicated horizontal channel per net. Each net uses exactly one track.

c, ar = ChannelAutorouter.example_multichannel_fanout()

Grid

A 4×4 grid of horizontal and vertical channels with pins on different edges. Nets take multi-hop paths through the grid.

c, ar = ChannelAutorouter.example_grid()

Angled channels

Non-Manhattan channels: two 45° diagonals crossing a horizontal channel. The router handles arbitrary channel geometry.

c, ar = ChannelAutorouter.example_angled()

Dense

Six nets sharing just two horizontal and two vertical channels. Forces three tracks per channel.

c, ar = ChannelAutorouter.example_dense()

B-spline channels

Curved channels using B-spline geometry with BSplineRouting transitions. Same fan-in/fan-out topology as above but with non-straight channels and a tapered channel.

c, ar = ChannelAutorouter.example_bspline()

100-net fan-out

100 nets fan out through a single wide channel from an inner row of pins to an outer row with twice the spacing.

c, ar = ChannelAutorouter.example_fanout100()