Automatic Optimized Parts placement on PCB

Structuring schema by blocks, normally decreases the problems :thinking: :thought_balloon:
(both for humans and for some clear s/w processes that could be applied for each problem to be solved separately and one at a time, decoupling the efforts block per blocks…).

Have a look to the example used in ‘layout_cloner’ utility (https://github.com/tlantela/KiCAD_layout_cloner :+1:)

  • it gives an idea of what could be expected from a “2-layers hierarchical schema” (Lev-1 top layer + Lev-2 sub-layer(s)).

  • As it could be observed in KiCad V5, the parts of each Lev-2 pages are well regrouped separately block by block (when importing the netlist in pcbnew).
    With the same relative positions and with its different part ref. belonging to a block.

  • That’s fine.
    Selecting and Moving those blocks in pcbnew is an ‘other story’, while expecting to be improved in V6 (Comparing V4&V5 to other ECAD’s, competitors are still better… :sleepy: )

  • Seeing the V5 placement result, one could deduce ‘net weigths’ not considered at all
    (would have been different if it were the case…).

  • It should be needed then to apply additional different treatments apart the V5 one.
    for example, counting and computing all net lengthes between pin’s parts to position until an ‘average *weigth within the group would be minimal within each groups’… *
    It would give probably some good results, at the effort of some affordable python scripts to be launched from eeschema console…

A good s/w programming ‘python exercice’ for master degree students :wink: (among some others interesting exercices) … Have we s/w students interested in developping for fun some kind of mokeup ?

  • Route and optimise only one (of each different groups) and apply ‘layout cloner utility’ to the other untouched ones, then finish the remaining details… Watch some Web tutos explaining this utility.

  • Could become a bunch of separate dedicated recipies (which could be sequenced automatically step-by-step, calling or not, each of them when necessary…).

  • With a ‘3-layers schema’ example, it reveals some bad surprise :sleepy:: the ‘netlist import’ seems to be limited to ‘Top+2nd layer’, Lev-3 being not considered and then not grouped where the parts should belong to:boom:
    Probably will be the same for more than 3-layers (but not yet tried…).

  • For my DIY leisure time projects, I’m structuring schema a hierarchical way, trying to limit hierarchy up to 4-layers, sufficiant as not tremendous design…
    (from profesionnal experience could be not sufficiant on heavy designs…).

It is effectively the global process to follow,

  • with accurate details to express somewhere,

  • being the weakest point and time-consuming critical transition…

  • ‘just to include’ the optimum necessary ones for a machine to make the part pre-placement job an easier way,
    so as to accelerate this transition phase.
    Focussed only on short rastnets, parts positionning and orientions, parts fanout and also power planes.
    Bad placement introducing additional problems conducting to a bad or impossible routing

  • able to be used by DIY makers or OHW communities using KiCad.

Which script and queries are you mentionning similar to what eeschema does ?

1 Like

What differencies w.r.t. @jenschr’s one ?

Ian’s has been further developed (as ideas) and also better integrated to KiCad as an action plugin.

EDIT: see the history here.

In another thread @maui linked to the OpenROAD project. It has some kind of an autoplacer: https://github.com/The-OpenROAD-Project/SA-PCB. I wonder how it can be used, how it works and what kind of results it gives.

To me it looks like optimization by wire length.

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.