Differential Pair Routing

Explanatory diagram showing how differential signaling works

A differential signaling system is one where a signal is transmitted down a pair of tightly coupled carriers, one of these carrying the signal, the other carrying an equal but opposite image of the signal. Differential signaling was developed to cater for situations where the logic reference ground of the signal source could not be well connected to the logic reference ground of the load. An advantage of differential signaling is that it is inherently immune to common mode electrical noise, the most common interference artifact present in an electronic product. Another advantage of differential signaling is that it minimizes electromagnetic interference (EMI) generated from the signal pair.

Differential Pair PCB Routing

Differential pair PCB routing is a design technique employed to create a balanced transmission system able to carry differential (equal and opposite) signals across a printed circuit board. Typically, this differential routing will interface to an external differential transmission system, such as a connector and cable.

Example of differential routing on a PCB

It is important to note that while the coupling ratio achieved in a twisted pair differential cable may be better than 99%, the coupling achieved in differential pair routing will typically be less than 50%. Current expert opinion is that the PCB routing task is not to simply try and ensure a specific differential impedance is achieved, rather, to focus on ensuring the differential signal arrives in good condition at the target component as it travels from the external cabling.

According to Lee Ritchey, a noted industry high-speed PCB design expert, successful differential signaling requires:

  • Setting each of the routing signal impedances to half the incoming differential cable impedance.

  • That each of the two signal lines is properly terminated in its own characteristic impedance at the receiver end.

  • That the two lines should be of equal length, to within tolerances of the logic family and the circuit frequency used in the design. The primary focus should be on preserving the timing; match the lengths to satisfy the skew budget of the design. For example, for USB 3.x the length mismatch should be no greater than 10 mils.

  • Use the benefit of routing the two signals side-by-side to help achieve good quality routing of matched lengths. Where required, it is acceptable to separate to route around obstacles.

  • Layer changes are acceptable as long as the signal impedances are maintained.

For more information, refer to the article Differential Signaling Doesn't Require Differential Impedance, by Lee W. Ritchey, available from https://speedingedge.com/home/related-articles/.

Defining Differential Pairs During Design Capture

The approach you use to defining the differential pairs during design capture depends on how you plan to implement the design constraints for the project. Altium Designer supports two approaches to this. The first is to define the constraints as PCB design rules, in the PCB editor. The second approach is to use the Constraint Manager, a spreadsheet-like interface that allows you to start defining many of the constraints during design capture.

The approach used to define the design requirements – either using the Constraint Manager or defining them as Design Rules – is made when you set the Constraint Management option in the Create Project dialog during project creation. Learn more about Defining Design Requirements Using the Constraint Manager. Alternatively, learn more about Defining, Scoping and Managing Design Rules. There is also one-way support for switching a design-rules based project to the Constraint Manager.

Viewing and Managing Differential Pairs on the PCB

PCB panel in Differential Pair Editor mode

In the PCB editor, differential pair definitions are viewed and managed in the PCB panel in Differential Pairs Editor mode.

In Differential Pairs Editor mode, the three main regions of the panel are used to review and manage the differential pairs in the current PCB design:

  1. Differential Pair Classes – a list of all differential pair classes currently defined for this board. The USB3_85 class is selected. Double-click to edit the class, or right-click to define a new class. Differential pair classes are an optional design management feature.

  2. Differential Pairs – all of the differential pairs that are in the currently selected differential pair class (in the first region of the panel). The USB3_D differential pair is selected in the example image.

  3. Nets – the constituent (negative and positive) nets that are in the currently selected differential pair. The nets in this pair are USB3_D_N and USB3_D_P. The - and + displayed next to each pair member's net name is a system flag indicating if it is the positive or negative member of the pair. Right-click to control which columns are visible in this section of the panel () there is a definition of each column below

Working with Differential Pairs in the PCB Panel

