Skip to content

Releases: parisxmas/fastroute

fastroute 0.1.13

Choose a tag to compare

@parisxmas parisxmas released this 07 Oct 14:00

Follow-up to 0.1.12 from the same tester's runs on a 190 × 190 mm 6-layer board: a KiCad plugin keepout fix and more diagnostics for very long runs. --parity still reproduces Freerouting bit for bit.

Downloads

File For
fastroute-kicad-0.1.13.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.13-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

KiCad plugin: rule-area keepouts matched by layer and shape

A rule area that only carries a DRC rule (no restriction) is dropped from the DSN, because KiCad exports it as a full keepout. It was matched by shape alone, so a blocking rule area of the same shape on the same layer was dropped with it — the tester lost the keepouts of six channel areas and the router routed through them. The key is now (layer, shape); a blocking area keeps exactly one keepout, via-only and track-only areas are still converted to via_keepout / wire_keepout.

Long runs

  • Fanout pins that take long are named. On the tester's board one pin's fanout took about 820 s of an 854 s pass (the per-pin time limit bounds the maze search only). A pin taking 10 s or more now gets a line with its component, pin, net, state and the time spent routing and checking.
  • The stop watchdog names the last progress. After --max-time, Ctrl+C or the live viewer's Stop, the message every 30 s also says the last committed connection ("pass 13, 310 of 690 connections committed") or the last checked fanout pin, so a step that does not finish can be told from a pass that is still winding down.
  • Board history limited to 6 copies. Freerouting's board history keeps up to 30 copies of the board for its restore rules; on a 23 000-item board that is gigabytes (0.6 → 3 GB over 12 passes). With the enhancements 6 copies are kept; the restore rules only ever look at the best few.

fastroute 0.1.12

Choose a tag to compare

@parisxmas parisxmas released this 07 Oct 07:55

Fixes from a tester's long runs on a 190 × 190 mm 6-layer board, differential pair length matching, and a KiCad 10 plugin fix. --parity still reproduces Freerouting bit for bit.

Downloads

File For
fastroute-kicad-0.1.12.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.12-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

KiCad plugin: export failed on KiCad 10

The Keep zone stitching vias code of 0.1.11 asked a via's width without a layer; KiCad 10 rejects that call (PCB_VIA::GetWidth called without a layer argument) and the export stopped before writing the DSN. Fixed; the workaround --no-keep-stitching is no longer needed.

