Routing differential pairs layers don't change automatically

Can anyone explain what I’m missing here? I set up custom rules for each of the routing layers of interest for my 100 ohm and 90 ohm differential pairs, all that seems to be working EXCEPT for one little massively irritating item: When transitioning from one layer to another, in this case from top to layer 3, after the vias are placed the traces continue to route on the new layer BUT the active layer doesn’t switch to the new layer, and as a result the rule for the top layer is being used to route the traces on layer 3, doh. So I have to place the vias. Exit routing mode, switch active layer manually to layer 3, then begin routing from the vias and NOW the correct rules are being used for that layer. Why doesn’t the active layer automatically switch? Did I miss a setting somewhere?

Not being able to let this go I’ve discovered that this thing has been lying to me. I changed the constraints for layer 3 to something drastically different from layer 1 so I could see on the screen what’s happening. It appears that after the via transition yes it does switch to using rule for layer 3 to route but the status bar at the bottom of the screen still says layer 1. Then when routing is stopped the display switches back to layer 1 rather than staying on the current routing layer. That’s a bit daft…

I am experimenting with this too. I set a simple set of rules to set width on different layers:

I start routing on top layer, all is well:

But when I switch to bottom layer, it is following the top rule.

If I stop routing, and resume, then it gets the width from the existing track, instead of the rule:

If I route from a component on the bottom, it picks up the 20mil constraint:

But same thing happens when I switch to top, it keeps 20mil constraint from bottom:

Is there any way to dynamically pick up rules while routing between layers?

1 Like

I know very little about custom rules, but last afternoon I did a few experiments with them.

My overall goal for today was to experiment to change the clearance constraint for tracks. Close to pads the clearance must be small so the track fits in between other pads, while for longer connections, I want a wider clearance to reduce inductive coupling between tracks.

At the moment it looks like such custom rules work on themselves, but the interaction with applying them dynamically during routing does not work very well. These custom rules tend to block most attempts of the interactive router to shove tracks aside.

I wrote a part of the things I found down in this other thread: How segment & footprint move? - #31 by paulvdh

In my second attempt, I did not add extra rule areas, but I turned it around. Default settings for the netclass has a wide clearance, while I used a smaller clearance inside the courtyard. The results were a bit easier to manage, but again, the interactive router was not able to shove a bunch of tracks aside anymore.

But also, I am now working with KiCad V 8.0.4 and I have not done a serious project with it. The interactive router behaves a bit differently compared with previous versions, and I am not even sure yet whether the results I see are because of the KiCad version, or because of these custom rules.

The DRC and interactive router not cooperating over layer changes is noted in an issue here: Custom Design Rules not properly integrated with interactive router (#15449) · Issues · KiCad / KiCad Source Code / kicad · GitLab

Turning off the “use existing track width” button in the top left may make it easier to work around.

1 Like

That issue report was raised on 7.0.6
Contributions to the issue based on 8.0.4 might be helpful to the developers

That did help – thanks!

When changing from the top to bottom layer, the track width does now change width:

However, it still reports the track width and rule incorrectly at the bottom of the screen.

Thanks for flagging this - I’ve just fixed it for v9 and v8.

2 Likes

V8.99 and V8, we don’t have V9 yet.