# Kite - Detailed Router

Public Types | Public Member Functions | List of all members
SegmentAction Class Reference

Store request for an event to be generated on a TrackElement. More...

## Public Types
enum | Type { Self = (1<< 0), Other = (1<< 1), Perpandicular = (1<< 2), Insert = (1<< 3), Ripup = (1<< 4), RipedByLocal = (1<< 5), ResetRipup = (1<< 6), ToRipupLimit = (1<< 7) , AxisHint = (1<< 9), PackingMode = (1<<10), ToState = (1<<11), EventLevel1 = (1<<12), EventLevel2 = (1<<13), EventLevel3 = (1<<14), EventLevel4 = (1<<15), EventLevel5 = (1<<16), SelfInsert = Self |Insert, SelfRipup = Self |Ripup, SelfRipupPerpand = Self |Ripup|Perpandicular, SelfRipupPerpandWithAxisHint = Self |Ripup|Perpandicular|EventLevel4|AxisHint, OtherRipup = Other|Ripup, OtherRipupPerpandAndPushAside = Other|Ripup|Perpandicular|EventLevel3|AxisHint, OtherRipupPerpandAndPacking = Other|Ripup|Perpandicular|EventLevel4|PackingMode }

## Public Member Functions
| SegmentAction (TrackElement *, unsigned int type, DbU::Unit axisHint=0, unsigned int toState=0)
TrackElement * | getSegment () const
unsigned int | getType () const
void | setAxisHint (DbU::Unit)
unsigned int | setFlag (unsigned int)
bool | doAction (RoutingEventQueue &)

## Detailed Description

Store request for an event to be generated on a TrackElement.

When an event on a Kite::TrackElement is being processed (with the SegmentFsm helper), it may generate events on TrackElement already placed and belonging either to the same net or other ones. Those events are not generated and queued immediatly but instead SegmentAction, requesting the event generation are created and stored into a simple vector in SegmentFsm. The last operation of the SegmentFsm object is to call the SegmentAction::doAction() method on all the action to actually generate and queue the events.

## Member Enumeration Documentation

## ◆ Type

enum Type

Indicates the kind of action to be performed on the segment. In the following flags and masks descriptions, we uses the term reference segment for the TrackElement which is associated with the currently processed RoutingEvent (also referenced in SegmentFsm).

Here is the list of the availables actions that can be performed when (re)scheduling a RoutingEvent. It is here that we uses the RoutingEvent level feature to perform a local reordering of the top of the queue. Reordering is used to allows perpandiculars to be routed before the reference segment (instead of after) or other segments in conflict.

- SegmentAction::SelfInsert
  Action: The reference segment is to be inserted in a Track (placed).
  Event Level: Unchanged.
- SegmentAction::SelfRipup
  Action: The reference segment is to be ripped up.
  Event Level: Unchanged.
- SegmentAction::SelfRipupPerpand
  Action: Ripup a segment which is a perpandicular to the reference segment. Ordering considerations: this perpandicular will be put back into the RoutingEvent queue with a lower level (priority) than the reference segment, so it will be processed again after the reference segment.
  Event Level: Unchanged.
- SegmentAction::SelfRipupPerpandWithAxisHint
  Action: Ripup a segment which is a perpandicular to the reference segment, supplies an axis hint and put it back into the RoutingEvent queue so that it will be processed before the reference segment.
  Event Level: Increased to SegmentAction::EventLevel4.
- SegmentAction::OtherRipup
  Action: Ripping up a segment from another net and in the same direction as the reference segment.
  Event Level: Unchanged.
- SegmentAction::OtherRipupPerpandAndPushAside
  Action: Ripping up a segment from another net and in perpandicular direction. The level is elevated so it's priority is greater than the reference segment this it will be reprocessed first. An axis hint is also supplied in order to make room for the reference segment.
  Event Level: Increased to SegmentAction::EventLevel3.
- SegmentAction::OtherRipupPerpandAndPacking
  Action: Ripping up a segment from another net and in perpandicular direction. The level is elevated so it's priority is greater than the reference segment this it will be reprocessed first. The generated event is in packing mode only.
  Event Level: Increased to SegmentAction::EventLevel4.

Enumerator
Self | [Flag] The segment associated to the action is the reference segment or segments from the same net.
Other | [Flag] The segment associated to the action is not from the same net as the reference segment.
Perpandicular | [Flag] The action concern a perpandicular to the reference segment.
Insert | [Flag] Request that the segment is to be inserted in the given track. It is the task of SegmentFsm to determine that there is sufficent space to do so.
Ripup | [Flag] Request that the segment is to be ripped up.
RipedByLocal | [Flag] Indicate that the segment has been ripped up by a local one.
ResetRipup | [Flag] The ripup count is to be reset.
ToRipupLimit | [Flag] The ripup count is directly increased to the ripup limit, triggering a state change the next time the segment will be processed.
AxisHint | [Flag] An axis hint has been supplied, and is to be passed to the generated RoutingEvent.
PackingMode | [Flag] Whether the RoutingEvent should be processed in packing mode or negociated mode (transmitted to the RoutingEvent).
ToState | [Flag] Force the change of state of the RoutingEvent (i.e. DataNegociate). Normally the state change is done through the increase of the ripup count in DataNegociate.
EventLevel1 | [Flag] Increase the level to at least 1.
EventLevel2 | [Flag] Increase the level to at least 2.
EventLevel3 | [Flag] Increase the level to at least 3.
EventLevel4 | [Flag] Increase the level to at least 4.
EventLevel5 | [Flag] Increase the level to at least 5.
SelfInsert | [Mask], see SegmentAction::Type.
SelfRipup | [Mask], see SegmentAction::Type.
SelfRipupPerpand | [Mask], see SegmentAction::Type.
SelfRipupPerpandWithAxisHint | [Mask], see SegmentAction::Type.
OtherRipup | [Mask], see SegmentAction::Type.
OtherRipupPerpandAndPushAside | [Mask], see SegmentAction::Type.
OtherRipupPerpandAndPacking | [Mask], see SegmentAction::Type.

## Constructor & Destructor Documentation

## ◆ SegmentAction()

SegmentAction | ( | TrackElement * | segment,
|  | unsigned int | type,
|  | DbU::Unit | axisHint = `0`,
|  | unsigned int | toState = `0`
| ) |  |

Parameters

  segment | On what the action is to be performed.
  type | Defines the type of action, see SegmentAction::Type.
  axisHint | Specifies a preferred axis.
  toState | The DataNegociate::SlackState into which the segment is to be set.

Create segment action.

## Member Function Documentation

## ◆ getSegment()

TrackElement * getSegment | ( |  | ) | const
| inline

Returns: The associated `segment`.

## ◆ getType()

SegmentAction::Type getType | ( |  | ) | const
| inline

Returns: The action to be performed.

## ◆ setAxisHint()

void setAxisHint | ( | DbU::Unit | axis | ) |
| inline

The axis preferred position to be transmitted to the generated event. The transmition will be effective only if the SegmentAction::Type::AxisHint flag is set.

## ◆ setFlag()

unsigned int setFlag | ( | unsigned int | flags | ) |
| inline

Allow to change the action type by indivually setting up the flags.

## ◆ doAction()

void doAction | ( | RoutingEventQueue & | queue | ) |

Actually perform the action. That is, build and queue the appropriate event for the segment.

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

- SegmentFsm.h
- SegmentFsm.cpp
- SegmentFsm.dox

Generated by doxygen 1.8.14 on Mon Apr 27 2020 | Return to top of page

Kite - Detailed Router | Copyright © 2008-2016 UPMC. All rights reserved