Long runs on big boards

  • Fanout progress. A fanout pass over a big board can take many minutes (1092 s for 1266 pins on the tester's board) and the log said nothing. Now a line every 30 s: pins checked, fanned out, not routed.
  • A stopped run always leaves a session file. The board after the fanout stage is written as the first checkpoint, so --max-time, Ctrl+C or the live viewer's Stop during the first autorouting pass no longer leaves nothing behind. No fanout pass starts after a stop request.
  • Stop watchdog. After a stop request the log says every 30 s which stage is still finishing its current step, so a long step is not taken for a hang.
  • --router.autorouter.min_passes=N. The stagnation rules do not stop the autorouter before N passes. A 5.8-hour --max-time run ended after 1.6 hours because the last three passes had not improved; with min_passes the run uses its time.
  • Pre-existing violations named. Clearance violations between two fixed items (imported wiring with the plugin's 5 µm margin, for example) cannot be fixed by any pass; the pass lines now say "N violations, M of them pre-existing between fixed items" instead of presenting them as the router's. Scoring is unchanged.

Differential pairs: length matching

After the coupling the shorter net of each pair gets meanders until the two lengths differ by at most the pair's tolerance (skew= in the pairs file, else --pair-skew, default 0.1 mm; 0 turns it off). Meanders go on the uncoupled parts near the pins first; only what finds no room there goes on the coupled runs as small bumps, and the result says how much. A difference above 5 mm is reported as a detour of one net rather than pair geometry. STM32H7 board: USB −2.18 → −0.05 mm, ETH RX −0.80 → −0.05 mm, ETH TX +16.71 → +0.05 mm, KiCad DRC clean.

fastroute 0.1.11

Choose a tag to compare

@parisxmas parisxmas released this 06 Oct 22:49

Zone stitching vias survive routing. --parity still reproduces Freerouting bit for bit.

Downloads

File For
fastroute-kicad-0.1.11.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.11-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

Zone stitching vias are kept

A via that no track touches — GND zone stitching, thermal vias — was lost twice before: the plugin's Remove existing tracks option stripped it like any other unlocked wiring, and Freerouting removes a lone via as a dangling tail after every pass. A board with 185 GND stitching vias came back with none.

  • KiCad plugin: new option Keep zone stitching vias (on by default; --no-keep-stitching in route_cli.py). Such vias are locked for the run and unlocked afterwards; the progress window reports how many were kept.
  • Router: kept as fixed wiring they became routing targets — every GND pad got a trace to the nearest via and, since that joins no other pad, another one in the next pass (211 extra GND traces on that board). The router now treats the stitching vias of a net as what they are, copper joined by the net's zone: a pad routed to any one of them is connected. Same board: 0 unrouted, GND traces 104 / 228 mm (120 / 390 mm without the vias), KiCad DRC clean. --parity keeps Freerouting's behaviour.

fastroute 0.1.10

Choose a tag to compare

@parisxmas parisxmas released this 06 Oct 17:05

Watch the router work: a live view of the board in your browser. Wiring now stays inside the board outline. --parity still reproduces Freerouting bit for bit.

Downloads

File For
fastroute-kicad-0.1.10.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.10-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

Live routing view (new)

Live routing view

fastroute --live (or the new checkbox Show the routing live in the web browser in the KiCad plugin) opens a local page at http://127.0.0.1:7878 while the board is routed:

  • the board with traces, vias, pads, keepouts and the remaining airlines, per layer; new traces light up, ripped-up traces fade out in red
  • unrouted connections (and % connected), the current stage (fanout, autorouter, multi-start, optimizer), progress of the running pass with routed / failed / ripped / skipped
  • trace count, via count, total trace length, clearance violations, score
  • a chart of unrouted connections per pass, a pass table and the log
  • zoom, pan, layer toggles; hover shows net, layer and width, click highlights a net
  • Stop ends the run and keeps the best result so far (like Ctrl+C)

The page is served by fastroute itself (no internet, no extra software). Routing results are the same with or without it; when nobody is watching it costs nothing, while watching about 2 % of the routing time.

Command line: --live[=PORT] (the next free port is used if 7878 is taken). Headless plugin: route_cli.py --live.

Router

  • Wiring stays inside the board outline. Freerouting lets the traces of any net that has a pad on or outside the board edge (edge connectors, castellated pads, headers drawn across Edge.Cuts) ignore the outline completely, so such a net could run outside the board anywhere. The area outside the outline is now off limits except right around those edge pads. On a Feather board with headers across the edge, VSYS traces ran up to 1.4 mm outside the board; now none do. Boards without pads on the edge are not affected. --parity keeps Freerouting's behaviour.

fastroute 0.1.8

Choose a tag to compare

@parisxmas parisxmas released this 06 Oct 15:56

Fixes for #1. --parity still reproduces Freerouting bit for bit on all 20 benchmark boards.

Downloads

File For
fastroute-kicad-0.1.8.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.8-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

KiCad plugin

  • Copper-to-edge clearance around cutouts inside the board. KiCad exports an inner Edge.Cuts contour as a keepout exactly on the edge, and the clearance applied only to the outer outline, so traces could run along the edge of a cutout. Cutouts are now kept clear by the board's copper-to-edge clearance.
  • Local clearance of pads without a net (fiducials, mounting pads) is respected. KiCad's Specctra export has no per-pad clearance.
  • New option: keep all existing tracks unchanged (--keep-existing, a checkbox in the dialog). Only the open connections are routed. Without it, unlocked existing tracks are part of the routing, and the optimizer may move, shorten or reroute them. Locked tracks are always kept.

Router

  • ObstacleExpansionRoom: tree shape is null no longer panics. The shape is skipped with one warning.
  • Footprints without a library id are written as "" in the session file. Before, KiCad could not import the session.

fastroute 0.1.7

Choose a tag to compare

@parisxmas parisxmas released this 03 Oct 19:15

Fixes from a tester's report on an 874-part, 6-layer board. On that board the routed result now passes KiCad's DRC without clearance errors (3 before), in 145 s instead of 628 s and with 2.8 GB instead of 3.8 GB of memory. --parity still reproduces Freerouting bit for bit on all 20 benchmark boards.

Downloads

File For
fastroute-kicad-0.1.7.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.7-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

Design rules (KiCad plugin)

  • Rules that cannot be carried over are reported. Before routing, every .kicad_dru rule that matters for routing but is not applied is listed with the reason (e.g. "its condition uses insideArea()"). Clearance rules with A.Type/B.Type conditions are now applied to all item types (stricter).
  • Two net classes: the larger clearance wins, as in KiCad (Freerouting could use the smaller one).
  • hole_clearance rules with pad conditions (hole size, footprint, net class) become keepout circles around the holes.
  • length (max …): nets that end up longer are listed after routing (the router itself does not enforce maximum lengths).
  • Rule areas that forbid tracks only no longer block vias (on boards with more than two layers).
  • Vias next to other copper: a fanout could fall back to a via of the default class that was too close for a stricter class; such fallbacks now keep the net's own clearance. A 5 µm clearance margin (--clearance-margin-um) covers the difference between the router's polygons and KiCad's exact circles.
  • New --obstacle-zones=NETS_OR_CLASSES (command line tool): zones that must stay fixed copper, e.g. a current path poured on an outer layer; other nets route around their fill.

Routing

  • Ignored net classes (ignore_net_classes) are no longer counted as unrouted work: no extra multi-start runs on a finished board, and the result shows them separately ("315 of the unrouted connections are in ignored net classes").
  • Optimizer: a pass cut short by its time budget keeps the improvements it found; progress lines every 30 s.
  • Progress during routing shows the current number of unrouted connections; a pass that makes the board much worse than the best so far stops early instead of running to its end.

Details: docs/IMPROVEMENTS.md and the KiCad plugin README.

fastroute 0.1.6

Choose a tag to compare

@parisxmas parisxmas released this 03 Oct 16:53

Fewer phantom "unrouted" connections and less wasted routing time. --parity still reproduces Freerouting bit for bit on all 20 benchmark boards.

Downloads

File For
fastroute-kicad-0.1.6.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.6-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

Routing

  • Touching copper counts as connected. Pads of a net that touch each other, or a via inside a pad but off its center, were treated as unconnected: the router "routed" them again in every pass without adding anything, and reported them as unrouted.
  • KiCad traces that end just next to a pad center are joined to it. KiCad's Specctra export rounds locked traces so that they can end e.g. 0.5 µm next to the pad center, which did not count as a connection. On the lora_node test board: 11 → 2 unrouted (KiCad's own DRC already counted them as connected).
  • Connections that cannot be routed at all are skipped after their second failure (blocked by pins, keepouts or locked traces even on the empty board) instead of searching the whole board again in every pass.
  • Fixed a possible endless loop around a closed ring of traces.

On 17 test boards that leave connections unrouted: 173 → 101 unrouted connections, no board worse.

Diagnostics

  • --diagnose now also routes each unrouted connection on the final board as the autorouter would and reports why it failed (no path, insertion failed, items it would have to rip).

Details and measurements, including two experiments that were not adopted: docs/IMPROVEMENTS.md.

fastroute 0.1.5

Choose a tag to compare

@parisxmas parisxmas released this 03 Oct 12:27

Memory and diagnostics release. Routing results are unchanged: --parity still reproduces Freerouting bit for bit on all 20 benchmark boards, and the default mode gives the same boards as 0.1.4.

Downloads

File For
fastroute-kicad-0.1.5.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.5-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

Much less memory in the default (parallel) mode

The parallel autorouter and optimizer copied the whole board for every connection and candidate in flight, and kept those copies until their results were used. Board copies now share their data until they change, workers keep only their changes, and the optimizer keeps a board only for a candidate that can still win.

Board 0.1.4 0.1.5
874 parts, 6 layers (routing) 2.6 GB 1.1 GB, 11 % faster
265 parts, 2 layers (optimizer) 2.9 GB 1.2 GB
CM5_MINIMA_3 (routing) 851 MB 445 MB
interf_u (full run) 880 MB 511 MB

Across 92 test boards the total peak memory dropped by a third and the total time by 7 %. The exact mode (--parity, single thread) is 3–4 % slower.

New options

  • --report=FILE: JSON summary of a run — statistics, timings, every unrouted connection (net, pins, layers, position) and every clearance violation.
  • --diagnose (with --report): routes each unrouted connection alone on the loaded board and tells whether other traces are in the way (congestion) or the geometry or rules block it.
  • --initial-session=FILE: continue from a session file, e.g. the checkpoint of an earlier run, and keep routing and optimizing it.

Other

  • scripts/bench.py benchmarks routing quality, time and memory over the benchmark boards and compares runs; the KiCad plugin's route_cli.py --export-only writes the board as the plugin routes it.
  • Open Collective: https://opencollective.com/parismxas

Measurements and details: docs/PERFORMANCE.md.

fastroute 0.1.4

Choose a tag to compare

@parisxmas parisxmas released this 29 Sep 17:36

First public release of fastroute, a fast open-source PCB autorouter for KiCad and Specctra DSN — a Rust port of Freerouting with bug fixes and new features. Website: https://fastroute.baltavista.com

Downloads

File For
fastroute-kicad-0.1.4.zip KiCad plugin (KiCad 7 or newer). Bundles fastroute for Windows x64, macOS (Apple Silicon and Intel) and Linux (x64, arm64). Install with Plugin and Content Manager → Install from File… — do not unzip.
fastroute-0.1.4-<platform>.tar.gz / .zip Command line binary only: fastroute -de board.dsn -do board.ses
SHA256SUMS.txt Checksums

Linux binaries need glibc 2.17 or newer (practically every distribution since 2014). The binaries are not code-signed yet; the KiCad plugin sets them up itself on macOS and Linux.

Highlights

  • 4–5× faster than Freerouting on its benchmark boards, 20–300 MB of memory instead of 1–2 GB, no Java. --parity reproduces Freerouting's results bit for bit.
  • Freerouting bugs fixed: the optimizer never ran after the autorouter stopped itself; boards scoring below zero could not be improved; connections through a via into a plane were rejected; ignored net classes still got fanout stubs; unroutable pins made big nets oscillate.
  • Parallel autorouting passes and optimizer, multi-start routing, undo of bad passes, checkpoints and --max-time.
  • Length matching (--tune): meanders after routing, clearance-checked; via heights count as in KiCad.
  • Controlled impedance: per-layer widths from the stackup (impedance_cli.py), no neck-down for those classes.
  • Differential pairs (--pairs): routed first and side by side, held while the rest of the board is routed; intra-pair skew with (within_diff_pairs) skew rules.
  • KiCad plugin: .kicad_dru rules carried over (class clearances, per-layer widths, length/skew rules, diff pair gaps), zones, rule areas and copper texts exported correctly, zones refilled afterwards.

Full list of changes and measurements: docs/IMPROVEMENTS.md.