101                                       "net for length tuning. Make sure the names of the nets " 
  102                                       "belonging to a differential pair end with either _N/_P " 
 
  172    return std::max( totalP, totalN );
 
 
  180    return std::max( totalP, totalN );
 
 
  240    if( coupledSegments.size() == 0 )
 
  256    int offset = ( tuned.
Gap() + tuned.
Width() ) / 2;
 
  261    m_result.SetBaselineOffset( offset );
 
  267            PNS_DBG( 
Dbg(), AddShape, &l->CLine(), 
YELLOW, 10000, wxT( 
"tuned-path-p" ) );
 
  269            m_router->GetInterface()->DisplayPathLine( l->CLine(), 1 );
 
  277            PNS_DBG( 
Dbg(), AddShape, &l->CLine(), 
YELLOW, 10000, wxT( 
"tuned-path-n" ) );
 
  279            m_router->GetInterface()->DisplayPathLine( l->CLine(), 1 );
 
  283    int curIndexP = 0, curIndexN = 0;
 
  291            side = base.
Side( aP ) < 0;
 
  297        while( sp.indexP >= curIndexP && curIndexP != -1 )
 
  301                ssize_t arcIndex = tunedP.
ArcIndex( curIndexP );
 
  310            curIndexP = tunedP.
NextShape( curIndexP );
 
  313        while( sp.indexN >= curIndexN && curIndexN != -1 )
 
  317                ssize_t arcIndex = tunedN.
ArcIndex( curIndexN );
 
  326            curIndexN = tunedN.
NextShape( curIndexN );
 
  329        m_result.MeanderSegment( base, side );
 
  332    while( curIndexP < tunedP.
PointCount() && curIndexP != -1 )
 
  336            ssize_t arcIndex = tunedP.
ArcIndex( curIndexP );
 
  345        curIndexP = tunedP.
NextShape( curIndexP );
 
  348    while( curIndexN < tunedN.
PointCount() && curIndexN != -1 )
 
  352            ssize_t arcIndex = tunedN.
ArcIndex( curIndexN );
 
  361        curIndexN = tunedN.
NextShape( curIndexN );
 
  383            int64_t tunedPDelay = 
