Kite - Detailed Router


Public Member Functions | Static Public Member Functions | List of all members
TrackElement Class Referenceabstract

Abstract Class for all Elements inserted inside a Track. More...

Inheritance diagram for TrackElement:
Inheritance graph
[legend]

Public Member Functions

virtual bool isFixed () const
 
virtual bool isHorizontal () const =0
 
virtual bool isVertical () const =0
 
virtual bool isLocal () const
 
virtual bool isGlobal () const
 
virtual bool isBipoint () const
 
virtual bool isTerminal () const
 
virtual bool isStrap () const
 
virtual bool isSlackened () const
 
virtual bool isDogleg () const
 
bool isCreated () const
 
bool isInvalidated () const
 
bool isBlockage () const
 
bool isLocked () const
 
bool isRouted () const
 
bool hasSourceDogleg () const
 
bool hasTargetDogleg () const
 
bool canRipple () const
 
virtual bool canDogleg ()
 
virtual bool canDogleg (Interval)
 
virtual bool canDogleg (Katabatic::GCell *, unsigned int flags=0)
 
virtual unsigned long getId () const
 
virtual unsigned int getDirection () const =0
 
virtual NetgetNet () const =0
 
virtual const LayergetLayer () const =0
 
TrackgetTrack () const
 
size_t getIndex () const
 
virtual unsigned long getFreedomDegree () const
 
virtual float getMaxUnderDensity (unsigned int flags=0) const
 
Box getBoundingBox () const
 
virtual TrackElementgetNext () const
 
virtual TrackElementgetPrevious () const
 
virtual DbU::Unit getAxis () const =0
 
DbU::Unit getSourceU () const
 
DbU::Unit getTargetU () const
 
DbU::Unit getLength () const
 
Interval getCanonicalInterval () const
 
virtual Interval getFreeInterval () const
 
virtual Interval getSourceConstraints () const
 
virtual Interval getTargetConstraints () const
 
virtual DataNegociategetDataNegociate (unsigned int flags=KtDataSelf) const
 
virtual TrackElementgetCanonical (Interval &)
 
virtual size_t getGCells (Katabatic::GCellVector &) const
 
virtual TrackElementgetParent () const
 
virtual unsigned int getDoglegLevel () const
 
virtual TrackElementgetSourceDogleg ()
 
virtual TrackElementgetTargetDogleg ()
 
virtual TrackElements getPerpandiculars ()
 
void setFlags (unsigned int)
 
void unsetFlags (unsigned int)
 
virtual void setTrack (Track *)
 
void setIndex (size_t)
 
virtual void updateFreedomDegree ()
 
virtual void setDoglegLevel (unsigned int)
 
virtual void swapTrack (TrackElement *)
 
virtual void reschedule (unsigned int level)
 
virtual void detach ()
 
virtual void invalidate ()
 
virtual void revalidate ()
 
virtual void incOverlapCost (Net *, TrackCost &) const
 
virtual void setAxis (DbU::Unit, unsigned int flags=Katabatic::SegAxisSet)
 
virtual TrackElementmakeDogleg ()
 
bool makeDogleg (Katabatic::GCell *)
 
virtual TrackElementmakeDogleg (Interval, unsigned int &flags)
 
virtual bool _check () const
 

Static Public Member Functions

static SegmentOverlapCostCBsetOverlapCostCB (SegmentOverlapCostCB *)
 

Detailed Description

Abstract Class for all Elements inserted inside a Track.

TrackElement Abstract

The TrackElement class is abstract and is used as base class for any element that can be inserted in a Track. It represent the footprint of that element inside the Track (an interval). Additionnaly it keep a pointer to the Track and it's index inside it (Track is implemented with a vector<>).

To avoid some explicit dynamic cast later, it provides a default implementation for almost all the methods that will be present in all the derived classes. All default methods return false, NULL or 0 (zero) or whatever is appropriated to tell it is not meaningful.

Design Note

TrackElement has been designed to serve as a base class for TrackSegment and TrackMarker. But, in the end, those two classes have been put in separated vectors inside the Track, thus rendering this design choice less pertinent. We keep it for now because we may introduce other object than TrackSegment inside a Track. If the need do not arise, we may merge back TrackElement and TrackSegment.

Member Function Documentation

◆ setOverlapCostCB()

SegmentOverlapCostCB * setOverlapCostCB ( SegmentOverlapCostCB cb)
static
Parameters
cbthe new overlap cost callback.
Returns
the previous overlap cost callback.

