Skip to content

jsl/si/constraints

Package name: jsl/si/constraints

Summary

Data Types

DiffPair-Constraint

Diff-Pair Signal Integrity Constraint

Functions

Function Description
diffpair-constrain Constrain Interface for DiffPair-Constraint
DiffPair-Constraint Constructor for a Differential Pair Constraint object

SI-Constraint

Base type for the Signal Integrity Constraint object

Multis

Function Description
constrain Add SI constraints to the passed port endpoints.

Functions

Function Description
constrain-topology (+ 3) Construct and Constrain a Signal Topology

Definitions

DiffPair-Constraint

Diff-Pair Signal Integrity Constraint

public defstruct DiffPair-Constraint <: SI-Constraint :
    loss: Double
    route-struct: DifferentialRoutingStructure
    skew: Toleranced

  • loss: Double - Max Loss Limit in dB

  • route-struct: DifferentialRoutingStructure - Differential Routing Structure for defining the geometry of the diff-pair The user will define a pcb-differential-routing-structure and then pass that by ref to this field. This will define how this differential pair realizes in the board view.

  • skew: Toleranced - Intra-pair Timing Skew Limit in Seconds This value is typically something like 0 +/- (10.0e-12)

This is a basic concrete implementation of a SI-Constraint. It is typical in diff-pairs to need to define only the skew and the loss. There are typically no inter-pair timing constraints for things like USB3 or DisplayPort.

Functions

diffpair-constrain

Constrain Interface for DiffPair-Constraint

public defn diffpair-constrain (cst:DiffPair-Constraint, src:JITXObject, dst:JITXObject) -> False

  • Returns False

Making this function public makes it easier to derive from DiffPair-Constraint and override it's constrain method.

References

DiffPair-Constraint

Constructor for a Differential Pair Constraint object

public defn DiffPair-Constraint ( -- skew:Toleranced, loss:Double, route-struct:DifferentialRoutingStructure) -> DiffPair-Constraint

  • Returns DiffPair-Constraint

SI-Constraint

Base type for the Signal Integrity Constraint object

public deftype SI-Constraint

The user is expected to derive from this type and implement the constrain function according to their needs.

Multis

constrain

Add SI constraints to the passed port endpoints.

public defmulti constrain (cst:SI-Constraint, src:JITXObject, dst:JITXObject) -> False

  • cst: SI-Constraint - The constraint object with state info
  • src: JITXObject - One endpoint port of the topology to constrain.
  • dst: JITXObject - Other endpoint port of the topology to constrain. This port must match in type with src
  • Returns False

Derived types must implement this function and provide the necessary constraint functions for their particular application.

When constraining the topology, the find-signal-end function will be used on the src and dst so that the proper endpoints of the topology for found. The implementer of a new constraints type is responsible for implmenting this.

Functions

constrain-topology

Construct and Constrain a Signal Topology

public defn constrain-topology (body, src:JITXObject, dst:JITXObject, cst:SI-Constraint)

  • body: false - Function that will construct the topology. This function is passed the src and dst as arguments. The user is responsible for constructing the topology between the source and destination.
  • src: JITXObject - One endpoint port of the topology. This can be any type of port (SinglePin, Bundle, or PortArray) but it must match with the expected port type for the SI-Constraint object.
  • dst: JITXObject - The other endpoint port of the topology. Must match in type with src.
  • cst: SI-Constraint - Constraint object that defines the features of the signals defined by the topology.

This function is used with the within clause to allow the user to construct the topology inside the body of the within clause. This function then handles setting the constraints on the diff-pair channel after the topology is constructed via the SI-Constraint object.

The topology construction uses the src and dst endpoints directly.

  inst ESD : ESD-protector
  within [src, dst] = constrain-topology(usb-conn.data, MCU.data, usb2-constraints):
    require prot:dual-pair from ESD
    topo-net(src => port.A => prot.B => dst)

constrain-topology

Constrain a trivial topology

public defn constrain-topology (src:JITXObject, dst:JITXObject, cst:SI-Constraint)

  • src: JITXObject - One endpoint port of the topology. This can be any type of port (SinglePin, Bundle, or PortArray) but it must match with the expected port type for the SI-Constraint object.
  • dst: JITXObject - The other endpoint port of the topology. Must match in type with src.
  • cst: SI-Constraint - Constraint object that defines the features of the signals defined by the topology.

This implements a point-to-point topology and applies the constraints object. This function does not get used by a within clause and is just a pure function.

constrain-topology

Construct and Constrain a Topology

public defn constrain-topology (body, dp:KeyValue<JITXObject, JITXObject>, cst:SI-Constraint)

Similar to the other constrain-topology function except that the src and dst arguments are passed as a KeyValue instead of individually.

This function typically gets used via a within clause.

constrain-topology

Constrain a Trivial Topology

public defn constrain-topology (dp:KeyValue<JITXObject, JITXObject>, cst:SI-Constraint)

This implements a point-to-point topology and applies the constraints object. This function does not get used by a within clause and is just a pure function.

This function is similar to the other constrain-topology definition for trivial topologies except that the src and dst are encoded as a KeyValue object.

Related Packages

Forwarded by package: jsl/si