mdi1000base_t module#
MDI - Media Dependent Interface
This module defines the MDI bundle and associated constraint functions for the 1000Base-T Ethernet standard.
Create a 1000Base-T MDI Constraint and apply it between two jacks. The pairs are joined by ordinary nets, and the constraint names the two ends.
>>> class EthernetCircuit(Circuit):
... def __init__(self):
... self.ethernet_jack = EthernetJack(), EthernetJack()
... eth0 = self.ethernet_jack[0].require(MDI1000BaseT)
... eth1 = self.ethernet_jack[1].require(MDI1000BaseT)
... self.ethernet = eth0 + eth1
... self.mdiconstraint = MDI1000BaseT.Constraint()
... self.mdiconstraint.constrain(eth0, eth1)
Apply it through ESD protection. Each protection channel passes the signal
from A to B, so the protection component needs a
BridgingPinModel between them; without one the path
stops at the protection part.
>>> class EthernetCircuit(Circuit):
... def __init__(self):
... self.ethernet_jack = EthernetJack(), EthernetJack()
... eth0 = self.ethernet_jack[0].require(MDI1000BaseT)
... eth1 = self.ethernet_jack[1].require(MDI1000BaseT)
... self.esd_pool = ESDPool(2)
... self.pairs = []
... for p in range(4):
... protected = self.esd_pool.require(DualPair)
... self.pairs.append((eth0.TP[p] + protected.A, protected.B + eth1.TP[p]))
... self.mdiconstraint = MDI1000BaseT.Constraint()
... self.mdiconstraint.constrain(eth0, eth1)
The ends here are require()-ed ports, so a constraint measures only once
the pin assignment resolves, for example from code routes on the providing
circuit’s physical pins, and the path is routed. Query the design issues
with rt.submit(MyDesign).issues(satisfied=True, wait=30) inside
with jitx.runtime as rt: and print each report group’s issues to see each
measurement, or the issue that stops one; a group’s satisfied flag says
whether its constraint is met.
- class MDI1000BaseT[source]#
Bases:
Port- TP = (DiffPair(), DiffPair(), DiffPair(), DiffPair())#
- class Standard[source]#
Bases:
object- skew = Toleranced(0, 8e-13, 8e-13)#
Intra pair skew - Allowable delay difference as a Toleranced value in Seconds.
- loss = 12#
Max allowable power loss limit in dB.
- impedance = Toleranced(95, 14.25, 14.25)#
The expected differential impedance for the differential pairs in Ohms
- pair_to_pair_skew = Toleranced(0, 1.65e-10, 1.65e-10)#
Allowable inter-pair delay difference as a Toleranced value in Seconds.
- class Constraint(standard=None, structure=None)[source]#
Bases:
SignalConstraint[MDI1000BaseT]- Parameters:
standard (Standard | None)
structure (DifferentialRoutingStructure | None)
- diffpair_constraint: DiffPairConstraint#
- inter_skew: Toleranced#
- constrain(src, dst)[source]#
Called to apply implementation specific constraints. Note that all constraints should be added to the container by calling
add()on self. It is valid to just set member attributes as well, as with everything in JITX, but be aware that your constraint may be used multiple times with different topologies, and thus be careful with overwriting values (e.g. some constraints may use a singleDiffPairConstraintto constrain all its diff pairs).- Parameters:
src (MDI1000BaseT)
dst (MDI1000BaseT)
- class Provide(diffpairs)[source]#
Bases:
ContainerConstruct provider for a 1000Base-T connection.
This constructs a provider for a 1000Base-T (Gigabit) MDI interface. This includes creating the appropriate option mappings for swapping the differential pairs.
>>> self += MDI1000BaseT.Provide( ... [self.C.TXRX1A, self.C.TXRX1B, self.C.TXRX1C, self.C.TXRX1D] ... )