Summary: High speed signals, often use differential voltages to transfer the information between two points. This technical solution is used either we are working in the analog or digital domain. To transfer a differential signal between two points, besides the ground return, you need a differential signal pair, thus two traces. Let's see how to make it with KiCad 5.x.x
Abstract
High speed signals, often use differential voltages to transfer the information between two points. This technical solution is used either we are working in the analog or digital domain.
To transfer a differential signal between two points, besides the ground return, you need a differential signal pair, thus two traces. Differential signal also means that the signal traveling on the traces are 180° out of phase. The information that is transmitted, is not only embedded in the signal amplitude but also relies on that phase shift. If the phase is not maintained 180°, communication errors may occur and the Signal to Noise Ratio (SNR) is degraded.
The advantages of the differential signals are related to their stronger immunity to noise. This is due to the fact that any common mode noise coupling with the traces, is removed by the receiver. Indeed, the receiver takes the signal from the two traces, on which the signal travels, and makes the difference between them. Thus, any common mode noise is automatically removed. Besides this aspect, the differential signal, offers a better SNR, since the signal is twice as big compared to a single ended communication. This comes from the 180° phase shift between the two traces. Indeed, if we transfer the signal with amplitude A on one trace and -A (which is equivalent to 180° phase shift) on the other trace, the receiver, by doing the difference between the trace voltages, will do A - (-A), which is 2A.
To take full advantage of the differential signal, we need to make sure that the differential traces are properly designed. In particular, to guarantee that the signal maintains the 180° phase shift, the traces must be of the same length. Having traces of the same length, it means that the traces do not add delay or skew to the signal traveling on it.
To maintain the signal integrity, additional constraints may apply, such as but not limited to:
Impedance controlled traces.
The traces travel parallel to each other and at the same distance.
They should not have stubs.
No ground break under the traces.
Minimum clearance from other signal traces.
The article will not go into the details of these other aspects that indirectly are part of the impedance controlled traces challenge.
Create a differential trace with KiCad - Schematic
KiCad 5.x.x allows an easy way to make differential pairs and keep control of the trace length, thus the phase or skew between the traces. In the examples, we will analyze the USB 2.0 differential traces and a simple connector to connector routing that could emulate a connection between high speed LVDS (Low Voltage Differential Signal) coming out from a high speed ADC and goes to an FPGA.
All start from the schematic. You place the component you need and complete the schematic, for example as in Figure 2. Afterward, you need to name the Nets (traces) to properly enable the differential routing during the PCB layout. To name the Net, you need to press the Icon on Figure 1 (Place net label).
Figure 1: Net Naming Icon on the side Toolbar.
You need to click on each differential trace to name it. The name will then appear on the trace itself. To properly mark the traces as differential pair, the following name conventions must be followed:
name_P and name_N
or
name+ and name-
Similar conventions are often used by other CADs as well, such as Eagle and Altium.
In this way, during the routing, it is possible to work on both traces at the same time. In the example, as shown in Figure 2, we have named the traces D+ and D- for the USB data lines.
Figure 2: USB 2.0 Adapter and LVDS traces.
For the LVDS signals, between connector J1 and J4, the pairs are named:
D0+ and D0-
D1+ and D1-
D2+ and D2-
Once the schematic is completed, you can make the PCB footprint associations and the Netlist, afterward, you can move to PCBnew.
Create a differential trace with KiCad - Routing
You can place the components on the PCB as needed for your solution. To challenge the Layout, and better show the Trace pair tools offered by KiCad, an IC has been placed between J1 and J4 connectors, sot that we have to travel around it.
Once the placement is done, we can start the routing of the differential pair signals.
Select the menu:
Route → Differential Pair
or press Alt+6
After that, you can just click on the USB connector, on the D+ or D- nets.
Having named the traces with the right naming convention enables the router to work on both traces together. By moving the mouse, you will see both D+ and D- traces being routed together, as shown in Figure 3.
Figure 3: Initial routing.
By clicking at the end of the traces (J2 pads), you close the routing, as shown in Figure 4.
Figure 4: End of the routing.
In the example, the routing is not that neat, since we have ended, on purpose, without a symmetric layout. The auto-router does not make the length corrections at that point, thus, if possible, you should try to keep the layout symmetric. Nevertheless, there are scenarios where it is not easy to get a neat layout, thus some corrections are needed. The correction can be done with the menu option:
Route → Tune Differential Pair Length Skew/Phase
That option operates on a single trace. Once the option is active, click on the shortest trace and move the mouse. The auto-router will add a trace to match the longest trace as shown in Figure 5. You need to move the mouse and stop once the skew is shown to be 0 or close to it (the match is not always possible).
Figure 5: Skew Matching.
This correction helps to eliminate the skew (delay) between the traces, but it adds an asymmetry. If the solution is a high frequency one, layout asymmetry should be avoided. The best approach to limit any problem is to make a symmetric routing since the beginning, as shown in Figure 6. This avoids the need to make the skew correction. If you try to add the skew correction as before (just by clicking on the trace), you will see that there is 0 skew, thus no need to apply any correction.
Figure 6: Symmetric layout with 0 skew.
In the second example, for the LVDS traces between J1 and J4, you can do the same as just explained. You can route the differential traces as shown in Figure 7. Due to the U1 placed on purpose between the connectors (just to challenge the layout), the routing is not straight, except for the D0 pair. While each pair is symmetric and has 0 Skew, between the different pairs there is a skew due to the different lengths. This must be avoided if the traces are used as a parallel data bus.
Figure 7: Multiple differential pairs.
In this scenario, to remove the skew, we have to operate as before, but using the option:
Route → Tune Differential Pair Length
This option operates on both traces of each selected pairs.
Once the option is active, just select the longest pair and check its length (the length will be shown by clicking on the trace). Afterward, click on each other pair and move the mouse to add the additional trace to increase the length to match the longest pair. The additional length is added symmetrically (like a snake) as shown in Figure 8, thus the high speed performances are kept, besides, getting 0 skew.
Figure 8: Skew correction on multiple pairs.
This correction can be often be seen on big boards, such as the main PC boards.
A last useful thing to keep in mind, are the trace settings for the differential pairs.
These can be changed on the “Board Setup” window, which can be shown by clicking the menu:
File → Board Setup…
The different options can be seen in Figure 9. In particular, for each pair name, a Net Class can be assigned.
Figure 9: Differential pair options.
For each Net Class, which is shown on the table on the top in Figure 9, it is possible to assign the parameter “dPair Width” and the “dPair Gap”.
These are key parameters, together with the ground layer, that determine the trace impedance. Depending on the specific design, you may need to match a certain impedance.
The parameter assignments should be done before starting the routing.
Once the layout is over, the board would look like Figure 10.
Figure 10: 3D view of the PCB.
Conclusions
The article has shown the need for the differential pairs and how to make them within KiCad 5.x.x. In particular two main use cases have been shown, to address the different options that are offered by KiCad.