Trace Widths & Net classes

I have a bga I’m tracing under – mainly the three rows closest to the edge of the bga’s sides. Due to the bga pad pitch of 0.65 bsc it has to be at most .1 mm route widths with my clearance settings. Yet, when I route away from the bga to a pin header for instance, I’d like to increase to a wider width like .127 mm. The pcb manufacturer recommends wider routes for longer distances and only the minimum width for short distances. Is there a way to assign different sets of net classes to different sections of a trace? I could do it all by hand but I really just don’t want to go there – my fingers will get tired clicking.

I’ve gone into the edit track and vias menu and filtered on the net class to set it to higher widths after setting to .1 mm. Yet, it will alert sometimes indicating it could not set all the widths and some of the routes under the bga might be increased in width too. Ultimately, its unsettling because I do not know exactly what route widths have changed.

I also notice the clearance is checked via net class in the drc too. I’d like to be able to tweak that too. Like under the bga the clearance might be a little tighter. But for longer traces I’d like a bigger clearance to try and reduce cross talk.

Most of the time having one width would be just fine. I’m sure changing the widths too much might create an impedance mismatch in a route.

Might be nice if there were a rectangle ( like a filled zone ) where inside it I could toggle to a different net class set if that net class was overridden. Just throwing spaghetti at the wall here…

There is no (semi) automatic neck-down to get through narrow spaces in KiCad.

What you can do is:

  1. Pcbnew / File / Board Setup / Design Rules / Tracks & Via’s and then define a few Pre-defined track and via dimentions.
  2. While drawing a track use W to make a track narrower, and [Shift + W] to make a track wider.

Other tools that may help:

  1. Select a bunch of tracks, and then use e to edit the selection (only works if no other things are selected) and then set the with of the tracks in the selection.
  2. Use the “Auto Track Width” icon in the middle of the toolbar at the top of the screen: image This lets you continue a track with the same widht as already drawn, instead of defaulting to the netclass width. This can for example be use with first drawing a small array of breakout tracks, and then extending from them to make the BGA breakout.
  3. Temporarily set the netclass to a narrow track width while working on the BGA breakout, and reset it afterwards.
  4. Combination of the above.

Ya, the W key is kind of nice. Been using many of those suggestions already.

Not sure about this but I wish there was a grow selection like Blender. For instance, in Blender, you select a polygon, then you can grow the selection of polygons by one in each direction every time you hit the key. Back in KiCad land, it would be nice if I could select a segment within a trace and grow it by one in each direction every time I hit a grow key. So, around the bga, I’d select the last segment around the pad and grow the selection until it escapes to the point I need then hit the e key to change the width. Might cut down on the shift clicking with the mouse. I think the closest option is the i key but that selects the entire trace.

I can select routes in the high contrast display mode with the mouse. That might be an alternative before pressing e to change the width. But I might select more than the one trace I might be working on.

It’s not quite as granular as Blender’s “grow”, but there is a “select connected traces” command which complements the “I” command you mentioned.

After selecting a track segment (or hovering over one), “U” adds all connected segments up to the next junction to the selection. In 5.99 (unstable future version 6), you can press “U” a second time to select all of the connected segments.

Also in 5.99, you can create a “Rule Area” which specifies different design rules in a particular area, for example a smaller minimum trace width or smaller clearance. I don’t think you can make it automatically change the trace width for you, though.

Another possibility I guess would be to place a dummy footprint in between the two wanted net-classes and then define different widths on the different sides of the footprint.

I actually had the exact same question, however, in my case I need to go between layers using a micro-via and want different trace definitions on the two layers since these are impedance matched RF transmission lines. Anyone can hin on how/if to put a microvia in a footprint. I know it is not possible from the GUI, but I am used to hacking footprints, so I’m ok with typing it in manually. However, I do not know the syntax for doing that. Anyone?

Thanks,
Robert

Ya, U is not quite what I’m looking for. Many of my traces do not have junctions.

The “Rule Area” sounds interesting. Though, I’m using current released version 5.1.10 .

I figured you were using 5.1, but something to look forward to.

I like the “grow” command though. You should open a feature request for that.

I could see that working but I’m not sure the footprint idea would be the way to go. It would be quite involved considering there are 228 pads under the bga I’m using and things are already tightly spaced.

Maybe if I could select under the bga then invert that selection somehow and set the width.

I appreciate all the suggestions.

I’m a little surprised there is not a grow/shrink select kind of feature. Kind of figure it would not be that hard to implement.

No, I agree, it is for sure a tedious solution.

If you use 5.99 I just tries the custom rules and they are AWESOME :slight_smile:
My first experience with them, but seem to work perfectly. It solved my issue immediately with these simple lines:
(version 1)

(rule SL_g
  (constraint clearance (min 0.12mm) (max 1.12mm))
  (condition "A.Layer == 'In1.Cu'"))

(rule SL_w
  (constraint track_width (min 0.1mm) (max 0.1mm))
  (condition "A.Layer == 'In1.Cu'"))

I would think your problem can be solved in a similar way, just replace the “A.Layer-condition” with a condition on a zone, which is also supported.

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