PCB and Routing Solutions: Spreading and Centering Traces

By Julie Weber

This is the third post in this routing series. View the first and second post.

Board fabricators will tell everyone that spacing is king. If the traces can be spread apart and centered between via and/or pin pads, then it will result in higher yields during the fabrication process. Fewer shorts will be created and less work will be required to remove them.

In Expedition PCB and Xpedition PCB Layout, we have a “Spread” routine in the “Auto Route” dialog that will automatically spread the traces apart and center them between pads. Based on my discussions with many AEs and customers, I suspect that many have tried to simply run it from the “Auto Route” dialog and found that it did not work as expected.

In fact, the expectation was that it would only spread the traces. Centering them turns out to be an unexpected yet wonderful bonus. The reason why it doesn’t work as expected is due to the fact that it requires some very specific setup. First, a text side-file is required that has the appropriate spacing values per layer; and second, a check-box in the “Auto Route” dialog needs to be set.  Let’s begin with the text side-file.


This file needs to be created and placed in the “Config” directory for the design you are working on.


The contents of this text file include the units, the layer and the corresponding spread clearance for that layer.


Units are “th.” By default, the units are the design units; so in most cases, this line is not even needed.

Then list the layers to be spread and the trace-to-trace clearance desired. Here, on both layers 3 and 4, the trace-to-trace spread clearance is 12th.

Auto Route Dialog


To enable “Spread” to work, the ‘Allow “Cleanup” if not routed 100%’ check-box needs to be checked. This is because when “Spread” is included with a number of other routing passes, it (along with other cleanup routines) should usually not be run unless the design is routed completely. If you are just using “Spread,” this check-box must be checked.

Run the “Spread” pass with a 1-3 effort.  It will spread the traces as much as possible up to the spread clearance specified in the “SpreadTo.txt” file.


Routing before “Spread”


After “Spread”


Note that the differential pairs are not spread apart, but they are also spread away from other nets.

Caveat:  “Spread” does not push traces over via or pin pads. Because of this, you may want to move some traces around (as I did in this example) before running “Spread.”  This will maximize the effect of spreading and prevent extra jogs in traces that are trapped between vias in open space.

Centering Traces

If the spread value is large enough, then it will also center traces between vias and pin pads. What is considered large enough? For example, if a trace will be centered between via pads with a trace-to-via clearance value of 8th, then any spread value equal to or larger than 8th will center the traces. You don’t have to get the value exact; in fact, usually it will be larger due to the desire to spread the traces themselves significantly – so that will work just fine!


Before “Spread”

The white arrows point to some places where the clearance is at minimum spacing and it would be good to center or move the traces away from the pads.


After “Spread”

The traces are centered where necessary and move away as appropriate.  Note that it will center just one trace or even two if needed.



In the previous discussion, it was all about a method for centering traces.  Here we provide another method for spreading traces that also centers traces.  Which method do you like better?


4 thoughts about “PCB and Routing Solutions: Spreading and Centering Traces
  • I do like ability to correct non centered traces after routing. For me I typically take the time to constrain all my signals to center as I route. This way my cleanup is minimal.

  • You wrote:
    “I suspect that many have tried to simply run it from the “Auto Route” dialog and found that it did not work as expected.” and then you go on an on and on explaining all settings and files to be prepared to “make it work”.

    My first reaction would be to ask:
    Why are customer expecting the commands to behave in a way and the tools behaves in another? [Is this a misleading command name or the function is not clear or doe sit not do what it says it will do?]
    Why is this extra layer of settings really necessary? [It is clear that it adds some degree of flexibility, but it is really necessary?]
    Does this extra layer of setup prevent “normal not so knowledgeable user” to use the command? [Is the documentation too obscure, is the tool not asking for missing data and files?]]
    How do the settings change if I change the constraints of nets? [It would have to follow the CES values or do I have to manually track all changes on all layers. How about regions/rooms?]

    One one side VX is meant to simplify the tools for novice users and occasional users, on the other side you are explaining a complicated setup of a non intuitive command, quiet the opposite of the stated goal of VX.

    So to answer you question of which method do I like better, the answer is none.

    I like better that someone sits for a while and asks: why are user having troubles with this command and how can I make it more user friendly. Then he or her rethinks and rechecks the flow, formulates new specs and lets the programmers implement it better.


  • To Matija:
    My intent was to reveal a methodology for spreading and centering traces that exists today. I recognize that it could be better by eliminating the side-file and not requiring some other settings. However, if the settings are made properly, the software works amazingly well.

    I have engaged with engineering to improve the GUI and usability; but until some future release, at least we have some means to spread and center that will save many hours of manual editing.


  • Folks,
    Matija also pointed out that commas are not accepted as delimiters. We need to resolve this problem; but until that time, please use a decimal point if you need a delimiter in the value of the spacing. For example, if your units are mm, then 0.20 should be used instead of 0,20

Leave a Reply

This article first appeared on the Siemens Digital Industries Software blog at