ocdb/utils/landpatterns
Land patterns (sometimes called footprints) are the geometry associated with a single package that is to be placed on a design. In JITX, they are represented using the pcb-landpattern
statement. The package ocdb/utils/landpatterns
contains utilities for generating optimized land-patterns from parameters.
Table of Contents
- Helpful References
- Definitions
- Two Pin Land Patterns
- Small Outline (SO) Land Patterns
- QFP Land Patterns
- QFN Land Patterns
- BGA Land Patterns
Helpful References
- JEDEC JESD30E, "Descriptive Designation System for Semiconductor-device packages"
- IPC 7351B, Generic Requirements for Surface Mount Design and Land Pattern Standard
Definitions
- Package: the physical device that will be placed (including the exterior plastic packaging and metal leads or terminations of a component). A package has one or more leads or terminations..
- Lead or Termination: The conductors on the package that interface with the electrical device.
- Land Pattern: the geometry on the layers of the board that sits underneath the package. A landpattern has one or more pads or and zero or more layers.
- Pad: the geometry on the layers associated with a single lead or termination of the component.
Two Pin Land Patterns
Chip Land Patterns
Two pin chip land patterns are commonly used for passive devices. The following generators are used to generate land patterns for these components that are compliant with IPC specifications.
public defn make-two-pin-chip-landpattern (length:Toleranced,
width:Toleranced,
lead-length:Toleranced)
Create a two pin surface mount (chip) non-polarized land pattern.
length
: the length of the component.width
: the width of the component.lead-length
: the length of the leads of the component.
public defn make-two-pin-chip-landpattern (length:Toleranced,
width:Toleranced,
lead-length:Toleranced,
polarized?:True|False)
Create a two pin surface mount (chip) land pattern with optional polarization
length
: the length of the component.width
: the width of the component.lead-length
: the length of the leads of the component.polarized?
:true
if the land pattern is polarized,false
otherwise.
public defn make-two-pin-chip-landpattern (length:Toleranced,
width:Toleranced,
lead-length:Toleranced,
lead-width:Toleranced)
Create a two pin surface mount (chip) land pattern with a lead width that is different from the component width.
length
: the length of the component.width
: the width of the component.lead-length
: the length of the leads of the component.lead-width
: the width of the leads of the component, which may be different than the width of the component.
public defn make-two-pin-chip-landpattern (length:Toleranced,
width:Toleranced,
lead-length:Toleranced,
lead-width:Toleranced,
polarized?:True|False)
Create a two pin surface mount (chip) land pattern with a lead width that is different from the component width and optional polarization.
length
: the length of the component.width
: the width of the component.lead-length
: the length of the leads of the component.lead-width
: the width of the leads of the component, which may be different than the width of the component.polarized?
:true
if the land pattern is polarized,false
otherwise.
Example : A Surface Mount Capacitor
The associated datasheet can be found here
pcb-landpattern TH3Axxx :
make-two-pin-chip-landpattern(tol(3.2, 0.2), ; package-length, L
tol(1.6, 0.2), ; package-width, W
tol(0.8, 0.3), ; lead-length, P
tol(1.2, 0.1), ; lead-width, Tw
true) ; polarized ?
Through Hole Land Patterns
Radial Through Hole Land Patterns
Supported two-pin through hole land patterns are either axial or radial.
public defn make-two-pin-radial-landpattern (component-diameter:Toleranced,
lead-spacing:Double,
lead-diameter:Toleranced)
Create a two-pin radial landpattern.
component-diameter
: the diameter of the component packagelead-spacing
: the distance between leads.lead-diameter
: the diameter of the leads.
public defn make-two-pin-radial-landpattern (component-diameter:Toleranced,
lead-spacing:Double,
lead-diameter:Toleranced
polarized?:True|False)
Create a two-pin radial landpattern with optional polarity.
component-diameter
: the diameter of the component packagelead-spacing
: the distance between leads.lead-diameter
: the diameter of the leads.polarized?
:true
if the land pattern is polarized,false
otherwise.
Axial Through Hole Land Patterns
public defn make-two-pin-axial-landpattern (component-diameter:Toleranced,
lead-spacing:Double,
lead-diameter:Toleranced)
Create a two-pin radial landpattern.
component-diameter
: the diameter of the component packagelead-spacing
: the distance between leads.lead-diameter
: the diameter of the leads.
public defn make-two-pin-axial-landpattern (component-diameter:Toleranced,
lead-spacing:Double,
lead-diameter:Toleranced
polarized?:True|False)
Create a two-pin radial landpattern with optional polarity.
component-diameter
: the diameter of the component packagelead-spacing
: the distance between leads.lead-diameter
: the diameter of the leads.polarized?
:true
if the land pattern is polarized,false
otherwise.
Small Outline Land Patterns
A small outline (SO) package is a package with pins along two sides of the component.
JEDEC symbol to JITX Generator Arguments
The following table may help in converting JEDEC-style dimensions into arguments for the JITX small outline landpattern generator.
JEDEC Symbol | JITX Argument |
---|---|
b | terminal-width |
D | package-length |
E | lead-span |
E1 | package-width |
e | pitch |
L | terminal-length |
n | num-pins |
public defn make-n-pin-soic-landpattern (num-pins:Int,
pitch:Double, ; e
lead-span:Toleranced, ; E
package-length:Toleranced, ; E1
package-width:Toleranced, ; D
terminal-length:Toleranced, ; L
terminal-width:Toleranced) ; b
Create an SO land pattern.
num-pins
: the number of pins of the package (must be even).pitch
: the pitch of the leads or terminals (mm),e
in the table above.lead-span
: the distance from lead-edge to lead-edge (mm),E
in the table above.package-length
: the size of the package in the same dimension as thelead-span
(mm),E1
in the table above.package-width
: the size of the package in the orthogonal dimension aslead-span
(mm),D
in the table above.terminal-length
: the length of terminals or leads in contact with the land pattern (mm),L
in the table above.terminal-width
: the size of the terminals or leads in contact with the land pattern, in the orthogonal dimension toterminal-length
(mm),b
in the table above.
Example Usage
pcb-landpattern SO8N :
make-n-pin-soic-landpattern(8, ; number of pins
1.27 ; pitch
min-typ-max(5.8, 6.0, 6.2) ; lead-span
min-typ-max(4.8, 4.9, 5.0) ; package-length
min-typ-max(3.8, 3.9, 4.0) ; package-width
min-typ-max(0.4, 0.8, 1.27) ; lead-length, using average as typical
min-typ-max(0.28, 0.38, 0.48)) ; lead-width, using average as typical
See The Model a Land Pattern tutorial for more details on parametric land pattern generation.
SOT Land Patterns
SOT landpatterns can be defined using the more general purpose API call, make-dual-row-smd-landpattern
which creates a two-row SMD land pattern with different numbers of pins on either side.
public defn make-dual-row-smd-landpattern (primary-num-pins: Int,
secondary-num-pins: Int,
primary-pin-pitch: Double,
secondary-pin-pitch: Double,
lead-span: Toleranced,
package-length: Toleranced,
package-width: Toleranced,
terminal-length: Toleranced,
terminal-width: Toleranced,
polarity-marker?: True|False)
primary-num-pins
: the number of pins on one side of the land patternsecondary-num-pins
: the number of pins on the other side of the land patternprimary-pin-pitch
: the pitch of pins on the primary side of the land patternsecondary-pin-pitch
: the pitch of the pins on the other side of the land patternlead-span
: the lead span across the land patternpackage-length
: the length of the packagepackage-width
: the width of the packageterminal-length
: the length of the terminalsterminal-width
: the width of the terminalspolarity-marker?
: whether to add a polarity marker to the landpattern or not
Example Usage
pcb-landpattern SOT-23 :
make-dual-row-smd-landpattern(
n1, n2, p1, p2,
lead-span, package-length, package-width,
terminal-length, terminal-width,
polarity-marker?: True|False) where :
val n1 = 2
val n2 = 1
val p1 = 1.9
val p2 = 0.0 ; unneeded for one pin
val lead-span = min-typ-max(2.1, 2.37, 2.634) ; E
val package-length = tol(1.3, 0.1) ; E1
val package-width = min-typ-max(2.8, 2.9, 3.04), ; D
val terminal-length = tol(0.4, 0.1)
val terminal-width = tol(0.5, 0.1)
val polarity-marker? = false
QFP Land Patterns
A quad flat package (QFP) is a package with pins along all four sides of the component.
JEDEC symbol to JITX Generator Arguments
JEDEC Symbol | JITX Argument |
---|---|
b | terminal-width |
D, E | lead-span |
E1, D1 | package-size |
e | pitch |
L | terminal-length |
n | num-pins |
public defn make-qfp-landpattern (num-pins:Int,
pitch:Double, ; e
lead-span:Toleranced, ; E, D
package-size:Toleranced, ; E1, D1
terminal-length:Toleranced, ; L
terminal-width:Toleranced ; b
exposed-metal-heat-feature?:Shape ; optional thermal pad
num-pins
: the number of pins of the package (must be even).pitch
: the pitch of the leads or terminals (mm),e
in the table above.lead-span
: the distance from lead-edge to lead-edge (mm),E
in the table above.package-size
: the size of the package,E1, D1
in the table above. The package is assumed to be square.terminal-length
: the length of terminals or leads in contact with the land pattern (mm),L
in the table above.terminal-width
: the size of the terminals or leads in contact with the land pattern, in the orthogonal dimension toterminal-length
(mm),b
in the table above.exposed-metal-heat-feature?
: an optional parameter for a thermal pad shape.
Example Usage
pcb-landpattern QFP-100 :
make-qfp-landpattern(
num-pins, pitch,
lead-span, package-size,
terminal-length, terminal-width,
thermal-pad) where :
val num-pins = 100 ; the total number of pins
val pitch = 0.5 ; the distance between pin centers
val lead-span = min-typ-max(15.8, 16.0, 16.2) ; the distance between the outer edges of the leads
val package-size = min-typ-max(13.8, 14.0, 14.2) ; the size of the package, assumed to be square
val terminal-width = min-typ-max(0.17, 0.22, 0.27) ; the width of the leads
val terminal-length = min-typ-max(0.45, 0.60, 0.70) ; the length of the leads
val thermal-pad = false
QFN Land Patterns
A quad flat package no-lead (QFN) is a quad landpattern where the terminals are pads on the underside of the component, as opposed to leads that extend outside the component (see QFP Land Patterns).
JEDEC symbol to JITX Generator Arguments
JEDEC Symbol | JITX Argument |
---|---|
b | terminal-width |
E, D | package-size |
e | pitch |
L | terminal-length |
n | num-pins |
public defn make-qfn-landpattern (num-pins:Int,
pitch:Double, ; e
package-size:Toleranced, ; E, D
terminal-length:Toleranced, ; L
terminal-width:Toleranced, ; b
corner-pads?:False|[Pad, Pad], ; L1 x b
exposed-metal-heat-feature?:Shape|False) : ; optional thermal pad
num-pins
: the number of pins of the package (must be even).pitch
: the pitch of the leads or terminals (mm),e
in the table above.package-size
: the size of the package,E
,D
in the table above. The package is assumed to be square.terminal-length
: the length of terminals or leads in contact with the land pattern (mm),L
in the table above.terminal-width
: the size of the terminals or leads in contact with the land pattern, in the orthogonal dimension toterminal-length
(mm),b
in the table above.corner-pads?
: optional pair ofpcb-pad
definitions to use to replace the corner pads on the landpattern.exposed-metal-heat-feature?
, an optional
Example Usage
pcb-landpattern QFN-28 :
make-qfn-landpattern(
num-pins, pitch,
package-size, lead-length, lead-width
corner-pads,
thermal-pad,) where :
val num-pins = 28 ; the total number of pins, must be divisible by 4
val pitch = 0.5 ; the pitch of the pins
val package-size = min-typ-max(3.90, 4.00, 4.10) ; the size of the package, assumed to be square
val lead-length = min-typ-max(0.30, 0.40, 0.50) ; the length of the lead terminals
val lead-width = min-typ-max(0.20, 0.25, 0.30) ; the width of the lead terminals
; Optional Corner Pad Modifiers
val corner-pads = [
smd-pad(loc(-0.1, 0.0) * Rectangle(0.45, 0.21))
smd-pad(loc(-0.1, 0.0) * Rectangle(0.45, 0.21))
]
; Optional thermal pad
val thermal-pad = false
Note: some trial and error might be required to find dimensions for corner pad overrides. In this case, the length was found using the
max
value of L1 in the table, and the width was found empirically by measuring the width of the other pads.
BGA Land Patterns
A ball grid array (BGA) package uses a matrix of solder balls on the bottom of the package, as opposed to exposed metal terminals.
JEDEC symbol to JITX Generator Arguments
JEDEC Symbol | JITX Argument |
---|---|
num-rows | |
num-cols | |
b | ball-diameter |
D | package-width |
E | package-length |
e | pitch |
num-cols:Int,
pitch:Double,
ball-diameter:Double,
package-length:Toleranced,
package-width:Toleranced,
modifier:BGAModifier) :
num-rows
: the number of rows of packagenum-cols
: the number of columns of the packagepitch
: the pitch of the solder bumpsball-diameter
: the nominal/typical diameter of the solder ballspackage-length
: the length of the packagepackage-width
: the width of the packagemodifier
: the depopulation and/or pitch modifier
Example Usage
pcb-landpattern BGA-64 :
make-bga-landpattern(
num-rows, num-cols
pitch, ball-diameter
package-length, package-width
modifier
) where :
val num-rows = 8 ; Number of rows in the matrix
val num-cols = 8 ; Number of columns in the matrix
val pitch = 0.50 ; the spacing between ball centers
val ball-diameter = 0.28 ; the diameter of the solder balls
val package-length = min-typ-max(4.85, 5.0, 5.15) ; the length of the package
val package-width = min-typ-max(4.85, 5.0, 5.15) ; the width of the package
; The BGA Modifier. See ocdb/utils/landpatterns for more
; modifiers, supported are StaggeredMatrix, EquilateralTriangleMatrix,
; PerimeterMatrix, ThermallyEnhancedMatrix.
val modifier = FullMatrix()
Depopulation Modifiers
The make-bga-package
argument uses a special argument named modifier
which allows for a variety of depopulation and ball spacing strategies. The currently supported depopulation modifiers are:
FullMatrix
In a FullMatrix
(the default) no pads will be depopulated.
defn FullMatrix () -> BGAModifier
StaggeredMatrix
In a StaggeredMatrix
, every other pad is depopulated.
defn StaggeredMatrix () -> BGAModifier
PerimeterMatrix
In a PerimeterMatrix
, a range of rows and columns in the center will be depopulated
defn PerimeterMatrix (rows:Range, cols:Range) -> BGAModifier
rows
: the range of rows to depopulatecols
: the range of cols to depopulate
Usage :
; rows 3,4,6 and columns 4,5 will be depopulated.
val modifier = PerimeterMatrix(3 through 6, 4 through 5)
ThermallyEnhancedMatrix
A ThermallyEnhancedMatrix
is like a PerimeterMatrix, except with some region in the center remaining populated.
defn ThermallyEnhancedMatrix (perimeter-rows:Range, perimeter-cols:Range
interior-rows:Range, interior-cols:Range ) -> BGAModifier
perimeter-rows
: the range of rows to depopulateperimeter-cols
: the range of columns to depopulateinterior-rows
: the range of rows in the center to remain populatedinterior-cols
: the range of columns in the center to remain populated
Usage :
; Pins (5,5) through (6,6) will be populated, while the other
; pins within the range (4,4) through (7,7) will be depopulated.
val modifier = ThermallyEnhancedMatrix(
4 through 7, 4 through 7,
5 through 6, 5 through 6,
))
EquilateralTriangleMatrix
An "EquilateralTriangleMatrix" is like a staggered matrix, but where the pads are all equidistant from each other. This means for any three adjacent pads with two in the same row or column, the centers of the pads form an equilateral triangle.
defn EquilateralTriangleMatrix () -> BGAModifier
CustomDepop
The CustomDepop
modifier allows the caller to specify which pins are depopulated using a callback.
defn CustomDepop (callback: (Int, Int) -> True|False)
Usage :
defn depop? (row:Int, col:Int) :
; Specify a list of custom depopulated pins
val depopulated = [
[0, 2]
[0, 5]
[2, 8]
[3, 0]
[5, 8]
[6, 0]
[8, 3]
[8, 6]
]
contains?(depopulated, [row, col])
val modifier = CustomDepop(depop?)