Manually creating a new pair To manually create a new differential pair object directly in the PCB editor, click the Add button in the Differential Pair region of the PCB panel (). The Differential Pair dialog will open (Differential Pair dialog, used in the PCB editor to define a differential pair), select existing nets for both the positive and negative nets, name the pair, then click OK. Note that only available nets are listed for selection, any nets that are currently defined as part of an existing differential pair are not listed.
Edit a pair definition To edit an existing pair, double-click on the name in the Differential Pair region of the PCB panel, or select it and click the Edit button ().
Delete a pair To delete an existing differential pair, select its entry and click the Delete button in the panel ().
Creating pairs from the design nets If you are pairing nets that have a consistent naming scheme (i.e. they have a common prefix and a consistent positive/negative suffix such as, TX0_P and TX0_N), you can use the Create Differential Pairs From Nets dialog (Differential Pair dialog, used in the PCB editor to define a differential pair). Click the Create From Nets button in the PCB panel (Differential Pair dialog, used in the PCB editor to define a differential pair) to open the dialog. The dialog will automatically list all existing nets that comply with the filter settings at the top of the dialog. Configure the filter settings and assign the differential pair class if required. For any proposed pair that is not required, clear the Create checkbox.
Creating pairs using the wizard Clicking the Rule Wizard button () will launch the Differential Pair Rule Wizard, this is documented later on this page.
Create a differential pair class in the panel To create a new differential pair class, right-click in the Differential Pair Classes region of the panel and select Add Class from the context menu (). The Edit<ObjectKind>Class dialog will open, where you can enter a name for the class and add members.
Edit a differential pair class Double-click on an existing class to open the Edit<ObjectKind>Class dialog, where you can edit its name or add/remove members.
Manage classes in the Object Class Explorer For full control and editing of all classes, including differential pair classes, select the Design » Classes command to open the Object Class Explorer dialog (). Learn more about defining classes in the PCB editor.

Design Constraints

In Altium Designer, the properties of the objects placed in the design are controlled by design constraints. Constraints are used to both instruct the creation tools, such as the width for routing and the gap between pair members during differential pair routing; and are also used during design rule verification to confirm that the placed objects meet the design requirements.

As mentioned earlier, design constraints are either defined through the Constraint Manager, or as PCB design rules. While these techniques use a different approach to create and manage the constraints, the set of available constraints is the same in the Constraint Manager and the PCB rules, as is the underlying approach used to target the design constraint to the objects that it should apply to.

Behind the user interface, Altium Designer uses a filtering engine to target the objects that a design constraint applies to, driven by a query system. The query system identifies objects using query functions, such as IsComponent('U1'), or InAnyDifferentialPair. The process of creating a query to target the required objects is called setting the scope of the design constraint. In many of the places where the constraint is scoped you will choose an option from a dropdown list, which the PCB editor converts into a suitable query. For a more specific constraint, such as all nets (except pairs) under this BGA, you will need to construct the query from suitable query functions, for example WithinRoom('RoomDefinition_BGA') and Not InAnyDifferentialPair

In a rules-based project the query for any constraint can be examined by switching the Object Matches scope in the constraint to Custom Query (in the PCB Rules and Constraint Editor), as shown in the third slide below. In a Constraint Manager-based project, open the Constraint Manager from the PCB editor and switch to All Rules to display the query behind a constraint ().

To simplify the discussion, the term constraint (rather than rule) will be used for the rest of this page. The images that show the software will be a mixture of the Constraint Manager, and the PCB Rules and Constraints Editor, with an image of both being shown when the UI approach is quite different.

Constraints are defined in a spreadsheet-like interface in the Constraint Manager, as you click in a column the constraint details display at the bottom. 

In the design rules-based approach, common scoping options are set through dropdowns. Behind the dropdown a query is automatically created, in the PCB Rules and Constraint Editor you can switch the scope to Custom Query to display the query.

In both the Constraint Manager and design rules approaches, more complex constraint scopes require a query to be written. The example design rule shown constrains differential pair routing: for all differential pairs in the 100R_FPGA class, that are within the room RoomDefinition_BGA; to be routed using Impedance Profile D100(BGA).

 

Learn more about the query language.

Setting the Scope of the Design Constraint

