[1] https://www.reddit.com/r/KiCad/comments/icqvfi/no_autoroutin...
[1] https://www.reddit.com/r/KiCad/comments/icqvfi/no_autoroutin...
They mention a host of things that the autorouters are bad at as evidence that autorouters are useless, instead of recognizing the opportunity to improve autorouters to make their jobs easier.
The 'travelling salesman' argument was my favorite though, because it's somehow okay for a human to provide a working but non-optimal solution, but the bar for the computer is finding the optimal solution.
That said, they aren't completely useless (though I've never had a case where I needed it), but they are also a very high effort to improve: it's a thorny optimisation problem to start with, but also what is not appreciated is it's also a really difficult user interface problem, since the designer needs to be able to specify the requirements to the autorouter in high precision enough to get a good result, while also taking less time than just doing the routing themselves (which for experienced PCB designers is not really that long for most cases), especially when placement is just as important for a good result, intermingles with routing to a large degree, and is even harder to specify (placement depends on finding a good compromise between thermal, electrical, and mechanical goals, all of which are difficult to specify precisely).
Given they're a big trap to newcomers and also a huge amount of effort for something which has pretty niche applications in practice, I'm not suprised the team behind KiCAD decided it was not worth the effort. If you (or someone else) thinks they can make a more useful one, it's definitely a space where improvements on the current state of tooling can be improved, but don't underestimate the effort involved.
>The designer needs to be able to specify the requirements to the autorouter in high precision enough to get a good result, while also taking less time than just doing the routing themselves
Aren't most of those rules the same between projects. Once you have a good setup you're good to go on many projects?
Now what if the board is more complex? You have some sensitive analog signals, high speed digital signals, and some RF stuff that. Do you take the time to set up a room in Altium with special rules for the RF stuff? Make some complicated rules so that the high speed digital would mess up either of the other things I mentioned? Could be done, but the trial and error of getting all the design rules right is probably more work than just doing it.
The problem is that easy stuff is easy, and doesn't need an autorouter. Hard stuff is still hard with the autorouter and unlikely to save that much time. It's hard to find a use case where you come out ahead. Maybe a board with a massive amount of GPIO and nothing else?
I, too, am amused by how wound up some people get about this. It's a tool.
Another big part of why the autorouter might underperform is it's entirely subject to where you've put the components, whereas a human will generally do placement and routing in parallel to at least some extent. Placement is if anything the harder problem in PCB design and there's no systems currently that really combine the two operations (there are auto-placers but they're generally even worse than autorouters, for similar reasons of the requirements are complex and hard to specify).
In general these kinds of systems run into a bit of a catch 22: in order to use them well you need to have enough experience to do the job yourself, and be able to effectively evaluate the output. But when you have this you find it's faster and easier to do it yourself. And expecting it to be helpful for beginners is a bit like expecting github's copilot to be a shortcut for beginners: the tool is going to throw out bad results sometimes and the beginner is not going to be able to evaluate that or know how to fix it.
Like I said, I think there's room for improvement here, both in terms of interface and in terms of algorithms. But it's far from non-trivial. As for TopoR, it does look like one of the better options, and I really like that it's challenging the 45 degree orthodoxy which is basically a relic from limitations of early PCB CAD which is sadly still solidified in the tools (even in a modern PCB CAD tool it's hard to route something at an arbitrary angle, and it tends to break routing features like push-and-shove), but I haven't had a situation where I've been looking to try it myself (part of this is PCB routing takes up a relatively small portion of my time: if I spent 70% of my time doing it like some specialists I would definitely be spending more time trying to optimise it. As it is it's about 20% of time I spend designing PCBs and I spend less than half my time at work designing PCBs).
The real problem that needs to be solved is automatically placing the components optimally, not routing the PCB. Routing the PCB is just colouring in.
Sounds like a job for DL! No, really, I'm serious.
If you can feed in enough existing layouts, and give the inputs enough information in terms of what signals are differential pairs, what is the intended impedance, what is high-speed, etc. it might be possible to have a system learn how to do this.
I'd think there's enough gerbers and such laying around the Internet from reference designs to have a big enough data set.
Free business idea for anyone who wants to disrupt the EDA market...
You can get away with murder at 1MHz if your trace length isn't too bad but you absolutely do need to worry about signal integrity over that speed or large boards.
When I was a beginner starting out with 65C02's my autorouted boards would work fine around 1MHz but it was impossible to get them working at all at 10MHz until I rerouted the board by hand taking care to think about signal integrity, current return path etc.
Things like trace length, reflections, power dips when the bus is all 1's, electro and/or magnetic crosstalk, etc. become an issue at around 50MHz, although I've never gone that high in a hobbyist design...
When a bunch of professionals say that something is useless, pehaps you should pay attention?
The problem is that most PCB boards are extremely constrained routing environments. The boards that KiCad is used to design are extremely so. Vias go completely through the board. Even worse, vias tend to be larger than tracks. Consequently, changing a layer is expensive and introduces more obstacles. Your subcircuit part is also an obstacle on your routing layer. And, generally, you only get 2 "routing" layers (top and bottom) since the other two layers are used to route power and ground.
There is a reason why boards that have FPGAs on them tend to use blind vias which don't penetrate the whole board--they can't route to the balls otherwise. They also tend to be 8+ layer boards. This represents real money and if people could do otherwise (either by hand or autorouter), they would.
However, let's back this out to somewhere that "autorouters" are actually useful--VLSI. As someone who has done VLSI design for a very long time, I can pinpoint the moment when VLSI autorouters went from useless to useful--when metal layer counts hit 4+ layers (local connect, horizontal connect, vertical connect, and power layer).
VLSI does not have the same obstacle issues that PCBs have. Vias only go layer to layer unless you design otherwise. Vias also are smaller than tracks. Consequently, you can practically guarantee that you can interconnect things with enough space. Your subcircuit doesn't also interfere with one of your routing layers. And VLSI design has a LOT more money to throw at developing autorouters.
Even so, VLSI autorouting and placement still looks like crap 25 years on. Nobody has yet been able to come up with an autorouter that can identify a datapath and lay things out in a coherent fashion. And there is good money in doing so.
People like you then come along and are suggesting that the KiCad developers spend a lot of time, on a known very hard computational problem, that people failed horribly to solve in the past with a lot more money and will likely only work well on a minority of expensive PCB boards (8+ layers with blind/buried via).
Color me unsurprised when the responses are less than hospitable.
The real problem is that third party tool went abandoned for years due to a major CAD company claimed copyright ownership due to the author's former employment with them (the traditional ownership of IP in employment).
That former author of the router, even though he disputed the timeline of the code's creation being outside employment, basically said "I'm in retirement on a fixed income, fuck this I ain't dealing with it" and abandoned the router. Then over the last 8 years there were random forks that quickly petered out because well, it's all very very niche software.
The KiCad project isn't touching that code due to (a) it being in Java when everyone is a C/C++ domain expert (b) the legal claims by that big company basically make that specific codebase poison so we need to stay away from it.
As for creating a new autorouter, it has come up multiple times. The problem is, anyone can create a autorouter but a good one is a whole different ballgame The best way to describe the problem is while the PCB layout is 2D. Routing is actually a multi-dimensional problem requiring input of all kinds of parameters to do it good. It's just we are a small group of electrical engineering oriented guys and we just don't have the interest in spending our limited free time on it.
We are totally open to somebody contributing it, but alas, everyone expects us, the active contributors to do it instead. You know, that horrible pitfall of open source.
Although i prefer to route critical stuff by hand (high current, high frequency, differential pairs, etc...) and let the autorouter to do the rest.
But it's written in Java, which is not really my personal preference. Also there was some performance issue when board outline contained arcs, so i had to convert them to series of short lines which reclaimed the autorouting speed.
KiCad's "autorouter" was simply some button integration for use with Alfon's autorouter distribution back in the day. There's a plugin located in the freerouting/freerouting project that adds that button back to KiCad 6.
> What KiCad does have is "push and shove" routing, which is really nice. As you're trying to manually route a new trace, it will push existing traces out of the way as you incrementally route the new one. This is a huge time saver as you manually route your board.
But the real payoff will be in automatic component placement, since that's 85% of the work anyway. And I think the same trends apply there too, it will just take longer.
I wonder how much separable the problems of placement and routing are. That said, I'd love to see a function in KiCad that does auto-placement (more than I want auto-routing).
Many current autorouters already use "AI" (often genetic programming).
My understanding is that it sounds great but the one magical part about the EE domain is we have an absurd selection of ICs being made every day by companies that are tailor made for every application under the sun. It's the best way to cut physical hardware costs down by every penny possible for volume manufacturing and it's trivial for a human to design schematics and board layouts tailored to the chip in the grand scheme of things.
The problem then becomes that the AI would need to be constantly trained on newer and newer human designed samples for each new chip to keep up.