element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Autodesk EAGLE
  • Products
  • More
Autodesk EAGLE
EAGLE User Support (English) Autorouting ... and net prioritisation
  • Blog
  • Forum
  • Documents
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Autodesk EAGLE to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Suggested Answer
  • Replies 4 replies
  • Answers 2 answers
  • Subscribers 180 subscribers
  • Views 1021 views
  • Users 0 members are here
  • board
  • eagle
  • autorouter
Related

Autorouting ... and net prioritisation

Former Member
Former Member over 10 years ago

My apologies if this one has been asked before but if it has, I can't find it. 

 

WARNING!  Contains auto router question.... people with religious or fanatical zeal and/or opinions regarding auto routers ... look away now.... 

 

Ok, this is a it of a doozy.  I have a sort-of workaround but I'm not particularly happy with it as it involves a fair bit more work than it really should need. 

 

The question is pretty simple ... how can I enforce a net prioritisation for the Autorouter in Eagle? 

 

About now ... a million people will probably be wondering "why" or of what use is that, but it is actually pretty important and let me explain.  When I'm laying out a board, I typically start with the layout of tracks in the following order:

Clock Lines

Busses

Power/Ground Planes

... everything else ...

 

Put simply, for clock lines, I want them as *direct* as possible, with as few (preferably no) vias as possible. 

After that, I think lay out the relevant busses and if there are differential paired lines, then they go next. 

After that, power and ground (for 4 layer and more, I usually have a separate plane for those but I digress)

... and finally, everything else gets done. 

 

The way I've been doing it up until now, is I typically start with a throw down of components, and then start by getting the auto router to start with individual clock nets.  Typically I'll look at what it suggests and then either I'lll move stuff around or I'll adjust it manually but I try to have stuff laid out that is routed by the auto-router in the same or a similar fashion to the way that I would do it.  When it doesn't do what I think it would do, I usually try to work out why. 

 

After that, I then attack the various busses and so froth.  Now ... the question is that if you do this, and you wind up with a board, if you just rip up the board and then let the auto-router have play at it, it will in 95% of the cases make a complete and utter mess of it.  In most of my cases, simply applying a manual priority usually produces a much better job (even if you use nothing other than the auto-router). 

 

The big hassle with this is that it is *horribly* time consuming.  Is there a way of letting the auto-router work on a net class list (vs an individual net) and if there is, is there a way of then telling it to then assigning a priority so that it starts with say a net class of say "clock", then progresses to "bus" and so on ... 

  • Sign in to reply
  • Cancel
