|
KiCad PCB EDA Suite
|
Single track length matching/meandering tool. More...
#include <pns_meander_placer.h>
Public Types | |
| enum | TUNING_STATUS { TOO_SHORT = 0 , TOO_LONG , TUNED } |
| < Result of the length tuning operation More... | |
Public Member Functions | |
| MEANDER_PLACER (ROUTER *aRouter) | |
| virtual | ~MEANDER_PLACER () |
| virtual bool | Start (const VECTOR2I &aP, ITEM *aStartItem) override |
| Function Start() | |
| virtual bool | Move (const VECTOR2I &aP, ITEM *aEndItem) override |
| Function Move() | |
| virtual bool | FixRoute (const VECTOR2I &aP, ITEM *aEndItem, bool aForceFinish=false) override |
| Function FixRoute() | |
| bool | CommitPlacement () override |
| bool | AbortPlacement () override |
| bool | HasPlacedAnything () const override |
| NODE * | CurrentNode (bool aLoopsRemoved=false) const override |
| Function CurrentNode() | |
| const ITEM_SET | Traces () override |
| Function Traces() | |
| const ITEM_SET | TunedPath () override |
| const VECTOR2I & | CurrentStart () const override |
| Function CurrentStart() | |
| const VECTOR2I & | CurrentEnd () const override |
| Function CurrentEnd() | |
| const std::vector< NET_HANDLE > | CurrentNets () const override |
| Function CurrentNets() | |
| int | CurrentLayer () const override |
| Function CurrentLayer() | |
| long long int | TuningLengthResult () const override |
| Return the resultant length or skew of the tuned traces. | |
| int64_t | TuningDelayResult () const override |
| Return the resultant delay or skew of the tuned traces. | |
| TUNING_STATUS | TuningStatus () const override |
| Return the tuning status (too short, too long, etc.) of the trace(s) being tuned. | |
| bool | CheckFit (MEANDER_SHAPE *aShape) override |
| Checks if it's OK to place the shape aShape (i.e. | |
| bool | HasBaseline () const |
| long long int | TuningLengthDelta () const |
| int64_t | TuningDelayDelta () const |
| virtual void | AmplitudeStep (int aSign) |
| Increase/decreases the current meandering amplitude by one step. | |
| virtual void | SpacingStep (int aSign) |
| Increase/decrease the current meandering spacing by one step. | |
| virtual int | Clearance () |
| Return the clearance of the track(s) being length tuned. | |
| virtual const MEANDER_SETTINGS & | MeanderSettings () const |
| Return the current meandering configuration. | |
| virtual void | UpdateSettings (const MEANDER_SETTINGS &aSettings) |
| virtual std::optional< VECTOR2I > | UnfixRoute () |
| virtual bool | ToggleVia (bool aEnabled) |
| Function ToggleVia() | |
| virtual bool | IsPlacingVia () const |
| Function IsPlacingVia() | |
| virtual bool | SetLayer (int aLayer) |
| Function SetLayer() | |
| virtual void | FlipPosture () |
| Function FlipPosture() | |
| virtual void | UpdateSizes (const SIZES_SETTINGS &aSizes) |
| Function UpdateSizes() | |
| virtual void | SetOrthoMode (bool aOrthoMode) |
| Function SetOrthoMode() | |
| virtual void | GetModifiedNets (std::vector< NET_HANDLE > &aNets) const |
| Function GetModifiedNets. | |
| ROUTER * | Router () const |
| Return current router settings. | |
| ROUTING_SETTINGS & | Settings () const |
| Return the logger object, allowing to dump geometry to a file. | |
| virtual LOGGER * | Logger () |
| void | SetLogger (LOGGER *aLogger) |
| void | SetDebugDecorator (DEBUG_DECORATOR *aDecorator) |
| Assign a debug decorator allowing this algo to draw extra graphics for visual debugging. | |
| DEBUG_DECORATOR * | Dbg () const |
| const BOX2I & | VisibleViewArea () const |
Protected Member Functions | |
| bool | doMove (const VECTOR2I &aP, ITEM *aEndItem, long long int aTargetLength, long long int aTargetMin, long long int aTargetMax) |
| virtual long long int | origPathLength () const |
| virtual int64_t | origPathDelay () const |
| virtual void | calculateTimeDomainTargets () |
| current routing start point (end of tail, beginning of head) | |
| 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 aElongation. | |
| 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) | |
| 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) | |
| void | initChainExtras () |
| Cache the per-session chain-extras length/delay (other nets in the same chain) so per-Move use does not re-walk the live BOARD. | |
| long long int | chainNarrowingOffset () const |
| Return the length offset to subtract when converting a user-facing total signal length target into a meander-only doMove target. | |
| virtual bool | removeLoops (NODE *aNode, LINE &aLatest) |
| virtual bool | simplifyNewLine (NODE *aNode, LINKED_ITEM *aLatest) |
| Assemble a line starting from segment or arc aLatest, removes collinear segments and redundant vertices. | |
Single track length matching/meandering tool.
Definition at line 45 of file pns_meander_placer.h.
|
inherited |
< Result of the length tuning operation
| Enumerator | |
|---|---|
| TOO_SHORT | |
| TOO_LONG | |
| TUNED | |
Definition at line 49 of file pns_meander_placer_base.h.
| PNS::MEANDER_PLACER::MEANDER_PLACER | ( | ROUTER * | aRouter | ) |
Definition at line 39 of file pns_meander_placer.cpp.
References m_currentNode, m_initialSegment, m_lastDelay, m_lastLength, m_lastStatus, m_netClass, m_padToDieDelay, m_padToDieLength, PNS::MEANDER_PLACER_BASE::MEANDER_PLACER_BASE(), and PNS::MEANDER_PLACER_BASE::TOO_SHORT.
Referenced by PNS::MEANDER_SKEW_PLACER::MEANDER_SKEW_PLACER().
|
virtual |
Definition at line 55 of file pns_meander_placer.cpp.
|
overridevirtual |
Reimplemented from PNS::PLACEMENT_ALGO.
Definition at line 379 of file pns_meander_placer.cpp.
References PNS::MEANDER_PLACER_BASE::m_world.
|
virtualinherited |
Increase/decreases the current meandering amplitude by one step.
| aSign | direction (negative = decrease, positive = increase). |
Definition at line 96 of file pns_meander_placer_base.cpp.
References m_settings.
|
protectedvirtual |
current routing start point (end of tail, beginning of head)
Reimplemented in PNS::MEANDER_SKEW_PLACER.
Definition at line 137 of file pns_meander_placer.cpp.
References std::abs(), PNS::MEANDER_SETTINGS::DELAY_UNCONSTRAINED, PNS::MEANDER_PLACER_BASE::m_currentWidth, m_netClass, PNS::ALGO_BASE::m_router, PNS::MEANDER_PLACER_BASE::m_settings, MINOPTMAX< T >::Max(), MINOPTMAX< T >::Min(), MINOPTMAX< T >::Opt(), origPathDelay(), and origPathLength().
|
protectedinherited |
Return the length offset to subtract when converting a user-facing total signal length target into a meander-only doMove target.
The offset combines the chain-extras aggregate (other nets in the same chain) with any unmeasured stub on the actively-tuned net that lives outside the PNS-measured baseline.
Single-ended and skew tuning both rely on this so the meander does not over-correct by the chain budget already absorbed by sibling nets. The tuning results as they were at Start(). The deltas measure change from these.
Definition at line 78 of file pns_meander_placer_base.cpp.
References PNS::PLACEMENT_ALGO::CurrentNets(), PNS::ROUTER::GetInterface(), PNS::ROUTER_IFACE::GetNetBoardLength(), m_chainExtrasLength, m_chainExtrasValid, m_startPathLength, and PNS::ALGO_BASE::Router().
Referenced by PNS::DP_MEANDER_PLACER::Move(), PNS::MEANDER_PLACER::Move(), and PNS::MEANDER_SKEW_PLACER::Move().
|
overridevirtual |
Checks if it's OK to place the shape aShape (i.e.
if it doesn't cause DRC violations or collide with other meanders).
| aShape | the shape to check. |
Reimplemented from PNS::MEANDER_PLACER_BASE.
Definition at line 402 of file pns_meander_placer.cpp.
References clearance, PNS::MEANDER_SHAPE::CLine(), m_currentNode, m_originLine, m_result, PNS::MEANDER_PLACER_BASE::m_settings, and PNS::MEANDER_SHAPE::Width().
|
virtualinherited |
Return the clearance of the track(s) being length tuned.
Definition at line 114 of file pns_meander_placer_base.cpp.
References PNS::ITEM_SET::CItems(), PNS::CT_CLEARANCE, PNS::PLACEMENT_ALGO::CurrentLayer(), PNS::ROUTER::GetRuleResolver(), MINOPTMAX< T >::HasMin(), m_currentWidth, PNS::CONSTRAINT::m_Value, MINOPTMAX< T >::Min(), PNS::RULE_RESOLVER::QueryConstraint(), PNS::ALGO_BASE::Router(), and PNS::PLACEMENT_ALGO::Traces().
Referenced by SpacingStep().
|
overridevirtual |
Reimplemented from PNS::PLACEMENT_ALGO.
Definition at line 392 of file pns_meander_placer.cpp.
References PNS::ROUTER::CommitRouting(), m_currentNode, and PNS::ALGO_BASE::Router().
Referenced by FixRoute().
|
overridevirtual |
Function CurrentEnd()
Returns the current end of the line(s) being placed/tuned. It may not be equal to the cursor position due to collisions.
Implements PNS::PLACEMENT_ALGO.
Definition at line 432 of file pns_meander_placer.cpp.
References PNS::MEANDER_PLACER_BASE::m_currentEnd.
|
overridevirtual |
Function CurrentLayer()
Returns the layer of currently routed track.
Implements PNS::PLACEMENT_ALGO.
Definition at line 437 of file pns_meander_placer.cpp.
References m_initialSegment.
|
inlineoverridevirtual |
Function CurrentNets()
Returns the net(s) of currently routed track(s).
Implements PNS::PLACEMENT_ALGO.
Reimplemented in PNS::MEANDER_SKEW_PLACER.
Definition at line 86 of file pns_meander_placer.h.
References m_originLine.
|
overridevirtual |
Function CurrentNode()
Returns the most recent board state.
Implements PNS::PLACEMENT_ALGO.
Definition at line 60 of file pns_meander_placer.cpp.
References m_currentNode, and PNS::MEANDER_PLACER_BASE::m_world.
|
overridevirtual |
Function CurrentStart()
Returns the current start of the line(s) being placed/tuned.
Implements PNS::PLACEMENT_ALGO.
Definition at line 427 of file pns_meander_placer.cpp.
References m_currentStart.
|
inlineinherited |
Definition at line 78 of file pns_algo_base.h.
References m_debugDecorator.
Referenced by PNS::SHOVE::AddLockedSpringbackNode(), PNS::DIFF_PAIR_PLACER::attemptWalk(), PNS::DRAGGER::bestAnchorForPoint(), PNS::LINE_PLACER::buildInitialLine(), PNS::SHOVE::checkShoveDirection(), PNS::LINE_PLACER::clipAndCheckCollisions(), PNS::MEANDER_PLACER::doMove(), PNS::COMPONENT_DRAGGER::Drag(), PNS::MULTI_DRAGGER::Drag(), PNS::DRAGGER::dragShove(), PNS::DRAGGER::dragWalkaround(), PNS::DIFF_PAIR_PLACER::FindDpPrimitivePair(), PNS::MULTI_DRAGGER::findNewLeaderSegment(), PNS::DIFF_PAIR_PLACER::FixRoute(), PNS::SHOVE::fixupViaCollisions(), PNS::LINE_PLACER::handlePullback(), PNS::DIFF_PAIR_PLACER::initPlacement(), PNS::LINE_PLACER::mergeHead(), PNS::DIFF_PAIR_PLACER::Move(), PNS::DP_MEANDER_PLACER::Move(), PNS::MEANDER_SKEW_PLACER::Move(), PNS::MULTI_DRAGGER::multidragShove(), PNS::MULTI_DRAGGER::multidragWalkaround(), PNS::SHOVE::onCollidingArc(), PNS::SHOVE::onCollidingLine(), PNS::SHOVE::onCollidingSegment(), PNS::SHOVE::onCollidingSolid(), PNS::SHOVE::onCollidingVia(), PNS::SHOVE::onReverseCollidingVia(), PNS::DRAGGER::optimizeAndUpdateDraggedLine(), PNS::LINE_PLACER::optimizeTailHeadTransition(), PNS::SHOVE::preShoveCleanup(), PNS::SHOVE::pruneLineFromOptimizerQueue(), PNS::SHOVE::pruneRootLines(), PNS::SHOVE::pushLineStack(), PNS::SHOVE::pushOrShoveVia(), PNS::SHOVE::pushSpringback(), PNS::SHOVE::reconstructHeads(), PNS::SHOVE::reduceSpringback(), PNS::LINE_PLACER::reduceTail(), PNS::PLACEMENT_ALGO::removeLoops(), PNS::SHOVE::replaceItems(), PNS::SHOVE::replaceLine(), PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkBase(), PNS::LINE_PLACER::rhWalkOnly(), PNS::WALKAROUND::Route(), PNS::DIFF_PAIR_PLACER::routeHead(), PNS::LINE_PLACER::routeStep(), PNS::SHOVE::Run(), PNS::SHOVE::runOptimizer(), PNS::SHOVE::shoveIteration(), PNS::SHOVE::shoveLineToHullSet(), PNS::SHOVE::shoveMainLoop(), PNS::SHOVE::ShoveObstacleLine(), PNS::PLACEMENT_ALGO::simplifyNewLine(), PNS::WALKAROUND::singleStep(), PNS::LINE_PLACER::splitHeadTail(), PNS::DRAGGER::Start(), PNS::LINE_PLACER::Start(), PNS::MULTI_DRAGGER::Start(), PNS::SHOVE::touchRootLine(), PNS::SHOVE::touchRootLine(), PNS::LINE_PLACER::Trace(), PNS::DRAGGER::tryWalkaround(), and PNS::MULTI_DRAGGER::tryWalkaround().
|
protected |
Definition at line 230 of file pns_meander_placer.cpp.
References SEG::A, SHAPE_LINE_CHAIN::Append(), SHAPE_LINE_CHAIN::Arc(), SHAPE_LINE_CHAIN::ArcIndex(), SEG::B, BLUE, SHAPE_LINE_CHAIN::Clear(), SHAPE_LINE_CHAIN::CSegment(), PNS::ALGO_BASE::Dbg(), dyn_cast(), SHAPE_LINE_CHAIN::IsArcSegment(), SHAPE_LINE_CHAIN::Length(), PNS::MEANDER_PLACER_BASE::lineDelay(), m_currentNode, m_currentStart, PNS::MEANDER_PLACER_BASE::m_currentWidth, m_finalShape, m_lastDelay, m_lastLength, m_lastStatus, m_netClass, m_originLine, m_result, PNS::ALGO_BASE::m_router, PNS::MEANDER_PLACER_BASE::m_settings, m_tunedPath, PNS::MEANDER_PLACER_BASE::m_world, PNS::MT_EMPTY, SHAPE_LINE_CHAIN::NextShape(), origPathDelay(), origPathLength(), PNS_DBG, SHAPE_LINE_CHAIN::SegmentCount(), SEG::Side(), SHAPE_LINE_CHAIN::Simplify(), PNS::MEANDER_PLACER_BASE::TOO_LONG, PNS::MEANDER_PLACER_BASE::TOO_SHORT, PNS::MEANDER_PLACER_BASE::TUNED, and PNS::MEANDER_PLACER_BASE::tuneLineLength().
Referenced by Move(), and PNS::MEANDER_SKEW_PLACER::Move().
|
overridevirtual |
Function FixRoute()
Commits the currently routed items to the parent node, taking aP as the final end point and aEndItem as the final anchor (if provided).
Implements PNS::PLACEMENT_ALGO.
Definition at line 366 of file pns_meander_placer.cpp.
References CommitPlacement(), LINE, m_currentNode, m_currentTrace, m_finalShape, and m_originLine.
|
inlinevirtualinherited |
Function FlipPosture()
Toggles the current posture (straight/diagonal) of the trace head.
Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.
Definition at line 167 of file pns_placement_algo.h.
|
inlinevirtualinherited |
Function GetModifiedNets.
Returns the nets of all currently routed trace(s)
Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.
Definition at line 198 of file pns_placement_algo.h.
|
inlineinherited |
Definition at line 68 of file pns_meander_placer_base.h.
References m_hasBaseline.
Referenced by BOOST_AUTO_TEST_CASE(), and BOOST_AUTO_TEST_CASE().
|
overridevirtual |
Reimplemented from PNS::PLACEMENT_ALGO.
Definition at line 386 of file pns_meander_placer.cpp.
References m_currentTrace.
|
protectedinherited |
Cache the per-session chain-extras length/delay (other nets in the same chain) so per-Move use does not re-walk the live BOARD.
Called from Start() of each derived placer.
Definition at line 51 of file pns_meander_placer_base.cpp.
References PNS::PLACEMENT_ALGO::CurrentNets(), m_chainExtrasDelay, m_chainExtrasLength, m_chainExtrasValid, and PNS::ALGO_BASE::Router().
Referenced by PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
inlinevirtualinherited |
Function IsPlacingVia()
Returns true if the placer is placing a via (or more vias).
Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.
Definition at line 104 of file pns_placement_algo.h.
|
protectedinherited |
Calculate the total delay of the line represented by an item set (tracks and vias)
| aLine |
Definition at line 317 of file pns_meander_placer_base.cpp.
References PNS::ROUTER_IFACE::CalculateRoutedPathDelay(), PNS::ITEM_SET::Empty(), PNS::ROUTER::GetInterface(), m_settings, and PNS::ALGO_BASE::Router().
Referenced by PNS::MEANDER_PLACER::doMove(), PNS::DP_MEANDER_PLACER::origPathDelay(), PNS::MEANDER_PLACER::origPathDelay(), PNS::MEANDER_SKEW_PLACER::origPathDelay(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protectedinherited |
Calculate the total length of the line represented by an item set (tracks and vias)
| aLine |
Definition at line 307 of file pns_meander_placer_base.cpp.
References PNS::ROUTER_IFACE::CalculateRoutedPathLength(), PNS::ITEM_SET::Empty(), PNS::ROUTER::GetInterface(), m_settings, and PNS::ALGO_BASE::Router().
Referenced by PNS::DP_MEANDER_PLACER::origPathLength(), PNS::MEANDER_PLACER::origPathLength(), PNS::MEANDER_SKEW_PLACER::origPathLength(), and PNS::MEANDER_SKEW_PLACER::Start().
|
virtualinherited |
Definition at line 34 of file pns_algo_base.cpp.
References m_logger.
Referenced by PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkBase(), PNS::DRAGGER::Start(), PNS::MULTI_DRAGGER::Start(), PNS::DRAGGER::tryWalkaround(), and PNS::MULTI_DRAGGER::tryWalkaround().
|
virtualinherited |
Return the current meandering configuration.
Definition at line 301 of file pns_meander_placer_base.cpp.
References m_settings.
Referenced by PCB_TUNING_PATTERN::Update().
Function Move()
Moves the end of the currently routed primtive(s) to the point aP, taking aEndItem as the anchor (if not NULL). (unless NULL).
Implements PNS::PLACEMENT_ALGO.
Reimplemented in PNS::MEANDER_SKEW_PLACER.
Definition at line 190 of file pns_meander_placer.cpp.
References calculateTimeDomainTargets(), PNS::MEANDER_PLACER_BASE::chainNarrowingOffset(), doMove(), PNS::MEANDER_SETTINGS::LENGTH_UNCONSTRAINED, PNS::MEANDER_PLACER_BASE::m_chainExtrasDelay, PNS::MEANDER_PLACER_BASE::m_chainExtrasValid, and PNS::MEANDER_PLACER_BASE::m_settings.
|
protectedvirtual |
Reimplemented in PNS::MEANDER_SKEW_PLACER.
Definition at line 130 of file pns_meander_placer.cpp.
References PNS::MEANDER_PLACER_BASE::lineDelay(), PNS::MEANDER_PLACER_BASE::m_endPad_n, m_padToDieDelay, PNS::MEANDER_PLACER_BASE::m_settings, PNS::MEANDER_PLACER_BASE::m_startPad_n, and m_tunedPath.
Referenced by calculateTimeDomainTargets(), doMove(), Start(), and TuningDelayResult().
|
protectedvirtual |
Reimplemented in PNS::MEANDER_SKEW_PLACER.
Definition at line 123 of file pns_meander_placer.cpp.
References PNS::MEANDER_PLACER_BASE::lineLength(), PNS::MEANDER_PLACER_BASE::m_endPad_n, m_padToDieLength, PNS::MEANDER_PLACER_BASE::m_settings, PNS::MEANDER_PLACER_BASE::m_startPad_n, and m_tunedPath.
Referenced by calculateTimeDomainTargets(), doMove(), Start(), and TuningLengthResult().
Definition at line 2096 of file pns_line_placer.cpp.
References PNS::NODE::Add(), PNS::NODE::AssembleLine(), SHAPE_LINE_CHAIN::CLastPoint(), PNS::LINK_HOLDER::ClearLinks(), PNS::LINE::CLine(), SHAPE_LINE_CHAIN::CPoint(), PNS::ALGO_BASE::Dbg(), PNS::NODE::FindLineEnds(), PNS::NODE::FindLinesBetweenJoints(), PNS::LINK_HOLDER::GetLink(), PNS::LINK_HOLDER::LinkCount(), PNS_DBG, PNS::NODE::Remove(), and PNS::LINE::SegmentCount().
Referenced by PNS::DIFF_PAIR_PLACER::Move(), and PNS::LINE_PLACER::Move().
|
inlineinherited |
Return current router settings.
Definition at line 54 of file pns_algo_base.h.
References m_router.
Referenced by PNS::DIFF_PAIR_PLACER::attemptWalk(), PNS::MEANDER_PLACER_BASE::chainNarrowingOffset(), PNS::MEANDER_PLACER_BASE::Clearance(), PNS::DIFF_PAIR_PLACER::CommitPlacement(), PNS::DP_MEANDER_PLACER::CommitPlacement(), PNS::LINE_PLACER::CommitPlacement(), PNS::MEANDER_PLACER::CommitPlacement(), PNS::COMPONENT_DRAGGER::FixRoute(), PNS::DIFF_PAIR_PLACER::FixRoute(), PNS::DRAGGER::FixRoute(), PNS::MULTI_DRAGGER::FixRoute(), PNS::MEANDER_PLACER_BASE::initChainExtras(), PNS::DIFF_PAIR_PLACER::initPlacement(), PNS::LINE_PLACER::initPlacement(), PNS::MEANDER_PLACER_BASE::lineDelay(), PNS::MEANDER_PLACER_BASE::lineLength(), PNS::DIFF_PAIR_PLACER::makeVia(), PNS::LINE_PLACER::makeVia(), PNS::MULTI_DRAGGER::multidragShove(), PNS::SHOVE::onCollidingSolid(), PNS::SHOVE::reconstructHeads(), PNS::LINE_PLACER::rhWalkBase(), PNS::DIFF_PAIR_PLACER::routeHead(), PNS::SHOVE::Run(), PNS::SHOVE::shoveIteration(), PNS::DIFF_PAIR_PLACER::Start(), PNS::DP_MEANDER_PLACER::Start(), PNS::DRAGGER::Start(), PNS::LINE_PLACER::Start(), PNS::MEANDER_PLACER::Start(), PNS::MEANDER_SKEW_PLACER::Start(), PNS::MULTI_DRAGGER::Start(), PNS::DRAGGER::startDragArc(), PNS::DRAGGER::tryWalkaround(), and PNS::MULTI_DRAGGER::tryWalkaround().
|
inlineinherited |
Assign a debug decorator allowing this algo to draw extra graphics for visual debugging.
Definition at line 73 of file pns_algo_base.h.
References m_debugDecorator.
Referenced by PNS::DIFF_PAIR_PLACER::attemptWalk(), PNS::SHOVE::onCollidingSolid(), PNS::LINE_PLACER::rhWalkBase(), PNS::SHOVE::SHOVE(), PNS::DRAGGER::tryWalkaround(), and PNS::MULTI_DRAGGER::tryWalkaround().
|
inlinevirtualinherited |
Function SetLayer()
Sets the current routing layer.
Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.
Definition at line 114 of file pns_placement_algo.h.
|
inlineinherited |
Definition at line 65 of file pns_algo_base.h.
References m_logger.
Referenced by PNS::LINE_PLACER::rhWalkBase(), PNS::DRAGGER::tryWalkaround(), and PNS::MULTI_DRAGGER::tryWalkaround().
|
inlinevirtualinherited |
Function SetOrthoMode()
Forces the router to place a straight 90/45 degree trace (with the end as near to the cursor as possible) instead of a standard 135 degree two-segment bend.
Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.
Definition at line 189 of file pns_placement_algo.h.
|
inherited |
Return the logger object, allowing to dump geometry to a file.
Definition at line 28 of file pns_algo_base.cpp.
References m_router.
Referenced by PNS::DIFF_PAIR_PLACER::attemptWalk(), PNS::LINE_PLACER::buildInitialLine(), PNS::LINE_PLACER::CommitPlacement(), PNS::MULTI_DRAGGER::Drag(), PNS::DRAGGER::dragMarkObstacles(), PNS::DRAGGER::dragShove(), PNS::DRAGGER::dragWalkaround(), PNS::COMPONENT_DRAGGER::FixRoute(), PNS::DIFF_PAIR_PLACER::FixRoute(), PNS::LINE_PLACER::FixRoute(), PNS::MULTI_DRAGGER::FixRoute(), PNS::DIFF_PAIR_PLACER::Move(), PNS::LINE_PLACER::Move(), PNS::SHOVE::onCollidingSolid(), PNS::DRAGGER::optimizeAndUpdateDraggedLine(), PNS::DIFF_PAIR_PLACER::propagateDpHeadForces(), PNS::DRAGGER::propagateViaForces(), PNS::SHOVE::pushOrShoveVia(), PNS::LINE_PLACER::rhMarkObstacles(), PNS::LINE_PLACER::rhShoveOnly(), PNS::LINE_PLACER::rhWalkBase(), PNS::LINE_PLACER::rhWalkOnly(), PNS::DIFF_PAIR_PLACER::route(), PNS::LINE_PLACER::routeHead(), PNS::LINE_PLACER::routeStep(), PNS::SHOVE::runOptimizer(), PNS::SHOVE::shoveMainLoop(), PNS::WALKAROUND::singleStep(), PNS::DRAGGER::Start(), PNS::LINE_PLACER::Start(), PNS::MULTI_DRAGGER::Start(), PNS::DRAGGER::tryWalkaround(), PNS::MULTI_DRAGGER::tryWalkaround(), PNS::LINE_PLACER::UnfixRoute(), and PNS::WALKAROUND::WALKAROUND().
|
protectedvirtualinherited |
Assemble a line starting from segment or arc aLatest, removes collinear segments and redundant vertices.
If a simplification has been found, replaces the old line with the simplified one in aNode.
Definition at line 1773 of file pns_line_placer.cpp.
References PNS::NODE::Add(), PNS::ITEM::ARC_T, PNS::NODE::AssembleLine(), PNS::ITEM_SET::CItems(), PNS::LINE::CLine(), PNS::JOINT::CLinks(), SEG::Contains(), PNS::ALGO_BASE::Dbg(), PNS::NODE::FindJoint(), PNS::NODE::GetUpdatedItems(), PNS::JOINT::IsLineCorner(), PNS::JOINT::LinkCount(), PNS::OPTIMIZER::MERGE_COLINEAR, PNS::ITEM::OfKind(), PNS::OPTIMIZER::Optimize(), PNS_DBG, PNS::LINE::PointCount(), SHAPE_LINE_CHAIN::PointCount(), RED, PNS::NODE::Remove(), PNS::ITEM::SEGMENT_T, PNS::LINE::SetShape(), and SHAPE_LINE_CHAIN::Simplify().
Referenced by PNS::LINE_PLACER::FixRoute().
|
virtualinherited |
Increase/decrease the current meandering spacing by one step.
| aSign | direction (negative = decrease, positive = increase). |
Definition at line 105 of file pns_meander_placer_base.cpp.
References Clearance(), m_currentWidth, and m_settings.
Function Start()
Starts placement/drag operation at point aP, taking item aStartItem as anchor (unless NULL).
Implements PNS::PLACEMENT_ALGO.
Reimplemented in PNS::MEANDER_SKEW_PLACER.
Definition at line 69 of file pns_meander_placer.cpp.
References _, PNS::ITEM::ARC_T, PNS::TOPOLOGY::AssembleTuningPath(), PNS::NODE::Branch(), calculateTimeDomainTargets(), BOARD_CONNECTED_ITEM::GetEffectiveNetClass(), PNS::HELPERS::GetSnappedStartPoint(), PNS::ITEM::GetSourceItem(), PNS::ROUTER::GetWorld(), PNS::MEANDER_PLACER_BASE::initChainExtras(), PNS::MEANDER_PLACER_BASE::m_baselineDelay, PNS::MEANDER_PLACER_BASE::m_baselineLength, PNS::MEANDER_PLACER_BASE::m_currentEnd, m_currentNode, m_currentStart, PNS::MEANDER_PLACER_BASE::m_currentWidth, PNS::MEANDER_PLACER_BASE::m_endPad_n, PNS::MEANDER_PLACER_BASE::m_hasBaseline, m_initialSegment, m_netClass, m_originLine, m_padToDieDelay, m_padToDieLength, PNS::MEANDER_PLACER_BASE::m_settings, PNS::MEANDER_PLACER_BASE::m_startPad_n, PNS::MEANDER_PLACER_BASE::m_startPathLength, m_tunedPath, PNS::MEANDER_PLACER_BASE::m_world, PNS::ITEM::OfKind(), origPathDelay(), origPathLength(), PNS::ALGO_BASE::Router(), PNS::ITEM::SEGMENT_T, and PNS::ROUTER::SetFailureReason().
|
inlinevirtualinherited |
Function ToggleVia()
Enables/disables a via at the end of currently routed trace.
Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.
Definition at line 94 of file pns_placement_algo.h.
|
overridevirtual |
Function Traces()
Returns all routed/tuned traces.
Implements PNS::PLACEMENT_ALGO.
Definition at line 416 of file pns_meander_placer.cpp.
References LINE, m_currentTrace, m_finalShape, and m_originLine.
|
overridevirtual |
Implements PNS::MEANDER_PLACER_BASE.
Definition at line 422 of file pns_meander_placer.cpp.
References m_tunedPath.
|
protectedinherited |
Take a set of meanders in aTuned and tunes their length to extend the original line length by aElongation.
Definition at line 203 of file pns_meander_placer_base.cpp.
References end, PNS::findAmplitudeForLength(), PNS::MEANDERED_LINE::Meanders(), PNS::MT_ARC, PNS::MT_CORNER, PNS::MT_EMPTY, PNS::MT_FINISH, PNS::MT_SINGLE, and PNS::MT_START.
Referenced by PNS::MEANDER_PLACER::doMove(), and PNS::DP_MEANDER_PLACER::Move().
|
inlineinherited |
Definition at line 71 of file pns_meander_placer_base.h.
References m_baselineDelay, and TuningDelayResult().
|
overridevirtual |
Return the resultant delay or skew of the tuned traces.
Reimplemented from PNS::MEANDER_PLACER_BASE.
Reimplemented in PNS::MEANDER_SKEW_PLACER.
Definition at line 452 of file pns_meander_placer.cpp.
References m_lastDelay, and origPathDelay().
|
inlineinherited |
Definition at line 70 of file pns_meander_placer_base.h.
References m_baselineLength, and TuningLengthResult().
Referenced by BOOST_AUTO_TEST_CASE(), and BOOST_AUTO_TEST_CASE().
|
overridevirtual |
Return the resultant length or skew of the tuned traces.
Implements PNS::MEANDER_PLACER_BASE.
Reimplemented in PNS::MEANDER_SKEW_PLACER.
Definition at line 443 of file pns_meander_placer.cpp.
References m_lastLength, and origPathLength().
|
overridevirtual |
Return the tuning status (too short, too long, etc.) of the trace(s) being tuned.
Implements PNS::MEANDER_PLACER_BASE.
Definition at line 461 of file pns_meander_placer.cpp.
References m_lastStatus.
|
inlinevirtualinherited |
Reimplemented in PNS::LINE_PLACER.
Definition at line 81 of file pns_placement_algo.h.
|
virtualinherited |
Definition at line 131 of file pns_meander_placer_base.cpp.
References m_settings.
Referenced by PCB_TUNING_PATTERN::Update().
|
inlinevirtualinherited |
Function UpdateSizes()
Performs on-the-fly update of the width, via diameter & drill size from a settings class. Used to dynamically change these parameters as the track is routed.
Reimplemented in PNS::DIFF_PAIR_PLACER, and PNS::LINE_PLACER.
Definition at line 178 of file pns_placement_algo.h.
|
inherited |
Definition at line 40 of file pns_algo_base.cpp.
References m_router.
Referenced by PNS::SHOVE::runOptimizer().
|
protectedinherited |
Definition at line 167 of file pns_meander_placer_base.h.
Referenced by PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), PNS::MEANDER_SKEW_PLACER::Start(), and TuningDelayDelta().
|
protectedinherited |
Definition at line 166 of file pns_meander_placer_base.h.
Referenced by PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), PNS::MEANDER_SKEW_PLACER::Start(), and TuningLengthDelta().
|
protectedinherited |
Definition at line 177 of file pns_meander_placer_base.h.
Referenced by initChainExtras(), PNS::DP_MEANDER_PLACER::Move(), and PNS::MEANDER_PLACER::Move().
|
protectedinherited |
Definition at line 176 of file pns_meander_placer_base.h.
Referenced by chainNarrowingOffset(), and initChainExtras().
|
protectedinherited |
Pointer to world to search colliding items.
Definition at line 178 of file pns_meander_placer_base.h.
Referenced by chainNarrowingOffset(), initChainExtras(), PNS::DP_MEANDER_PLACER::Move(), and PNS::MEANDER_PLACER::Move().
|
protectedinherited |
Definition at line 190 of file pns_meander_placer_base.h.
Referenced by PNS::DP_MEANDER_PLACER::CurrentEnd(), PNS::MEANDER_PLACER::CurrentEnd(), PNS::MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protected |
Definition at line 120 of file pns_meander_placer.h.
Referenced by CheckFit(), CommitPlacement(), CurrentNode(), doMove(), FixRoute(), MEANDER_PLACER(), Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protected |
Current world state.
Definition at line 117 of file pns_meander_placer.h.
Referenced by CurrentStart(), doMove(), Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protected |
Definition at line 123 of file pns_meander_placer.h.
Referenced by FixRoute(), HasPlacedAnything(), and Traces().
|
protectedinherited |
Meander settings.
Definition at line 184 of file pns_meander_placer_base.h.
Referenced by PNS::MEANDER_PLACER::calculateTimeDomainTargets(), Clearance(), PNS::MEANDER_PLACER::doMove(), MEANDER_PLACER_BASE(), SpacingStep(), PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protectedinherited |
Definition at line 86 of file pns_algo_base.h.
Referenced by ALGO_BASE(), Dbg(), and SetDebugDecorator().
|
protectedinherited |
Definition at line 195 of file pns_meander_placer_base.h.
Referenced by MEANDER_PLACER_BASE(), PNS::DP_MEANDER_PLACER::origPathDelay(), PNS::MEANDER_PLACER::origPathDelay(), PNS::MEANDER_SKEW_PLACER::origPathDelay(), PNS::DP_MEANDER_PLACER::origPathLength(), PNS::MEANDER_PLACER::origPathLength(), PNS::MEANDER_SKEW_PLACER::origPathLength(), PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protectedinherited |
Definition at line 193 of file pns_meander_placer_base.h.
Referenced by MEANDER_PLACER_BASE(), PNS::DP_MEANDER_PLACER::origPathDelay(), PNS::MEANDER_SKEW_PLACER::origPathDelay(), PNS::DP_MEANDER_PLACER::origPathLength(), PNS::MEANDER_SKEW_PLACER::origPathLength(), PNS::DP_MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protected |
Definition at line 126 of file pns_meander_placer.h.
Referenced by doMove(), FixRoute(), and Traces().
|
protectedinherited |
Active path length at Start().
Definition at line 168 of file pns_meander_placer_base.h.
Referenced by HasBaseline(), PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protected |
Total length added by pad to die size.
Definition at line 128 of file pns_meander_placer.h.
Referenced by CurrentLayer(), MEANDER_PLACER(), Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protected |
Definition at line 140 of file pns_meander_placer.h.
Referenced by PNS::MEANDER_SKEW_PLACER::calculateTimeDomainTargets(), doMove(), MEANDER_PLACER(), PNS::MEANDER_SKEW_PLACER::Start(), TuningDelayResult(), and PNS::MEANDER_SKEW_PLACER::TuningDelayResult().
|
protected |
Definition at line 139 of file pns_meander_placer.h.
Referenced by PNS::MEANDER_SKEW_PLACER::CurrentSkew(), doMove(), MEANDER_PLACER(), PNS::MEANDER_SKEW_PLACER::Start(), TuningLengthResult(), and PNS::MEANDER_SKEW_PLACER::TuningLengthResult().
|
protected |
Definition at line 141 of file pns_meander_placer.h.
Referenced by doMove(), MEANDER_PLACER(), and TuningStatus().
|
protectedinherited |
Definition at line 88 of file pns_algo_base.h.
Referenced by ALGO_BASE(), Logger(), and SetLogger().
|
protected |
Definition at line 137 of file pns_meander_placer.h.
Referenced by calculateTimeDomainTargets(), PNS::MEANDER_SKEW_PLACER::calculateTimeDomainTargets(), doMove(), MEANDER_PLACER(), Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protected |
Definition at line 122 of file pns_meander_placer.h.
Referenced by CheckFit(), CurrentNets(), PNS::MEANDER_SKEW_PLACER::CurrentNets(), doMove(), FixRoute(), PNS::MEANDER_SKEW_PLACER::Move(), PNS::MEANDER_SKEW_PLACER::origPathDelay(), PNS::MEANDER_SKEW_PLACER::origPathLength(), Start(), PNS::MEANDER_SKEW_PLACER::Start(), and Traces().
|
protected |
The netclass for the placed segments.
Definition at line 134 of file pns_meander_placer.h.
Referenced by MEANDER_PLACER(), origPathDelay(), and Start().
|
protected |
Total length added by pad to die size.
Definition at line 131 of file pns_meander_placer.h.
Referenced by MEANDER_PLACER(), origPathLength(), and Start().
|
protected |
Definition at line 127 of file pns_meander_placer.h.
Referenced by CheckFit(), and doMove().
|
protectedinherited |
Definition at line 87 of file pns_algo_base.h.
Referenced by ALGO_BASE(), PNS::DP_MEANDER_PLACER::calculateTimeDomainTargets(), PNS::MEANDER_PLACER::calculateTimeDomainTargets(), PNS::MEANDER_SKEW_PLACER::calculateTimeDomainTargets(), PNS::MEANDER_PLACER::doMove(), PNS::LINE_PLACER::FixRoute(), PNS::DP_MEANDER_PLACER::Move(), PNS::MEANDER_SKEW_PLACER::Move(), Router(), Settings(), PNS::DIFF_PAIR_PLACER::updateLeadingRatLine(), PNS::LINE_PLACER::updateLeadingRatLine(), and VisibleViewArea().
|
protectedinherited |
The current end point.
Definition at line 187 of file pns_meander_placer_base.h.
Referenced by AmplitudeStep(), PNS::DP_MEANDER_PLACER::calculateTimeDomainTargets(), PNS::MEANDER_PLACER::calculateTimeDomainTargets(), PNS::MEANDER_SKEW_PLACER::calculateTimeDomainTargets(), PNS::MEANDER_PLACER::CheckFit(), PNS::MEANDER_PLACER::doMove(), lineDelay(), lineLength(), MeanderSettings(), PNS::DP_MEANDER_PLACER::Move(), PNS::MEANDER_PLACER::Move(), PNS::MEANDER_SKEW_PLACER::Move(), PNS::MEANDER_PLACER::origPathDelay(), PNS::MEANDER_PLACER::origPathLength(), SpacingStep(), PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), PNS::MEANDER_SKEW_PLACER::Start(), and UpdateSettings().
|
protectedinherited |
Definition at line 194 of file pns_meander_placer_base.h.
Referenced by MEANDER_PLACER_BASE(), PNS::DP_MEANDER_PLACER::origPathDelay(), PNS::MEANDER_PLACER::origPathDelay(), PNS::MEANDER_SKEW_PLACER::origPathDelay(), PNS::DP_MEANDER_PLACER::origPathLength(), PNS::MEANDER_PLACER::origPathLength(), PNS::MEANDER_SKEW_PLACER::origPathLength(), PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protectedinherited |
Definition at line 192 of file pns_meander_placer_base.h.
Referenced by MEANDER_PLACER_BASE(), PNS::DP_MEANDER_PLACER::origPathDelay(), PNS::MEANDER_SKEW_PLACER::origPathDelay(), PNS::DP_MEANDER_PLACER::origPathLength(), PNS::MEANDER_SKEW_PLACER::origPathLength(), PNS::DP_MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protectedinherited |
Aggregate length/delay of other nets in the same chain, cached at Start().
The non-edited members of a chain don't change during a tuning session, so we avoid walking the live BOARD on every Move event.
Definition at line 171 of file pns_meander_placer_base.h.
Referenced by chainNarrowingOffset(), PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().
|
protected |
Definition at line 124 of file pns_meander_placer.h.
Referenced by doMove(), origPathDelay(), PNS::MEANDER_SKEW_PLACER::origPathDelay(), origPathLength(), PNS::MEANDER_SKEW_PLACER::origPathLength(), Start(), PNS::MEANDER_SKEW_PLACER::Start(), and TunedPath().
|
protectedinherited |
Width of the meandered trace(s).
Definition at line 181 of file pns_meander_placer_base.h.
Referenced by PNS::DP_MEANDER_PLACER::AbortPlacement(), PNS::MEANDER_PLACER::AbortPlacement(), PNS::DP_MEANDER_PLACER::CurrentNode(), PNS::MEANDER_PLACER::CurrentNode(), PNS::MEANDER_PLACER::doMove(), PNS::DP_MEANDER_PLACER::DP_MEANDER_PLACER(), MEANDER_PLACER_BASE(), PNS::DP_MEANDER_PLACER::Move(), PNS::DP_MEANDER_PLACER::Start(), PNS::MEANDER_PLACER::Start(), and PNS::MEANDER_SKEW_PLACER::Start().