m_router->GetInterface()->CalculateDelayForShapeLineChain(
 
  386            int64_t tunedNDelay = 
m_router->GetInterface()->CalculateDelayForShapeLineChain(
 
  390            m_lastDelay = dpDelay - std::max( tunedPDelay, tunedNDelay );
 
  405                tunedP.
Append( m->CLine( 0 ) );
 
  406                tunedN.
Append( m->CLine( 1 ) );
 
  414            int64_t tunedPDelay = 
m_router->GetInterface()->CalculateDelayForShapeLineChain(
 
  417            int64_t tunedNDelay = 
m_router->GetInterface()->CalculateDelayForShapeLineChain(
 
  421            m_lastDelay += std::max( tunedPDelay, tunedNDelay );
 
 
  513    int w = aShape->
Width();
 
 
  592    std::vector<NET_HANDLE> rv;
 
 
  606        const int64_t desiredDelayMin = 
m_settings.m_targetLengthDelay.Min();
 
  607        const int64_t desiredDelayOpt = 
m_settings.m_targetLengthDelay.Opt();
 
  608        const int64_t desiredDelayMax = 
m_settings.m_targetLengthDelay.Max();
 
  610        const int64_t delayDifferenceOpt = desiredDelayOpt - curDelay;
 
  613        const int64_t lengthDiffMin = 
m_router->GetInterface()->CalculateLengthForDelay(
 
  616        int64_t lengthDiffOpt = 
m_router->GetInterface()->CalculateLengthForDelay(
 
  619        const int64_t lengthDiffMax = 
m_router->GetInterface()->CalculateLengthForDelay(
 
  623        lengthDiffOpt = delayDifferenceOpt > 0 ? lengthDiffOpt : -lengthDiffOpt;
 
  625        m_settings.m_targetLength.SetMin( curLength + lengthDiffOpt - lengthDiffMin );
 
  626        m_settings.m_targetLength.SetOpt( curLength + lengthDiffOpt );
 
  627        m_settings.m_targetLength.SetMax( curLength + lengthDiffOpt + lengthDiffMax );
 
 
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
 
virtual NETCLASS * GetEffectiveNetClass() const
Return the NETCLASS for this item.
 
ROUTER * Router() const
Return current router settings.
 
DEBUG_DECORATOR * Dbg() const
 
Basic class for a differential pair.
 
std::vector< COUPLED_SEGMENTS > COUPLED_SEGMENTS_VEC
 
void SetShape(const SHAPE_LINE_CHAIN &aP, const SHAPE_LINE_CHAIN &aN, bool aSwapLanes=false)
 
void CoupledSegmentPairs(COUPLED_SEGMENTS_VEC &aPairs) const
 
bool Start(const VECTOR2I &aP, ITEM *aStartItem) override
Start routing a single track at point aP, taking item aStartItem as anchor (unless NULL).
 
bool CheckFit(MEANDER_SHAPE *aShape) override
Checks if it's OK to place the shape aShape (i.e.
 
const ITEM_SET Traces() override
Function Traces()
 
SHAPE_LINE_CHAIN m_finalShapeP
 
bool AbortPlacement() override
 
friend class MEANDER_SHAPE
 
bool pairOrientation(const DIFF_PAIR::COUPLED_SEGMENTS &aPair)
 
DP_MEANDER_PLACER(ROUTER *aRouter)
 
SHAPE_LINE_CHAIN m_finalShapeN
 
void calculateTimeDomainTargets()
Current routing start point (end of tail, beginning of head).
 
VECTOR2I m_currentStart
Current world state.
 
bool FixRoute(const VECTOR2I &aP, ITEM *aEndItem, bool aForceFinish=false) override
Commit the currently routed track to the parent node, taking aP as the final end point and aEndItem a...
 
int CurrentLayer() const override
Function CurrentLayer()
 
TUNING_STATUS TuningStatus() const override
Return the tuning status (too short, too long, etc.) of the trace(s) being tuned.
 
long long int TuningLengthResult() const override
Return the resultant length or skew of the tuned traces.
 
const SEG baselineSegment(const DIFF_PAIR::COUPLED_SEGMENTS &aCoupledSegs)
 
TUNING_STATUS m_lastStatus
 
const DIFF_PAIR & GetOriginPair()
 
int64_t origPathDelay() const
 
const ITEM_SET TunedPath() override
 
bool HasPlacedAnything() const override
 
bool CommitPlacement() override
 
bool Move(const VECTOR2I &aP, ITEM *aEndItem) override
Move the end of the currently routed trace to the point aP, taking aEndItem as anchor (if not NULL).
 
const VECTOR2I & CurrentEnd() const override
Function CurrentEnd()
 
long long int m_lastLength
 
const VECTOR2I & CurrentStart() const override
Function CurrentStart()
 
LINKED_ITEM * m_initialSegment
 
int64_t TuningDelayResult() const override
Return the resultant delay or skew of the tuned traces.
 
long long int origPathLength() const
 
const std::vector< NET_HANDLE > CurrentNets() const override
Function CurrentNets()
 
NODE * CurrentNode(bool aLoopsRemoved=false) const override
Return the most recent world state.
 
void Add(const LINE &aLine)
 
Base class for PNS router board items.
 
BOARD_ITEM * GetSourceItem() const
 
bool OfKind(int aKindMask) const
 
Represents a track on a PCB, connecting two non-trivial joints (that is, vias, pads,...
 
Represent a set of meanders fitted over a single or two lines.
 
void tuneLineLength(MEANDERED_LINE &aTuned, long long int aElongation)
Take a set of meanders in aTuned and tunes their length to extend the original line length by aElonga...
 
TUNING_STATUS
< Result of the length tuning operation
 
int m_currentWidth
Meander settings.
 
MEANDER_PLACER_BASE(ROUTER *aRouter)
 
MEANDER_SETTINGS m_settings
The current end point.
 
int64_t lineDelay(const ITEM_SET &aLine, const SOLID *aStartPad, const SOLID *aEndPad) const
Calculate the total delay of the line represented by an item set (tracks and vias)
 
NODE * m_world
Width of the meandered trace(s).
 
VECTOR2I getSnappedStartPoint(LINKED_ITEM *aStartItem, VECTOR2I aStartPoint)
 
long long int lineLength(const ITEM_SET &aLine, const SOLID *aStartPad, const SOLID *aEndPad) const
Calculate the total length of the line represented by an item set (tracks and vias)
 
const SHAPE_LINE_CHAIN & CLine(int aShape) const
 
Keep the router "world" - i.e.
 
NODE * Branch()
Create a lightweight copy (called branch) of self that tracks the changes (added/removed items) wrs t...
 
void SetFailureReason(const wxString &aReason)
 
const DIFF_PAIR AssembleDiffPair(SEGMENT *aStart)
 
const ITEM_SET AssembleTuningPath(ROUTER_IFACE *aRouterIface, ITEM *aStart, SOLID **aStartPad=nullptr, SOLID **aEndPad=nullptr)
Like AssembleTrivialPath, but follows the track length algorithm, which discards segments that are fu...
 
int Side(const VECTOR2I &aP) const
Determine on which side of directed line passing via segment ends point aP lies.
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
const SHAPE_ARC & Arc(size_t aArc) const
 
int PointCount() const
Return the number of points (vertices) in this line chain.
 
ssize_t ArcIndex(size_t aSegment) const
Return the arc index for the given segment index.
 
void Clear()
Remove all points from the line chain.
 
void Simplify(int aTolerance=0)
Simplify the line chain by removing colinear adjacent segments and duplicate vertices.
 
int NextShape(int aPointIndex) const
Return the vertex index of the next shape in the chain, or -1 if aPointIndex is the last shape.
 
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
 
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
 
const VECTOR2I & CLastPoint() const
Return the last point in the line chain.
 
bool IsArcSegment(size_t aSegment) const
 
long long int Length() const
Return length of the line chain in Euclidean metric.
 
Push and Shove diff pair dimensions (gap) settings dialog.
 
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
 
#define PNS_DBG(dbg, method,...)
 
Casted dyn_cast(From aObject)
A lightweight dynamic downcast.
 
VECTOR2< int32_t > VECTOR2I