The scope of the design rule defines the set of objects that you want the rule applied to. Since a differential pair is an object, you can use queries like the following examples:

Query Keywords to target Differential Pairs

InAnyDifferentialPair Is the object in any differential pair.
InDifferentialPair('D_V_TX1') Targets both nets in the differential pair named D_V_TX1.
InDifferentialPairClass('ROCKET_IO_LINES') Targets all nets in all pairs belonging to the differential pair class called ROCKET_IO_LINES.
(IsDifferentialPair And (Name = 'D_V_TX1')) Targets the differential pair object that has a name of D_V_TX1.
(IsDifferentialPair And (Name Like 'D*')) Targets all differential pair objects whose name starts with the letter D.

Learn more about the available PCB query functions.

Differential Pair Routing Constraint

The key objectives for routing a differential pair are to route each net in the pair at the preferred width, while keeping them separated by the preferred gap. The example images below show this being done for All Differential Pairs, the first using the using the Constraint Manager, the second using the PCB Rules and Constraints Editor. The width and gap are defined as numerical values. Alternatively, a differential pair impedance profile can be defined in the Layer Stack Manager and this profile chosen in the constraint, as shown below. This page includes a summary of key elements of the constraint, use the link below for more details about the constraint.

Setting the constraints for routing the differential pairs. In this example, the target PCB file has been selected DifferentialPair_CM.PCBDOC, and the Impedance Profile D100(D100) defined in that PCB, has also been selected. Doing this automatically configures the Preferred routing width and gap.

If the design rules approach is being used then the Differential Pair Routing constraint is configured. The option to use a defined Impedance Profile has also been enabled, and the D100(D100) profile selected.

 

Constraining a Differential Pair

Measurement units The units default to the board units, use the Ctrl+Q shortcut to switch them between imperial and metric in the dialog / editing window you are currently viewing. In the Constraint Manager, the units can also be switched via the Tools menu.
Routing width Enter the Min, Preferred and Max Widths as a numerical value. Use the 3 shortcut to cycle between these settings during interactive differential pair routing, the current state is reported on the Status bar and in the heads-up display. 
Gap between nets in the pair Enter the Min, Preferred and Max Gaps as a numerical value. Use the Shift+6 shortcut to cycle between these settings during interactive differential pair routing, the current state is reported on the Status bar and in the heads-up display. 
How the Gap is checked The Preferred Gap value is used by the Interactive Differential Pair routing tool as track segments are placed during routing. However, the distance between all electrical objects is checked by the applicable Clearance Constraint. In the Design Rules dialog this is configured as a separate design constraint (). In the Constraint Manager the Clearance can be defined in the same grid as the differential pair routing properties ().
Settings based on an Impedance profile 

This approach requires the impedance profile to have been configured in the Layer Stack Manager. If there are impedance profiles defined, the profile can be selected in the Constraint Manager (first image above) or the rules dialog (second image above). Learn more about configuring an impedance profile.

Learn more about the Differential Pair Routing Constraint.

Routing a Differential Pair

Differential pairs are routed as a pair - that is, you route the two nets simultaneously. To route a differential pair, select Interactive Differential Pair Routing from the Route menu or the Active Bar. You will be prompted to select one of the nets in the pair; click on either net to start routing. It doesn't matter if the positive or negative trace in a pair is selected as the system will automatically select the other trace too. The video below shows a simple demonstration of differential pairs being routed.

During differential pair routing, you can perform the following functions:

Routing a Differential Pair

Configuring the router

To change the interactive differential pair routing settings during routing, press Tab to display the Properties panel. Routing will pause and the cursor will be released from the routing, the options in the panel can now be changed. Click the  button to return to routing, or press Esc. There are four sections in the Properties panel, use these links to learn more about: Differential Pair Information, Properties, Interactive Routing Options, and Rules.

How the routing reacts to existing objects

