Skip to content

TraceMaker 0.9.0

Latest

Choose a tag to compare

@DingoOz DingoOz released this 08 Oct 07:04
· 180 commits to main since this release

TraceMaker 0.9.0 adds routing controls that users asked for and the first contributions from outside the project: plane-aware routing for all-SMD boards, custom KiCad rules in the router, a faster search, a macOS build, and limits on which layers carry tracks.

Results

PCBench, 8 router variants, 120 s per board, judged by KiCad's own DRC (kicad-cli pcb drc). No board has an error added by routing.

Tier Boards 0.9.0 clean 0.8.0 clean Freerouting 2.5.0-RC12 (published)
A 40 100% 100% 100%
B 40 72.5% 70.0% 50.0%
C 30 60.0% 63.3% 46.7%
D 22 54.5% 54.5% 36.4%

Mean completion is 100%, 97.4%, 97.6% and 96.7% (0.8.0: 100%, 97.2%, 97.5%, 95.3%). Each change in the clean share is one board: tier B gained one, tier C lost one (multisensor_cr2032, one connection short at the time limit; at a fixed work budget that board routes identically before and after the search changes).

Test suite: 165 tests, passing in the release and CPU-only builds.

New

  • Layer limits (#6): --no-tracks-on In1.Cu,In2.Cu keeps new tracks off the named layers while vias still reach the planes; --layer-cost In1.Cu=4 makes a layer a last resort. On six 4-layer boards, track on the inner layers goes from 34% to 0%, or to 6% at factor 4.
  • Plane-aware routing for all-SMD boards (#1, @lucasbstn): --soft-zones, --keep-vias-off-pads, --via-in-pad and --first-nets, all opt-in.
  • Custom rules in the router (#3, @l3wi): disallow track and disallow via rules by net, net class, type and layer, including blind, buried and micro vias, and physical_hole_clearance. tracemaker route names the rules it cannot apply.
  • Faster search (#3, @l3wi): 1.1 to 1.5 times faster on PCBench boards and about 2.2 times faster on boards whose net classes use name patterns, with identical output on the 48 boards compared.
  • macOS build and Metal backend (#2, @l3wi): presets macos-metal and macos-cpu. Contributed and measured by its author; the project has no macOS machine or CI job, so it is untested here.
  • Placement: tracemaker-place --repair-input compares a minimal repair of an illegal input placement instead of the input itself (#3, @l3wi; off by default).

Changed behaviour

  • A rule area now blocks tracks when it forbids tracks and vias when it forbids vias, as KiCad reads it. Before, an area that forbade only tracks also blocked vias, and one that forbade only vias blocked nothing.
  • Boards with custom disallow or physical_hole_clearance rules route differently, because the router now obeys them. Under an unconditional physical_hole_clearance rule a track cannot end on a plated pad of its own net, which is how KiCad reports it.
  • Footprints entirely outside the board outline count as unplaced: placement may move them, and they no longer stretch the inferred outline.
  • Results at a time limit can differ from 0.8.0 because the search is faster. Results at a fixed work budget (--work) with default options were byte-identical on every board compared.

Known limits

  • The gates of 0.8.0 are still not met: from-scratch placement (85% against 90%) and dense-package boards (41% clean).
  • insideArea in a custom rule condition is read as "fully enclosed", where KiCad 10 treats it like intersectsArea; route warns about such disallow rules but TraceMaker's own DRC can miss them.
  • A dear layer that cannot be avoided makes that search slower. The Python bindings and the KiCad plugin do not expose the layer options yet.
  • The address-sanitizer and thread-sanitizer presets were not run end to end for this release.
  • CUDA 12.x is required for the GPU path.

Thanks

To @lucasbstn and @l3wi for the pull requests, and to @charlesh97 for the request behind the layer limits.