SOLVED: Differential routing broken?

Using: KiCad 5.1.10-88a1d61d58_89_ubuntu20.04.1
OS: Linux Mint 20 Cinnamon 4.6.7
Linux kernel: 5.4.0-80-generic

Board Setup - Net Classes

  • Default:
    Clearance 8 mils, Track Width 8 mils, Via Size 18 mils, Via Drill 12 mils
    uVia Size 12 mils, uVia Drill 4 mils, dPair Width 8 mils, dPair Gap 10 mils
  • LVDS (own added net class)
    Clearance 40 mils, Track Width 8 mils, Via Size 18 mils, Via Drill 12 mils
    uVia Size 12 mils, uVia Drill 4 mils, dPair Width 8 mils, dPair Gap 6 mils

All LVDS traces are assigned to the LVDS class.

When routing a pair of LVDS traces, I can start from a pair of component pads, but routing further is not possible. Normally a single mouse click fixes the routing point and it’s possible to take a different direction, but that is here not the case. A mouse click has no effect. Moving the cursor bends the traces but a mouse click does not fixes the trace. It is also not possible to finish the trace pair at the destination because the traces do not want to connect to the destination pad or via. Right clicking while routing the pair and selecting “Select layer and place through via” adds two via to the end of the trace but it’s not possible to place them, they keep moving with the cursor.

Above is what happens when routing differential traces.

Some test I did:

  • Changing the values for clearance and/or dPair Gap for the LVDS class to the values of the “Default” class does not help.
  • Assigning all LVDS traces to the “Default” class makes it possible to route differential traces.
    Everything works (bending traces at click points, placing vias, …). The only thing that sometimes gives problems is connecting the traces to the destination point (the workaround is to route from one end to somewhere in the middle and then complete the routing by routing from the end point to were the traces are stopped, they always join nicely).
  • Assigning the ‘Clearance’ and ‘dPair Gap’ values of the “LVDS” class to the “Default” class takes us back to the same behaviour as for differential routing with the “LVDS” class.

Conclusion:

It’s only possible to route differential signals when using the “Default” values of KiCad.
If the values of the “Default” class are changed or signals are assigned to a new class differential routing does not work.

Question:

  • Is this known behaviour?
  • Am I doing something wrong?
  • Is this a bug?
  • Does somebody have a hint?

Many thanks in advance

For convenience, I’ve add a small screen capture of what’s happening on this dropbox (cannot upload stuff as newer user).
When routing differential traces with the, own created, LVDS class and when the signals are set to the “Default” class.
I hope this says more than the text.

In the first part, when the movement of the traces stops, it’s because of a mouse click trying to place the trace.

You can upload now, I promoted you one level

Many THANKS! :slightly_smiling_face:

File is too big for uploading (50.8MB), so I leave it in the dropbox folder.

But again, many thanks for upgrading me!

We get a crazy number of spammers signing onto the forum and either trying to spam immediately or cutting and pasting random content to try to build post counts to be allowed to upload files.
Us mods have to delete them and figure out who are genuine users with real questions

I’ve solved this and can now route differential traces.
Despite that it works, I consider the setup for differential traces having a bug.
I explain how it’s solved and why I think its a bug:

Solved

  • PcbNew - [File] - [Bard Setup]
  • Click [Net Classes] under [Design Rules]
    • The Value for Clearance and the value for dPair Gap MUST be identical for differential traces.
      When that is the case differential routing works also all other things to do with differential routing work fine.

Bug

  • Why I think it’s a bug is because the gap between two traces forming a differential pair is completely different from the Clearance parameter.
  • The dPair Gap is the calculated distance between the two traces forming a differential pair.
    Calculated distance because this space is s dedicating factor to get a specific set of differential impedance.
  • The Clearance is the distance between two single ended traces or the distance between a differential pair and a nearby single ended trace or other differential pair.

Example

  • dPair Width = Width of the traces of a differential pair : 0.23876 mm (9.5 mil)
  • dPair Gap = Distance between two traces forming a differential pair : 0.1397 mm (5.5 mil)
  • Clearance = Should be set to 0.762 mm (30 mil) to 1.27 mm (50 mil).
    But this is thus not possible if a differential pair must be routed in Kicad.
    For kicad 5.1.10, as written earlier, dPair Gap and Clearance must have an identical value.

@00:41 the the clearance of your differential pair overlaps with pads J1, J2 and J3, and normally the Interactive router prevent you from drawing tracks that result in DRC violations. This is not a bug, but a feature.

image

Your description:

confirms that this is your issue. If you connect them in the middle, there are no nearby pad that create the DRC violation.

If you do want to route this, then: **Pcbnew / Route / Interactive Router settings, and set Mode to Highlight collisions and set Options to Allow DRC violations.

In the “normal” Shove mode, the Allow DRC violations is greyed out, because it does not make sense in that context.

How did you lay the horizontal track of “Snsr_LvalIn_N” between the pads? I suppose these get flagged if your run Pcbnew / Inspect / Design Rules Checker.
I think currently the only real solution is to split the nets with net-ties, but this is relatively a lot of work with small advantages. Maybe the custom DRC Rules can work for this, but I have no experience with them.

Below an issue report on gitlab that was fixed just a few months ago, so this part may also need some more testing.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.