This is determined by the current setting of the Conflict Resolution Mode (Walkaround, Push, Hug and Push, Stop at First Obstacle, Ignore Obstacles). The current conflict resolution mode is displayed on the Status bar (), in the heads-up display (), and on the Properties panel during routing or sliding. Press Shift+R to cycle through the available conflict resolution routing modes.

Learn more about the conflict resolution mode during interactive routing.

The shape of the corners

During differential pair interactive routing, the shape formed by the tracks and arcs that create a corner is referred to as the corner style. Diagonal corners are the most common, but curved corners (created by placing arcs), are also popular. There are 5 available corner styles, 4 of which also have corner direction sub-modes.

  • Press Shift+Spacebar during routing to cycle through the corner styles, the current style is displayed on the Status bar () and in the Heads-up display.

  • Alternatively, press Tab to open the Properties panel and change the corner style there ().

  • Press the Spacebar to toggle the corner direction.

  • When routing a pair using the any angle corner style, press and hold Shift to route the diff pair using tangent arcs. This has the effect of shaping the routes around existing curves.

  • In the arc in corner modes, press the , key to decrease the maximum arc radius and the . key to increase the maximum arc radius (hold Shift to accelerate by 10x). The arc size can also be changed interactively by moving the cursor. The setting defines the maximum allowable arc radius, which is displayed on the Status bar when you are routing.

Controlling the routing width and pair gap 

During differential pair interactive routing:

  • Press 3 to cycle available routing widths (User Choice, Rule Min, Rule Preferred, Rule Max). The current choice is displayed on the Status bar and in the Heads-up display.

  • Press Shift+6 to cycle available gaps (User Choice, Rule Min, Rule Preferred, Rule Max). The current choice is displayed on the Status bar and in the Heads-up display.

Placing the hatched track segments Left mouse click to place all of the proposed (hatched) track/arc segments.
Unwind the placed routing Press the Backspace key to remove the last placed vertex.
Switch layers and insert a via pair

To change layers during routing, use the Ctrl+Shift+Wheel Scroll shortcut combination (or press the * key on the numeric keypad), then ( ):

  • Press 4 to cycle available via sizes (in the X-Y plane), between User Choice, Rule Min, Rule Preferred, Rule Max. The current choice is displayed on the Status bar and in the Heads-up display.

  • Press 5 to toggle between staggered and perpendicular via patterns during a layer change, or alternatively, move the cursor around to toggle the pattern.

  • Press 6 to cycle possible via stacks (via span in the Z plane), or press 8 to display a list to select from (learn more about controlling the vias placed during interactive routing).

Displaying the available clearance Wondering why the routing won't fit through that gap? To help with this, press Ctrl+W during routing to enable the dynamic display of clearance boundaries. The no-go clearance area defined by the existing objects + the applicable clearance rule is displayed as shaded polygons (). Press Ctrl+W to toggle the feature off again.
Panel – Differential Pair Information

Details the name of the differential pair being routed, and the differential pair class (if the pair belongs to one). Also displays the signal length and delay of each net in the pair, this detail is updated at each click event during routing. The blue text in the panel are links, press Tab to access the panel during routing ().

Learn more about the differential pair panel information.

Panel – Properties

During differential pair routing, the properties of the route objects can be edited in the Routing Properties section of the Properties panel.

Learn more about the differential pair Properties panel information.

Panel – Interactive Routing Options

 

Learn more about the differential pair Routing Options panel information.

Panel – Rules

Displays the Routing Width and Routing Via Style design constraints that apply to the pair being routed ().

Learn more about the differential pair Rules panel information.

Get help on shortcuts Press Shift+F1 to display all of the available in-command shortcuts.

Improving the Quality of the Routing

