Skip to content

Backdrill Type

The Backdrill function can be used to define drill parameters for backdrilled vias.

; Note: Keyword argument names are required.
val small-drill = Backdrill(
  diameter = 0.3            ; drill diameter, mm
  startpad-diameter = 0.6   ; starting pad diameter, mm
  solder-mask-opening = 0.8 ; Soldermask Opening diameter, mm
  copper-clearance = 1.0    ; Copper Clearance Diameter, mm
)

These can then be applied to a via by specifying a side like this:

public pcb-via backdrilled-via :
  start = LayerIndex(0, Top)
  stop = LayerIndex(2, Bottom)
  backdrill = Backdrill(bottom = small-drill)
  ; ...other via properties

For convenience, a single sided Backdrill can be defined by including the side as one of the initial arguments. This may be convenient, e.g., in the common case where a backdrill definition is only used on one side or when defining a backdrill inline in the via that uses it:

public pcb-via alt-backdrilled-via :
  backdrill = Backdrill(
    side = Bottom             ; Side - Top / Bottom
    diameter = 0.4            ; drill diameter, mm
    startpad-diameter = 0.6   ; starting pad diameter, mm
    solder-mask-opening = 0.8 ; Soldermask Opening diameter, mm
    copper-clearance = 1.0    ; Copper Clearance Diameter, mm
  )
  ; ...other via properties

If side arguments are given, Backdrill returns a BackdrillSet. Otherwise it returns a Backdrill

Drill depth

The drill depth for a backdrill is based on the via it is used with. All layers on the backdrill's side that are not part of the via will be drilled. e.g.:

public pcb-via example-via :
  start = LayerIndex(0, Top)
  stop = LayerIndex(2, Bottom)
  backdrill = Backdrill(bottom = small-drill)
  ; ...other via properties
In this example - the backdrill will drill out all layers until it reaches the via at LayerIndex(2, Bottom). The drill depth is computed from the sum of the copper and dielectric layers from the Bottom layer to 3rd copper layer (zero-indexed value) from the bottom. The 3rd copper layer from the bottom is the layer that will conduct signal for this via. The 1st and 2nd copper layers from the bottom will be drilled out and not able to conduct or form a stub.

LayerIndex(0, Top)     <-  Via start
...                    <-  Barrel of via
LayerIndex(2, Bottom)  <-  Via stop
LayerIndex(1, Bottom)  <-  Drilled
LayerIndex(0, Bottom)  <-  Drilled

Multiple sides

The Backdrill function has overloads for defining backdrills on multiple sides:

val big-drill = Backdrill(
  diameter = 0.5            ; drill diameter, mm
  startpad-diameter = 0.6   ; starting pad diameter, mm
  solder-mask-opening = 0.8 ; Soldermask Opening diameter, mm
  copper-clearance = 1.0    ; Copper Clearance Diameter, mm
)
val big-top = Backdrill(top = big-drill, bottom = small-drill)
val small-top = Backdrill(top = small-drill, bottom = big-drill)
val only-top = Backdrill(top = small-drill)
val only-bottom = Backdrill(bottom = small-drill)

pcb-via drill-both:
  start = LayerIndex(2, Top)
  stop = LayerIndex(2, Bottom)
  backdrill = Backdrill(top = big-drill, bottom = small-drill)
  ; ...other via properties

You can use top? or bottom? to query the drill definitions for specific sides:

val flipped = Backdrill(top = bottom?(small-top), bottom = top?(small-top))

Advanced usage

There are other options for defining backdrills for one, both, or neither side.

You can pass key value pairs to Backdrill:

; Note: It is an error to pass multiple values for the same side
defn maybe-drill (drill-sides:Tuple<Side>) -> BackdrillSet:
  Backdrill $ for side in drill-sides seq:
    side => small-drill

You can combine sets of backdrills directly:

; Note: It is an error if there are multiple definitions for the same side
val top-and-bottom = Backdrill(only-top, only-bottom)