sets the overlap callback.

Referenced by NegociateWindow::run().

◆ isFixed()

bool isFixed ( ) const
virtual

◆ isHorizontal()

bool isHorizontal ( ) const
pure virtual

◆ isVertical()

bool isVertical ( ) const
pure virtual

◆ isLocal()

bool isLocal ( ) const
virtual

◆ isGlobal()

bool isGlobal ( ) const
virtual

◆ isBipoint()

bool isBipoint ( ) const
virtual

See also:  Katabatic::AutoSegment::isBipoint().

Reimplemented in TrackSegment.

Referenced by SegmentFsm::desaturate().

◆ isTerminal()

bool isTerminal ( ) const
virtual

See also:  Katabatic::AutoSegment::isTerminal().

Reimplemented in TrackSegment.

Referenced by Manipulator::makeDogleg(), and Manipulator::relax().

◆ isStrap()

bool isStrap ( ) const
virtual

◆ isSlackened()

bool isSlackened ( ) const
virtual

See also:  Katabatic::AutoSegment::isSlackened().

Reimplemented in TrackSegment.

◆ isDogleg()

bool isDogleg ( ) const
virtual

See also:  Katabatic::isDogleg().

Reimplemented in TrackSegment.

◆ isCreated()

bool isCreated ( ) const
inline

◆ isInvalidated()

bool isInvalidated ( ) const
inline

Returns: true if the segment is invalidated (may be different from the supporting AutoSegment status).

Referenced by SegmentObserver::notify().

◆ isBlockage()

bool isBlockage ( ) const
inline

◆ isLocked()

bool isLocked ( ) const
inline

true if the element is part of a net, but must not be moved by the router, whatever the reason.

◆ isRouted()

bool isRouted ( ) const
inline

true if the router has placed it.

Referenced by TrackSegment::canDogleg().

◆ hasSourceDogleg()

bool hasSourceDogleg ( ) const
inline

This method purpose has not been reviewed yet.

Referenced by TrackSegment::canDogleg(), TrackSegment::getSourceDogleg(), and TrackSegment::getTargetDogleg().

◆ hasTargetDogleg()

bool hasTargetDogleg ( ) const
inline

This method purpose has not been reviewed yet.

Referenced by TrackSegment::canDogleg().

◆ canRipple()

bool canRipple ( ) const
inline

This method purpose has not been reviewed yet.

Referenced by Manipulator::ripple().

◆ canDogleg() [1/3]

bool canDogleg ( )
virtual

See also:  AutoSegment::canDogleg(). At Kite level, this variant of the method will apply only on local segments and the segment must not already have a source or target dogleg.

Reimplemented in TrackSegment.

Referenced by SegmentFsm::conflictSolveByHistory(), Manipulator::makeDogleg(), and Manipulator::relax().

◆ canDogleg() [2/3]

bool canDogleg ( Interval  )
virtual

See also:  AutoSegment::canDogleg(). At Kite level, this variant of the method will apply only on local segments and the segment must not already have a source or target dogleg.

Reimplemented in TrackSegment.

◆ canDogleg() [3/3]

bool canDogleg ( Katabatic::GCell doglegGCell,
unsigned int  flags = 0 
)
virtual

See also:  AutoSegment::canDogleg(). At kite level, this variant of the method is mainly targeted to global segment. For local segment it behave like TrackElement::canDogleg(Interval). For global segment, make the break in the requested GCell doglegGCell. If it's in the first or last GCell and there is already a dogleg, allow to reuse it if flags contains Kite::KtAllowDoglegReuse.

Reimplemented in TrackSegment.

◆ getId()

unsigned long getId ( ) const
virtual
Returns
The Id of the supporting AutoSegment, if there is any. Zero otherwise.

Reimplemented in TrackSegment, and TrackFixedSegment.

Referenced by RoutingEvent::process().

◆ getDirection()

unsigned int getDirection ( ) const
pure virtual
Returns
The direction of the supporting element (should match the preferred direction of the Track).

Implemented in TrackSegment, and TrackFixedSegment.

Referenced by TrackElement::getBoundingBox(), TrackSegment::getSourceDogleg(), TrackSegment::getTargetDogleg(), Manipulator::makeDogleg(), Manipulator::minimize(), Manipulator::relax(), and Manipulator::ripple().

◆ getNet()

Net * getNet ( ) const
pure virtual