The PCB editor includes powerful tools for improving the quality of existing routing. These tools are known as Glossing and Retracing and both are available in the Route menu.

  • Gloss - focuses on improving the trace geometry, attempting to reduce the number of corners and shorten the overall route length. Gloss preserves the existing trace width and differential pair gap. Glossing respects the current Gloss Effort (Routed) setting configured in the PCB - Interactive Routing page of the Preferences dialog.

    Learn more about glossing during routing.

  • Retrace - assumes the overall geometry is satisfactory, focusing instead on verifying that the routing meets the design rules. Where Gloss preserves the existing trace width and pair gap, Retrace changes them to Preferred. Retrace is an excellent tool to use when a Differential Pair Routing design rule has changed, and that change needs to be applied to existing routing.

    Learn more about glossing & retracing existing routes.

  • The Interactive Differential Pair Routing tool gives pair coupling a high priority, so the SMD To Corner and SMD Entry design rules may not work as expected. If strict respect for these rules is required when routing a differential pair, use the Quick Differential Pair Routing tool.

  •  
     
     
     
     

    The current limitations of any angle differential pair routing are:

    • Routing that transitions through the border of a room where design constraints change is currently not supported. The routing will continue with the same constraints applied.

    • The SMD Entry design constraint is currently not supported.

  • Automatic loop removal in any angle diff pairs is supported. This feature is in Open Beta and available when the Legacy.PCB.Routing.LoopRemoval option is disabled in the Advanced Settings dialog.

Interactively Modifying the Differential Pair Routing

During routing there will be many instances where you need to change some of the existing routing. You can change the routing using a drafting style approach of clicking and dragging on a track segment or via – this is called interactive sliding. To recognize the members of the pair during sliding, the concept of coupling is used. Interactive Sliding controls display in the Properties panel during sliding (). During sliding, the interactive routing engine will attempt to maintain the quality of the routing, while complying with the applicable design constraints. Key features that impact on the sliding process include: the routing conflict resolution mode (response to obstacles), the gloss strength (effort in tidying the results), and hugging (how tightly the routes wrap around obstacles and how corners are formed).

Sometimes it is easier to re-route the path of the differential pair. The interactive routing engine supports this, using a feature called Loop Removal. This feature monitors the interactive routing process, and if it detects that a new path has been routed in parallel to an existing path, it automatically removes the old redundant segments. To re-route the path of a differential pair, select the Route » Interactive Differential Pair Routing command, click anywhere on the existing routing and route the new path, then come back to meet the existing routing where required. The software identifies the loop created between the old path and the new path, when you right-click or press Esc to terminate the route, the redundant segments are automatically removed, including any redundant vias.

Modify the existing differential pair routing using a combination of re-routing and sliding.

Modifying differential pair routing

Sliding (dragging) the pair

Click and hold on a track segment in one of the pair nets, then move the mouse to start sliding the routing of the pair ( ). How the interactive router changes the routing as the cursor moves depends on the current settings of the Properties in the Properties panel (), press the Tab key to pause sliding and change settings in the panel. The sliding options should suit the routing style used on the board - for example, the Hugging Style should be 45 Degree if your routing has diagonal corners. Press the Shift+Spacebar shortcut keys to cycle through the Hugging Style modes during sliding.

To recognize the members in a differential pair, the concept of coupling is used. When the software recognizes objects that belong to a differential pair it attempts to drag the pair's partner track or via if the Keep Coupled option is enabled in the Properties panel during interactive sliding () or interactive via dragging ().

To confirm that the partner objects are coupled, the software checks that the objects:

  • For via pairs - belong to the pair, and are closer than 2 * Preferred Gap

  • For track pairs - belong to the pair, are on the same layer, are separated by no more than the Preferred Gap

What you snap to during sliding

The routing you are sliding will not only snap to the current snap grid, but can also snap other objects depending on: the object snapping settings, the layer snapping setting, and if the snap guides and axes snapping settings are enabled. Press Ctrl+E to modify these settings during sliding. To temporarily inhibit snapping during interactive sliding, hold down the Ctrl key.

Learn more about cursor-snap behavior.

How the sliding routes are glossed

The extent to which the moving tracks are reshaped as you slide them is controlled by the current Gloss Effort (Routed) setting, press the Ctrl+Shift+G shortcuts to cycle through the modes during sliding. Note that during interactive sliding glossing is automatically reduced to Weak, to avoid the glossing engine from fighting the designer in their attempts to relocate the routing. If you find that the routing will still not slide how you want, try setting the Gloss Effort (Routed) to Off.

