Shifting trace segments using hotkey 'g'

When I have a topology like this, I often want to make some quick minute adjustments. I thought the most natural thing was to select the segments I want to move and hit ‘g’ but that segment doesn’t budge at all. Am I missing something and need to do it differently or does this warrant the filing of an enhancement request? I was hoping I could move the selected segment around and have the attached traces stay attached, just like it works in the schematic editor.

Instead of a quick selection and adjusting the routing, I have to shift these segments as a bundle and then reattach the adjacent traces.

When you use ‘g’ or ‘d’ on a curved trace, you start editing it’s radius. When selecting multiple curves, I guess it errors out.

Assuming you want to move the curved traces left/right (you didn’t specify), you have two options:

  • Move the curved traces left/right with ‘m’ and re-attach the straight traces with ‘g’,
  • Change the radii of the curves to 0 (i.e. undo the curve), then fix up the new segmented diagonal segments into one, and you can drag the diagonal with ‘d’, and finally re-apply the curves.

Yes, the first option is what I am using. But as described above, it’s cumbersome and could be much more streamlined. The second option you are describing seems to be even more effort.

Curved tracks are still in a very early development stage in KiCad.
I find them too cumbersome and limited to use at the moment, exept maybe for some part where they are really needed and a simpler alternative does not work poperly.

I am hoping for better support and better implementations for curved tracks though.

I agree regarding the better support. And I am planning to file enhancement requests for two things:

  1. Allow arbitrary bends (like Eagle)
  2. Allow the use of a user-defined radius

KiCad’s recently introduced support for curved traces was on of the main reasons for me to switch to KiCad.

In general, the curved traces work wonderfully for me. Here’s part of a layout between two BGAs (STM32H7 and an SDRAM). I length-matched the traces for a memory interface clocked at 167 MHz. I’ve done it all by hand though (didn’t use the meander tool).


Wow, beautiful layout, but can you explain the necessity to length match these traces? :smiley: (hint: Er = 4.2, c = 3e8m, f = 167e6 Hz)

And I was hoping for a track smoothing or optimizing function, no hope it looks like.

@twl, Wow, I feel like a dog that’s been thrown three bones: The average dielectric constant in an FR4, the speed of light and clocking frequency :slight_smile:

Well, I am no expert in this but I see two ways to approach this:

  1. The simplest is to just follow the recommendation in ST’s application note AN4938. For high-speed signal routing of the memory controller (FMC), it specifically says to match the traces to within ±10 mm. Maybe you argue it needs to be questioned whether this really makes sense.

  2. I believe just looking at the clock speed alone is a fallacy. The rise/fall times of the driver as well as the setup and hold times also matter. In my particular case, the MCU’s speed setting for SDRAMs has to be set high, leading to rise/fall times of 1.5 ns. There’s going to be harmonics in the gigahertz range and signals at higher frequencies travel faster than signals at lower frequency.

1 Like

That’s an exemplary use case for curved traces! Signals with Tr = 1.5ns will surely reflect from 45 degree angles wreaking an SI havoc :slight_smile:

Anyway, glad you like the curved trace support. We’ll improve dragging of arc segments in the V7…


Very cool, thanks! It’ll certainly help improve user experience. Go, KiCad, go!

@flum Gorgeous board!

Can you share your settings and process? I’ve been looking forward to applying this to my next board. Want to learn from your experiences.

For example:

  1. Did you use one radius for non-DRAM lines and another set for DRAM lines?
  2. Did you do all the routing with 45 deg. and then change to curves or did you do curves as you went or?
  3. What would you do the same way?
  4. What would you do differently?

@Harjit, I do this type of routing in various stages and I really think it’s a matter of circuit topology (what are the most critical buses and nets, how do I plan on distributing the power, etc.) and personal preferences. KiCad is totally new to me and I had to find the most efficient workflow for myself, so I started out with 45° corners initially but switched to laying out the curves directly over time. I did not distinguish among DRAM and non-DRAM wiring.

Fiddling with the radius is a bit cumbersome and I wish there was the same flexibility as in Eagle (though Eagle has other drawbacks). First of all – and this is the feature I wish for the most – you cannot control the radius of a bend by punching in a number somewhere. There is no other choice but do it via mouse clicks, and thereby determine the radius indirectly, as you interactively lay out your traces. Unfortunately this is a hit and miss when you try to create symmetries for better looks. In Eagle you have a constantly visible text entry field for trace widths, via sizes and radius. KiCad’s general approach appears to be making it all context sensitive via the right mouse button. It slows things down for me but I can live with it and have gotten used to it.

Here’s some routing that’s the most time consuming and here it would also help if the radius for the individual trace segments could be chosen:

I laid out the traces with 45° angles initially (it can also be circular, it doesn’t really matter, but don’t use 90° angles), then removed the the non-horizontal/non-vertical segments, ensured proper spacing between the horizontal segments and then between the vertical segments. Once done, you need to make sure all wires end at the same position where you want to later put down the round segments and you need to do this only either for the horizontal or the vertical segments. As the final step, you finish each net by starting your round segment on the aligned wire ends one by one and connect them to the other wire segments (the ones perpendicular).

What I am really hoping for is that KiCad eventually allows arbitrarily bent wires, just like Eagle but better: the arbitrarily bent wire must have a smooth transition from the preceding wire (and that’s what Eagle is good at) and, ideally, if the other end of the interactively moved trace gets connect to another trace segment, adjusts the connecting with a smooth curve transition as well. Something like this:


Years ago I watched as our PCB designer did some 200MHz memory routing. We were told that they were extremely critical. But it was an other kind of ARM.

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