◆ getLayer()

const Layer * getLayer ( ) const
pure virtual

◆ getTrack()

Track * getTrack ( ) const
inline

◆ getIndex()

size_t getIndex ( ) const
inline

Returns: The index of the element inside the Track's vector.

Remark: If the element is not inserted in a Track, it is set to
Track::npos, and obviously must not be used.

Referenced by TrackSegment::swapTrack().

◆ getFreedomDegree()

unsigned long getFreedomDegree ( ) const
virtual

Returns: The degree of freedom of the element. It is used as a priority value when sorting TrackElement (in RoutingEvent).

Returns: The degree of freedom of the element. It is used as a priority value when sorting TrackElement (in RoutingEvent).

Currently, it is the slack of the Katabatic::AutoSegment.

Reimplemented in TrackSegment.

Referenced by RoutingEvent::process().

◆ getMaxUnderDensity()

float getMaxUnderDensity ( unsigned int  flags = 0) const
virtual

Returns: The maximum density of all the GCells under this element.

Reimplemented in TrackSegment.

◆ getBoundingBox()

Box getBoundingBox ( ) const
inline

Returns: The box that this element uses in the Track.

◆ getNext()

TrackElement * getNext ( ) const
virtual

Returns: The next TrackElement, on the same track and of a different net. See also:  Track::getNext().

Reimplemented in TrackSegment, and TrackFixedSegment.

Referenced by Manipulator::isCaged().

◆ getPrevious()

TrackElement * getPrevious ( ) const
virtual

Returns: The previous TrackElement, on the same track and of a different net. See also:  Track::getPrevious().

Reimplemented in TrackSegment, and TrackFixedSegment.

Referenced by Manipulator::isCaged().

◆ getAxis()

DbU::Unit getAxis ( ) const
pure virtual

Returns: The axis position of the element (must be the same as the Track).

Implemented in TrackSegment, and TrackFixedSegment.

Referenced by SegmentFsm::conflictSolveByHistory(), TrackElement::getBoundingBox(), Manipulator::ripple(), and Manipulator::ripupPerpandiculars().

◆ getSourceU()

DbU::Unit getSourceU ( ) const
inline

◆ getTargetU()

DbU::Unit getTargetU ( ) const
inline

Returns: The maximum of the interval used by the element (cached in an attribute).

Referenced by TrackSegment::_check(), TrackElement::getBoundingBox(), TrackElement::getCanonicalInterval(), TrackElement::getLength(), Manipulator::insertInTrack(), and Manipulator::isCaged().

◆ getLength()

DbU::Unit getLength ( ) const
inline

Returns: The length of the interval used by the element.

Referenced by NegociateWindow::computeWirelength(), Manipulator::makeDogleg(), Manipulator::moveUp(), and RoutingEvent::revalidate().

◆ getCanonicalInterval()

Interval getCanonicalInterval ( ) const
inline

◆ getFreeInterval()

Interval getFreeInterval ( ) const
virtual

Returns: The greatest free interval enclosing this element.

Reimplemented in TrackSegment, and TrackFixedSegment.

◆ getSourceConstraints()

Interval getSourceConstraints ( ) const
virtual

◆ getTargetConstraints()

Interval getTargetConstraints ( ) const
virtual

◆ getDataNegociate()

DataNegociate * getDataNegociate ( unsigned int  flags = KtDataSelf) const
virtual

◆ getCanonical()

TrackElement * getCanonical ( Interval i)
virtual

Inner working still unclear to myself.

Reimplemented in TrackSegment.

Referenced by NegociateWindow::createTrackSegment(), and DataNegociate::update().

◆ getGCells()

size_t getGCells ( Katabatic::GCellVector &  gcells) const
virtual

Returns: The table of Katabatic::GCell underneath the element whole span.

Reimplemented in TrackSegment.

Referenced by Manipulator::makeDogleg(), and Manipulator::relax().

◆ getParent()

TrackElement * getParent ( ) const
virtual

Returns: The TrackElement from which the dogleg has been created, if any.

Reimplemented in TrackSegment.

Referenced by RoutingEvent::setAxisHintFromParent().

◆ getDoglegLevel()

unsigned int getDoglegLevel ( ) const
virtual

Returns: The deepness of the dogleg.

Reimplemented in TrackSegment.

◆ getSourceDogleg()

TrackElement * getSourceDogleg ( )
virtual

Returns: The source part of the segment from which the dogleg has been created.

