Hi everyone,
I’m trying to length match a group of RGMII data signals in KiCad.
I’ve created a net class and defined the appropriate design rules with a 3 mm length matching requirement. The traces vary in length — one is 20 mm (which needs meanders to compensate), another is 26 mm, and the remaining two are 23 mm each.
However, during the tuning process, KiCad does not generate meanders on the shortest trace (20 mm), even though it clearly needs additional length to match the others. The rules are set, and the net class is correctly applied, but no length compensation is being added.
What could be causing this issue?
How can I make KiCad add meanders to the shortest trace and meet the required 3 mm length match tolerance?
Appreciate any help or suggestions. Thank you!
1 Like
I’m not a user of Kicad, but you might find that these comments are useful.
- It may be that you are specifying the absolute length of the track when what you want is the length differences to be specified. In this case the track is already 20.1341mm long, so as the limit is 3mm, it is not going to lengthen this track at all.
- It may be that the range of values you have allowed is that there is no difference at all - since your min and max figures are both the same. A range specification is more likely to be say -1.5mm to +1.5mm.
- Be careful about matching “lengths”. It is not the length that you normally need to match but the signal flight times. These two terms are not synonymous unless all the routing is done on the same layer. If you have a multilayer PCB, the outer layer flight-time is about 0.66 * c (speed of light), but inner layers are usually around 0.5 * c. The exact numbers depend on dielectric coefficients, so these figures are only a rough guide.
- It is best to route everything on the same layer (if only for simplicity), but don’t forget that there will be displacement currents copper on adjacent layers. Don’t route over plane splits, and don’t forget that if you place a via for the signal path, you’ll need to place a via very close by for the displacement current path too as that is likely to change layers also.
3 Likes
One is 20 mm, which I need to form into meanders for length matching; another is 26 mm, and the remaining two are 23 mm each
1 Like
As stated earlier, I’m not a Kicad user, but looking at the images shown, the max is given in red suggesting this is the only violation and immediatly accounts for why no meanders are added since it appears to be an absolute length.
Being pragmatic, the suggest solution is to route all the RGMII tracks and look at each for the maximum length. From this, “min” is “max” - 3. So set the rules for all the RGMII tracks to max = “maximum actual” and min = “maximum actual” - 3 and see if it now works.
2 Likes
If your length is 26.3832mm then how can practically your constraint be just 3mm length? it is not possible to reduce the length of a trace using meandering, one can only increase the length. Your max rule should be 26.3832mm and if you want tolerance of 3mm then min rule should be 23.3832mm. After this your meandering should work fine. Try it.
2 Likes
Thank you for the clarification. I’ve already updated the constraints as suggested — setting the maximum to 26.3832 mm and the minimum to 23.3832 mm to allow a 3 mm tolerance. The meandering is now working as expected
1 Like