A pcb-material definition represents a material in a pcb-stackup layer.


pcb-material mat-name (arg1:Type1, ...) :
  name = <String|False>
  description = <String|False>
  type = <MaterialType>

  material-name = <String|False>

  ; For Dielectric Materials
  dielectric-coefficient = <Double|False>
  loss-tangent = <Double|False>

  ; For Conductor Materials
  roughness = <Double|False>

The expression name mat-name uniquely identifies this stackup definition in the current context.

The argument list (arg1:Type1, ...) is optional and provides a means of constructing parameterized material definitions.

  • Required Parameters
    • type - There are two valid values for MaterialType
      • Conductor
      • Dielectric
  • Optional Parameters
    • name - This name is used in the UI as a more user friendly name. If this string is not provided then the mat-name expression is used as the stackup's name.
    • description - This string is defining more meta-data for the material - such as manufacturer of this material.
    • material-name - This string label is optional and used only for Kicad Import/Export.
    • Dielectric Type Optional Parameters
      • dielectric-coefficient - Relative Coefficient of Permittivity for this material. This value is a unit-less instance of type Double and generally should be 1.0 or greater.
      • loss-tangent - The Loss Tangent for this material. This value is a unit-less instance of type Double.
    • Conductor Type Optional Parameters
      • roughness - Surface Roughness of the conductor layer. This parameter effects the losses in RF circuits due to the skin effect. This value is in mm.

If you add roughness to a Dielectric type or a loss-tangent to a Conductor type, the JITX runtime will throw an error.


Uncaught Exception: Dielectrics can only have dielectric-coefficient and loss-tangent attributes.


The pcb-material statements create definitions that are primarily used by the pcb-stackup statement. These material definitions provide the properties of each material in the stackup.

Below is a trivial example for a 2-layer board:

pcb-material core-45 :
  type = Dielectric
  dielectric-coefficient = 4.5
  loss-tangent = 0.008

pcb-material soldermask :
  type = Dielectric
  dielectric-coefficient = 3.2
  loss-tangent = 0.012

pcb-material copper:
  type = Conductor

pcb-stackup simple-2-layer :
  name = "2-layer 1.6mm"
  layer(0.019, soldermask)
  layer(0.035, copper)
  layer(1.5, core-45)
  layer(0.035, copper)
  layer(0.019, soldermask)

Using Arguments

Often times, a family of prepreg materials will come in multiple different constructions. For example, see Isola 370HR. Here is an excerpt from their core data:

Isola 370HR Core Data

We might want to construct a pcb-material that allows us to label with these different features:

pcb-material isola-370HR (ply:String, Dk:Double, Df:Double) :
  name = to-string("Isola 370HR %_" % [ply])
  type = Dielectric
  dielectric-coefficient = Dk
  loss-tangent = Df

val isola-370hr-1080 = isola-370HR("1x1080", 4.04, 0.021)

This structure allows us to build a material spec for any of the cores in the Isola catalog. The name for this material will be Isola 370HR 1x1080 which we can use in programmatically generated stackup tables.