Reimplemented in TrackSegment.

Referenced by Manipulator::relax().

◆ getTargetDogleg()

TrackElement * getTargetDogleg ( )
virtual

Returns: The target part of the segment from which the dogleg has been created.

Reimplemented in TrackSegment.

Referenced by Manipulator::relax().

◆ getPerpandiculars()

TrackElements getPerpandiculars ( )
virtual

Returns: The collection of all element perpandiculars to this one.

Reimplemented in TrackSegment.

Referenced by Manipulator::forceToTrack(), and Manipulator::insertInTrack().

◆ setFlags()

void setFlags ( unsigned int  flags)
inline

Set to true flags in the element state array.

Referenced by TrackSegment::detach(), TrackSegment::invalidate(), and Manipulator::relax().

◆ unsetFlags()

void unsetFlags ( unsigned int  flags)
inline

Reset to false flags in the element state array.

Referenced by TrackSegment::revalidate().

◆ setTrack()

void setTrack ( Track track)
virtual

Insert the element into track, also used as an insertion marker.

Reimplemented in TrackSegment.

Referenced by Track::insert(), and TrackSegment::setTrack().

◆ setIndex()

void setIndex ( size_t  index)
inline

Cache the element's index in the Track internal vector.

Referenced by TrackSegment::detach(), and TrackSegment::swapTrack().

◆ updateFreedomDegree()

void updateFreedomDegree ( )
virtual

Update, from the element characteristics, it's degree of freedom.

Reimplemented in TrackSegment.

◆ setDoglegLevel()

void setDoglegLevel ( unsigned int  level)
virtual

Sets the level of dogleg of the element.

Reimplemented in TrackSegment.

◆ swapTrack()

void swapTrack ( TrackElement other)
virtual

Swap the tracks of this and other.

Reimplemented in TrackSegment.

◆ reschedule()

void reschedule ( unsigned int  level)
virtual

If the TrackElement has already an event scheduled, change the level of this event, otherwise create a new event.

See also:  NegotiateWindow::rescheduleEvent().

Reimplemented in TrackSegment.

Referenced by TrackSegment::_postDoglegs().

◆ detach()

void detach ( )
virtual

Remove the link from the TrackElement to it's owning Track, marking it for removal. The removal from the Track's vector is managed by the Track itself during the Session revalidation stage.

Reimplemented in TrackSegment.

◆ invalidate()

void invalidate ( )
virtual

◆ revalidate()

void revalidate ( )
virtual

Actualize the TrackElement characteristics from the supporting elements (set of AutoSegment).

Must be completed with the event management

Reimplemented in TrackSegment.

◆ incOverlapCost()

void incOverlapCost ( Net net,
TrackCost &  cost 
) const
virtual

See also:  Compute the cost of overlap between this segment and the interval specified in cost. Mainly calls the relevant callback.

◆ setAxis()

void setAxis ( DbU::Unit  ,
unsigned int  flags = Katabatic::SegAxisSet 
)
virtual

◆ makeDogleg() [1/3]

TrackElement * makeDogleg ( )
virtual

Create a dogleg on the source end of the TrackSegment. Put the dogleg axis on the source To be further reviewed.

See also:  Dogleg management.

Post-processing done by TrackSegment::_postDoglegs().

Reimplemented in TrackSegment.

Referenced by SegmentFsm::conflictSolveByHistory(), Manipulator::makeDogleg(), TrackElement::makeDogleg(), and Manipulator::relax().

◆ makeDogleg() [2/3]

TrackElement * makeDogleg ( Katabatic::GCell gcell)
inline

◆ makeDogleg() [3/3]

TrackElement * makeDogleg ( Interval  interval,
unsigned int &  flags 
)
virtual

See also:  AutoSegment::makeDogleg(), Dogleg management, the return flags from this method are returned through the flags variable.

Post-processing done by TrackSegment::_postDoglegs().

Reimplemented in TrackSegment.

◆ _check()

bool _check ( ) const
virtual

Check the coherency of the element. For a TrackSegment:

  • The supporting AutoSegment the canonical one of the set.
  • The cached min & max values are identical to the computed ones.

Returns: true on success.

Reimplemented in TrackSegment.


The documentation for this class was generated from the following files:


Generated by doxygen 1.8.14 on Thu Nov 12 2020 Return to top of page
Kite - Detailed Router Copyright © 2008-2020 Sorbonne Universite. All rights reserved