Parents
  • autodeskguest
    0 autodeskguest over 10 years ago

    After that, I then attack the various busses and so froth.  Now ... the

    question is that if you do this, and you wind up with a board, if you

    just rip up the board and then let the auto-router have play at it, it

    will in 95% of the cases make a complete and utter mess of it.  In most

    of my cases, simply applying a manual priority usually produces a much

    better job (even if you use nothing other than the auto-router).

     

    The big hassle with this is that it is horribly time consuming.  Is

    there a way of letting the auto-router work on a net class list (vs an

    individual net) and if there is, is there a way of then telling it to

    then assigning a priority so that it starts with say a net class of say

    "clock", then progresses to "bus" and so on ...

     

     

    Hi Brendon,

     

    I hope you're doing well. I can think of a couple of ways to do this.

    There's nothing built into EAGLE to perform this type of task.

     

    What you can do is create a ULP that looks are your classes and

    determines what nets belong to it. The showclass ULP is probably 90% of

    the way there since it pretty much does this.

     

    Once you know what nets belong to each netclass then the ULP could write

    a script file that passes these nets to the autorouter and it would do

    this for each netclass. Here's a simple example that includes loading an

    Autorouter configuration file.

     

    AUTO LOAD viadrops;

    AUTO GND +5V +3.3V -12V +12V;

    AUTO LOAD default;

    AUTO N$1 N$2 N$3 N$4 ...;

     

    That's an idea of what the resulting script might look like.

     

    I know it's not built-in but I think this is pretty doable.

     

    hth,

    Jorge Garcia

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
Reply
  • autodeskguest
    0 autodeskguest over 10 years ago

    After that, I then attack the various busses and so froth.  Now ... the

    question is that if you do this, and you wind up with a board, if you

    just rip up the board and then let the auto-router have play at it, it

    will in 95% of the cases make a complete and utter mess of it.  In most

    of my cases, simply applying a manual priority usually produces a much

    better job (even if you use nothing other than the auto-router).

     

    The big hassle with this is that it is horribly time consuming.  Is

    there a way of letting the auto-router work on a net class list (vs an

    individual net) and if there is, is there a way of then telling it to

    then assigning a priority so that it starts with say a net class of say

    "clock", then progresses to "bus" and so on ...

     

     

    Hi Brendon,

     

    I hope you're doing well. I can think of a couple of ways to do this.

    There's nothing built into EAGLE to perform this type of task.

     

    What you can do is create a ULP that looks are your classes and

    determines what nets belong to it. The showclass ULP is probably 90% of

    the way there since it pretty much does this.

     

    Once you know what nets belong to each netclass then the ULP could write

    a script file that passes these nets to the autorouter and it would do

    this for each netclass. Here's a simple example that includes loading an

    Autorouter configuration file.

     

    AUTO LOAD viadrops;

    AUTO GND +5V +3.3V -12V +12V;

    AUTO LOAD default;

    AUTO N$1 N$2 N$3 N$4 ...;

     

    That's an idea of what the resulting script might look like.

     

    I know it's not built-in but I think this is pretty doable.

     

    hth,

    Jorge Garcia

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
Children
  • autodeskguest
    0 autodeskguest over 10 years ago in reply to autodeskguest

    Jorge Garcia wrote on Mon, 23 November 2015 12:03

    Once you know what nets belong to each netclass then the ULP could

    write

    a script file that passes these nets to the autorouter and it would do

     

    this for each netclass. Here's a simple example that includes loading

    an

    Autorouter configuration file.

     

    AUTO LOAD viadrops;

    AUTO GND +5V +3.3V -12V +12V;

    AUTO LOAD default;

    AUTO N$1 N$2 N$3 N$4 ...;

     

     

    While this answers the question as asked, it really needs to be pointed out

    that doing this is a bad idea.  Separate run of AUTO will consider anything

    routed by previous runs as immutable.  There is no flexibility to rip and

    and re-route.  A previous run can very easily block access to yet unrouted

    pins and the like, which will then be unroutable.

     

    This method also prevents using multiple autorouter passes to refine the

    route.  For example, I usually use 8 passes.  The first few are optimized

    to find a solution, even it is not very efficient and uses a lot of vias.

    Subsequent passes then change the weights to refine the overall route.

    Once a solution has been found, It can't be undone in subsequent passes.

    You can therefore be a lot more aggressive in later passes in trying to

    minimize vias, keep things off the ground plane or on the outer layers,

    etc.  Actually I optimize for minimum vias in the middle, then relax the

    via cost towards the end to minimize tracks in polygons, like the ground

    layer.

     

    The multiple passes also work together as sortof a annealing process, with

    parameters changed less between later passes.

     

    Again, the method suggested here prevents all these things, to the point I

    doubt you'll get a route you actually want to produce boards with.

    --

    Web access to CadSoft support forums at www.eaglecentral.ca.  Where the CadSoft EAGLE community meets.

     

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • Former Member
    0 Former Member over 10 years ago in reply to autodeskguest

    CadSoft Guest wrote:

     

    Jorge Garcia wrote on Mon, 23 November 2015 12:03

    Once you know what nets belong to each netclass then the ULP could

    write

    a script file that passes these nets to the autorouter and it would do

     

    this for each netclass. Here's a simple example that includes loading

    an

    Autorouter configuration file.

     

    AUTO LOAD viadrops;

    AUTO GND +5V +3.3V -12V +12V;

    AUTO LOAD default;

    AUTO N$1 N$2 N$3 N$4 ...;

     

     

    While this answers the question as asked, it really needs to be pointed out

    that doing this is a bad idea.  Separate run of AUTO will consider anything

    routed by previous runs as immutable.  There is no flexibility to rip and

    and re-route.  A previous run can very easily block access to yet unrouted

    pins and the like, which will then be unroutable.

     

    This method also prevents using multiple autorouter passes to refine the

    route.  For example, I usually use 8 passes.  The first few are optimized

    to find a solution, even it is not very efficient and uses a lot of vias.

    Subsequent passes then change the weights to refine the overall route.

    Once a solution has been found, It can't be undone in subsequent passes.

    You can therefore be a lot more aggressive in later passes in trying to

    minimize vias, keep things off the ground plane or on the outer layers,

    etc.  Actually I optimize for minimum vias in the middle, then relax the

    via cost towards the end to minimize tracks in polygons, like the ground

    layer.

     

    The multiple passes also work together as sortof a annealing process, with

    parameters changed less between later passes.

     

    Again, the method suggested here prevents all these things, to the point I

    doubt you'll get a route you actually want to produce boards with.

     

    Thanks for the reply Jorge and my apologies for tardiness of my response as I've been dealing with a recent death in the family. 

     

    In regard to your initial suggestion - that is pretty much the conclusion that I came to and I knocked together some Perl which produced a series of commands for execution that sort of achieve that end.  In regard to general immutability of previous runs with the auto-router, that is a definite issue that I've run into - especially when dealing with fan-outs from 208+ pin packages where a ground line would cut *right* across bunch of other pins, so close that it is then impossible to do *anything*  with it unless you manually rip up the offending track and then drag it out of the way so that it then leaves you room to do *something* .... 

     

    It would be *nice* if we could somehow 'educate' the auto router in regard to which tracks it would consider 'immutable' and which ones it shouldn't thereby allowing it to rip up/move previously laid down tracks, but my suspicion that this would involve a fair bit of work for probably dubious benefit. 

     

    That said though, I still think that somehow educating the auto router to work with a prioritisation of the net classes (say the high number of the net class, the higher the priority and would thereby get preferential treatment regarding routing) would still yield better results as in my experience, the auto-router still produces some "dubious" decisions in regard to the way that it lays out stuff (professional board layout engineers certainly don't have anything to worry about regarding the security of their jobs). 

     

    Of course ... this said, I think I've got a wish list about a mile long in regard to what I would *like* the board layout and the auto-router tools to be able to do ...  (my pet peeve at the moment is address and data bus lines which aren't matched and wind up going in all directions - which really screws up things which are timing dependant - actually even the board layout tool really does need a way to handle that in a nice fashion ... one of the things in Altium that is really *nice*). 

     

     

    /BGM

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube