Setting for DRC and interactive router to support blind/buried vias

Hi,

I’m working on a PCB with 6 layers. My manufacturer supports blind/buried via between some layers and if I deviate from this, I have to pay extra.

But the only option for blind/buried via I could find was this checkbox:

image

How can I define (maybe in the stack up) between which layers blind/buried via are allowed?

This info would be necessary, so that the DRC can check if I placed a blind/buried via between layers, which are not supported.

And if during the routing, the interactive router could place a blind via instead of
a normal via, when allowed, would also be nice.

I think custom design rules can do this. If not, file an issue to the issue database.

1 Like

Thanks for the suggestion.

I tried to use the custom rules this morning. But I couldn’t get it to work.

I will open a wishlist issue for this feature, so users without programming background can also use this.

Edit: here it is Wishlist: User friendly setting for allowed blind/buried via layers (#10324) · Issues · KiCad / KiCad Source Code / kicad · GitLab

There is a button in the GUI of the PCB editor to set the layer pair during routing.
I’m assuming that if you set those to the (two) layer in which you want your blind via’s, then KiCad will draw between those layers.

1 Like

A custom rule would look something like this:

(rule "bbvias"
   (constraint disallow via)
   (condition "A.Via_Type == 'Blind/buried' && A.Layer_Top == 'F.Cu' && A.Layer_Bottom == 'In3.Cu'"))

(This one disallows blind/buried vias between F.Cu and In3.Cu.)

2 Likes

(Actually, since a non-blind/buried via goes all the way through, you probably don’t even need the A.Via_Type == 'Blind/buried' part.)

Thank you both.

The setting for the layer pair works during the placement of blind/buried vias. This should make the routing easier.

I tried to adapt your custom rule example for my 6 layer stack up.

(version 1)

# Blind/buried via between layer 1 and 2
(rule "BB_L1_L2_1"
	(constraint disallow buried_via)
	(condition "A.Layer_Top == 'F.Cu' && A.Layer_Bottom != 'In1.Cu'")
)
(rule "BB_L1_L2_2"
	(constraint disallow buried_via)
	(condition "A.Layer_Top == 'In1.Cu' && A.Layer_Bottom != 'F.Cu'")
)

# Blind/buried via between layer 3 and 4
(rule "BB_L3_L4_1"
	(constraint disallow buried_via)
	(condition "A.Layer_Top == 'In2.Cu' && A.Layer_Bottom != 'In3.Cu'")
)
(rule "BB_L3_L4_2"
	(constraint disallow buried_via)
	(condition "A.Layer_Top == 'In3.Cu' && A.Layer_Bottom != 'In2.Cu'")
)

# Blind/buried via between layer 5 and 6
(rule "BB_L5_L6_1"
	(constraint disallow buried_via)
	(condition "A.Layer_Top == 'In4.Cu' && A.Layer_Bottom != 'B.Cu'")
)
(rule "BB_L5_L6_2"
	(constraint disallow buried_via)
	(condition "A.Layer_Top == 'B.Cu' && A.Layer_Bottom != 'In4.Cu'")
)

So, for me, this works right now.

2 Likes