Custom Rules for Length/Skew Matching with Sequential Tracks?

This is something I expect isnt provided for.

Does anyone know if its possible within custom rules to sum the length of multiple tracks and then length tune/skew tune based on that length?

Basically I have a design that uses multiple differential pair groupings. Each of these groupings are to be the same length +/- a certain amount.

Issue is that some of these have components inline with the tracks, so I will need to calculate the lengths/ skews manually, taking into account the components as well.

I’m assuming I’ll have to do it manually, though if anyone has a solution or suggestions for making it less painful, that would be very helpful.

I don’t have a great solution, I normally end up using notes on the side of the PCB or an external spreadsheet. I also normally keep an eye on the info bar at the bottom while selecting traces on both sides of a passive component. The 2D length (combining all selected tracks) isn’t perfect, but it gives you a rough approximation to compare to manual spreadsheet results.

There’s an issue on the Gitlab about this here: EESCHEMA/PCBNEW: Better handling of length matching (#18118) Ā· Issues Ā· KiCad / KiCad Source Code / kicad Ā· GitLab Since it is impacting your workflow, you might consider giving it a ā€œthumbs upā€ on Gitlab. While popularity doesn’t guarantee implementation, it doesn’t hurt.

1 Like

I think the best you can do is to first tune the full length, and then add the T-split. As a helper, you could make a footprint without pads that serve as temporary placeholders for whatever footprint you want to put on the T-split.

Also, if length matching (which should be delay matching, that’s being worked on) is important, then the track impedance over it’s whole length is of concern.

If you want to do length tuning of individual sections, then maybe you can work with net-ties.

Just gave it a thumbs up.

1 Like

Unfortunately, that’s not really going to work with the complex design of this PCB.

I’m not familiar with what T-splits are, though it doesnt sound line a component that is inline to the track.

Yes that was what I meant. A track where something splits of somewhere in the middle. To me it does not matter much whether it’s a track that splits off, or the pad is on the track.

1 Like

It’s too simple so, perhaps I’m missing something about your goal(?)

I setup a Track with two resistors and tuned it to match the Full-length track. Decimal details reflect lost Cu in the terminal-holes..etc..

Now imagine doing it with 10 groups of varying numbers of tracks, each track within each group has to be the same length, each group having a different length, each track may or may not have one or more inline components, and they are all differential pairs.

Also they are not nice straight tracks, and you need to first find the longest differential pair within each group to tune the rest to.

It’s not so much as the concept is difficult, its the fact its very time consuming and requires a lot of manual working out.

Edit: and the components are not guaranteed to be the same size.

Thanks for the additional Info…

Perhaps the Quickest and Simplest way is to Edit the PCB’s Text File. This can be done in a Bulk way, to save steps and time.

Several ways to do this (i.e., making a combination of changes to a PCB file). Could create a Python Code (could make it a Plugin or Standalone-App or, run it from Kicad’s PCB Command-Line tool). Thus, it Could/Would be repeatable for other PCB’s.

Generally, the Scenario could be someting like this:
• Search for all ā€˜Segment’ text and confirm each belongs to a/the Desired Net (or Not belong) by using Python’s Compare function.
• Compare Total Lengths
• Add/Subtract, as needed, to end-up with the desired Longest Total Length and set the shorter ones to new (calculated) Delta-lengths.

I’m Not going to do this but, you can…
You can use basic Text-Editor as an Aid to gain understanding and decide on the things you want/need to do in Code…

As a crude, quick ā€˜Demo’, Video shows the PCB file, how the Nets are identified, how the Segments have Start/End-position and their Values.
It further Finds and Replaces one Segment’s ā€˜End’ value. I did NOT bother with Details, just wanted to present the Concept/Idea…
Then, to Demo homemade Python-App, I change another Length and show a Pull-Down Menu of some Default things to change…

The above has nothing to do with Tuning or Nets though it could… Also: a Track might have Start and End Point’s very close to each other but, the Tracks could be Curved, Angled…etc, very different. Thus, you could add/subtract from ā€œLength’sā€ and Not Start/End position’s… Many thing’s are possible

1 Like

Thanks, though this would probably be a good thing to develop for use with multiple PCB’s I’ll probably have to do it after this one is laid out, as it’ll take quite a while to create.