You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This works pretty well, but both algorithms are ad hoc and quite complex.
The aims of wiring should be:
Almost everything is laid out optimally by automatic tools
Exceptions can easily be adjusted manually
Applying whole-sheet layout should be deterministic and therefore idempotent (do it twice and you get the same answer).
The current code is good enough that concepts and specific cases can now be identified easily motivating a rewrite. SmartAutoroute is good enough. BusWireSeparate fails 3. and 1. However, the current methods for optimal separation are pretty good. They need to be re-implemented more consistently.
Method
Separation consists of a pipeline:
Net Overlap. Identify same-net overlapping wire segments. Re-autoroute where a simpler connection could be made by partly (from component output wire source) overlapping with same-net wires already routed. The overlapped part, however complex, does not make the layout more visually complex.
After this all processing consists of moving movable wire segments (eg not those connected directly to ports) arbitrarily but in such a way that they do not cross symbol boundaries.
A port-connected segment can if needed be divided into two parts connected by a segment of arbitrary length and opposite orientation.
Overlapped segments always stay overlapped
Clustering. Separate wires into independent clusters that can be processed independently because they will never interfere with each other. This is a heuristic process.
Clusters are independent when wires are well-separated and (even when moved a bit) will never cross.
A segment from another cluster may be added to a cluster in some circumstances where its possible positions do not affect separation of the cluster it comes from.
1D segment ordering Within a cluster segments are re-ordered and/or moved to reduce wire crossings and eliminate different different-net overlap.
1D segment Separation. Within a cluster segments are adjusted (without re-ordering) so that wires are optimally spaced around each other and components
Current Algorithm
Existing overlaps are respected but no effort is made to reroute for better same-net overlap. This should be done.
Currently an ad hoc 1D algorithm is used which sort-of works. It sometimes "breaks" what should be a single cluster into two.
Wire crossings are reduced but the operation is not idempotent, nor always optimal. Better efforts to implement this are needed.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Currently Issie uses for schematic wiring:
SmartAutoroute |> BusWireSeparate.
This works pretty well, but both algorithms are ad hoc and quite complex.
The aims of wiring should be:
The current code is good enough that concepts and specific cases can now be identified easily motivating a rewrite. SmartAutoroute is good enough. BusWireSeparate fails 3. and 1. However, the current methods for optimal separation are pretty good. They need to be re-implemented more consistently.
Method
Separation consists of a pipeline:
Current Algorithm
Beta Was this translation helpful? Give feedback.
All reactions