Learn more about the Gloss effort (routed) settings.

How the sliding route responds to existing objects

During sliding, one of the Routing Conflict Resolution modes (Ignore, Push, HugNPush) applies (). Press Shift+R to cycle through the modes as you drag a track segment.

Learn more about the Conflict resolution mode settings.

How neighboring routes are impacted

The impact that the moving tracks have on the adjacent routing is controlled by the current Gloss Effort (Neighbor) setting (), press Tab while sliding to change the setting.

Learn more about the Gloss effort (neighbor) settings.

Hugging - how glossing wraps around other objects and forms corners

How the glossing engine wraps the route around other objects and forms the corners is referred to as hugging. The available Hugging Style settings include:

  • 45 Degree – always use straight orthogonal/diagonal segments to create corners (use this mode for traditional orthogonal/diagonal routing behavior).

  • Mixed – use straight track segments when the objects being moved/pushed against are straight, use arcs when they are curved.

  • Rounded – use arcs at each vertex being glossed. Use this mode for snake routing, and to use arcs + any angle routes when glossing (during interactive routing and manual glossing).

Learn more about the Hugging style settings.

Controlling Loop Removal

When you re-route an existing pair, Loop Removal is applied. Loop Removal is on by default () and is applied to all nets. It can be toggled on and off as a feature (), or selectively disabled on a net-by-net basis if required (learn more). A feature that works in harmony with Loop Removal is Automatically Terminate Routing, which is also on by default (). This feature automatically drops the pair under re-route when the next route click location is on top of the exist route. With this feature enabled it can be difficult to re-route along a path that closely follows the existing path. In this situation, temporarily disable the Automatically Terminate Routing option.

Learn more about the Loop removal settings.

Sliding a route corner

The interactive sliding engine includes algorithms specifically for dragging a vertex (corner).

  • The Vertex Action option (Preferences dialog Interactive Sliding Properties panel) controls how the interactive sliding engine re-shapes the corner during dragging. Press the Spacebar to cycle through the modes as you drag a vertex.

  • To convert a 90-degree corner to a 45-degree route, start dragging on the corner vertex with the Vertex Action setting in Deform mode.

Learn more about the Vertex action settings.

Learn more about modifying existing routing.

Length Tuning Differential Pairs and Modifying the Accordions

There are two aspects to length tuning differential pairs: tuning the lengths of each pair in a set so that all of the pairs are the same length; and then tuning the length of the shorter net within each pair, a process referred to as phase matching

To length tune differential pairs, create the following constraints to target the set of differential pairs:

  • A matched length constraint that defines the length matching requirements between pairs. To test the length of one pair against the length of another pair enable the Group Matched Lengths option.

  • A second matched length constraint that defines the within-pair length matching requirements. To test the length of one pair-member against the other pair-member enable the Within Differential Pair Length option in the constraint.

Demonstration of tuning the lengths of the pairs, then tuning the lengths within each pair.

The video shows pair lengths being tuned against other pairs (based on xSignal lengths) by adding length tuning accordions. The shorter member of each pair is then length-tuned against the longer member of that pair. The video then shows how pairs can be moved and reshaped interactively, how a tuning accordion can be deleted, and how a new accordion can be shaped during placement using shortcuts.

Learn more about length tuning differential pairs.

## Thanks to Robert Feranec of the FEDEVEL Academy (www.fedevel.com) for the use of the iMX6 Rex development board in images on this page (http://www.imx6rex.com/).

If you find an issue, select the text/image and pressCtrl + Enterto send us your feedback.
Feature Availability

The features available to you depend on which Altium solution you have – Altium Develop, an edition of Altium Agile (Agile Teams or Agile Enterprise), or Altium Designer (on active term).

If you don’t see a discussed feature in your software, contact Altium Sales to find out more.

Legacy Documentation

Altium Designer documentation is no longer versioned. If you need to access documentation for older versions of Altium Designer, visit the Legacy Documentation section of the Other Installers page.

Content