Skip to content

Insertion Loss Constraint

The insertion-loss statement is used to apply an insertion loss constraint on a signal topology. This constraint is used by the routing engine when routing a signal on the board.

This statement is only valid within the pcb-module context.

Signature

; Key-Value Endpoint Variant
insertion-loss(<REF>) = <InsertionLossConstraint>
; Explicit Endpoint Variant
insertion-loss(<REF-1>, <REF-2>) = <InsertionLossConstraint>

The insertion-loss statement expects two endpoints. Each endpoint is a ref to a SinglePin port of a component or module instance. Each of these ports must be part of a valid topology.

In most applications, the endpoints are the extrema of a signal topology.

The Constraint

An instance of InsertionLossConstraint is applied to the insertion-loss statement.

defstruct InsertionLossConstraint <: SignalConstraint :
  min-loss:Double
  max-loss:Double

defn InsertionLossConstraint (loss:Toleranced) -> InsertionLossConstraint:
  ...

The min-loss and max-loss are relative attenuation limits in units of dB. max-loss must be greater than min-loss.

This insertion loss features of the signal's route are determined by the DifferentialRoutingStructure as applied via the structure statement.

Usage

pcb-differential-routing-structure diff-90:
  ...

pcb-bundle usb2-data:
  data : diff-pair

pcb-component PIC16F1455:
  port bus : usb2-data
  ...

pcb-component USBMicroB:
  port bus : usb2-data
  ...

pcb-module usb2:

  inst MCU : PIC16F1455
  inst conn : USBMicroB

  ; Construct the Topology - Note that these statements
  ;   can operate on the bundle types (in this case `diff-pair`)
  net (MCU.bus.data, conn.bus.data)
  topology-segment(MCU.bus.data, conn.bus.data)
  ; Insertion Loss constraints require a routing structure application
  ;  to know how to compute the loss metric for each layer and route
  ;  type in a design. See the `structure` statement docs for more info.
  structure(...) = diff-90

  val max-loss = InsertionLossConstraint(
    min-max(0.0, 12.0)
  )

  ; Insertion Loss Constraints are applied on SinglePin ports
  ;  so this requires two statements for a `diff-pair` bundle.
  insertion-loss(MCU.bus.data.P => conn.bus.data.P) = max-loss
  insertion-loss(MCU.bus.data.N => conn.bus.data.N) = max-loss

  ; Equivalent Representation
  ; insertion-loss(MCU.bus.data.P, conn.bus.data.P) = max-loss
  ; insertion-loss(MCU.bus.data.N, conn.bus.data.N) = max-loss

In this example, the insertion loss is applied to the extrema of each of the P and N signals of the diff-pair bundle.

Notice that the insertion-loss statement applies to SinglePin objects. The JSL library provides tools for applying these primitives to more complicated Bundle and PortArray structures.