Kite - Detailed Router


Manipulator.h
1 // -*- C++ -*-
2 //
3 // This file is part of the Coriolis Software.
4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
5 //
6 // +-----------------------------------------------------------------+
7 // | C O R I O L I S |
8 // | K i t e - D e t a i l e d R o u t e r |
9 // | |
10 // | Author : Jean-Paul CHAPUT |
11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
12 // | =============================================================== |
13 // | C++ Header : "./kite/Manipulator.h" |
14 // +-----------------------------------------------------------------+
15 
16 
17 #ifndef KITE_MANIPULATOR_H
18 #define KITE_MANIPULATOR_H
19 
20 #include "hurricane/DbU.h"
21 #include "katabatic/Constants.h"
22 
23 
24 namespace Kite {
25 
26  using Hurricane::DbU;
27  using Katabatic::KbNoFlags;
28 
29  class TrackElement;
30  class DataNegociate;
31  class RoutingEvent;
32  class SegmentFsm;
33 
34 
35 // -------------------------------------------------------------------
36 // Class Declaration : "::Manipulator".
37 
38  class Manipulator {
39  public:
40  enum FunctionFlag { ToRipupLimit = 0x0001
41  , AllowExpand = 0x0002
42  , NoExpand = 0x0004
44  , ToMoveUp = 0x0010
45  , AllowLocalMoveUp = 0x0020
47  , AllowShortPivotUp = 0x0080
48  , NoDoglegReuse = 0x0100
49  , LeftAxisHint = 0x0200
50  , RightAxisHint = 0x0400
51  , NotOnLastRipup = 0x0800
52  };
53  public:
55  ~Manipulator ();
56  inline TrackElement* getSegment () const;
57  inline DataNegociate* getData () const;
58  inline RoutingEvent* getEvent () const;
59  inline const Layer* getLayer () const;
60  inline DbU::Unit getPitch () const;
61  inline DbU::Unit getPPitch () const;
62  bool canRipup ( unsigned int flags=0 ) const;
63  bool isCaged ( DbU::Unit ) const;
64  bool ripup ( unsigned int type, DbU::Unit axisHint=0 );
65  bool ripupPerpandiculars ( unsigned int flags=0 );
66  void repackPerpandiculars ();
67  void reprocessPerpandiculars ();
68  bool ripple ();
69  bool minimize ();
70  bool slacken ( unsigned int flags=KbNoFlags );
71  bool pivotUp ();
72  bool pivotDown ();
73  bool moveUp ( unsigned int flags=0 );
74  bool makeDogleg ();
75  bool makeDogleg ( DbU::Unit );
76  bool makeDogleg ( Interval );
77  bool relax ( Interval, unsigned int flags=AllowExpand );
78  bool insertInTrack ( size_t );
79  bool shrinkToTrack ( size_t
80  , unsigned int flags=0
81  , DbU::Unit leftAxisHint=0
82  , DbU::Unit rightAxisHint=0
83  );
84  bool forceToTrack ( size_t );
85  bool forceOverLocals ();
86  private:
87  TrackElement* _segment;
88  DataNegociate* _data;
89  RoutingEvent* _event;
90  SegmentFsm& _fsm;
91  };
92 
93 
94  inline TrackElement* Manipulator::getSegment () const { return _segment; }
95  inline DataNegociate* Manipulator::getData () const { return _data; }
96  inline RoutingEvent* Manipulator::getEvent () const { return _event; }
97  inline const Layer* Manipulator::getLayer () const { return _segment->getLayer(); }
98  inline DbU::Unit Manipulator::getPitch () const { return _segment->getPitch(); }
99  inline DbU::Unit Manipulator::getPPitch () const { return _segment->getPPitch(); }
100 
101 
102 } // Kite namespace.
103 
104 #endif // KITE_MANIPULATOR_H
Atomic Placement Request for a TrackSegment.
Definition: RoutingEvent.h:55
bool makeDogleg()
Definition: Manipulator.cpp:1104
bool canRipup(unsigned int flags=0) const
Definition: Manipulator.cpp:109
Manipulator(TrackElement *, SegmentFsm &)
Definition: Manipulator.cpp:89
bool slacken(unsigned int flags=KbNoFlags)
Definition: Manipulator.cpp:987
Definition: Manipulator.h:45
Definition: Manipulator.h:51
bool forceToTrack(size_t)
Definition: Manipulator.cpp:794
Definition: Manipulator.h:42
DataNegociate * getData() const
Definition: Manipulator.h:95
Pseudo-decorator to process a RoutingEvent.
Definition: SegmentFsm.h:89
Definition: Manipulator.h:41
bool insertInTrack(size_t)
Definition: Manipulator.cpp:623
Definition: Manipulator.h:44
Definition: Manipulator.h:40
bool relax(Interval, unsigned int flags=AllowExpand)
Definition: Manipulator.cpp:272
std::int64_t Unit
Definition: Manipulator.h:49
bool pivotDown()
Definition: Manipulator.cpp:1065
virtual const Layer * getLayer() const =0
bool isCaged(DbU::Unit) const
Definition: Manipulator.cpp:123
FunctionFlag
Definition: Manipulator.h:40
bool ripup(unsigned int type, DbU::Unit axisHint=0)
Definition: Manipulator.cpp:144
Definition: Manipulator.h:50
Definition: Manipulator.h:43
TrackElement * getSegment() const
Definition: Manipulator.h:94
void repackPerpandiculars()
Definition: Manipulator.cpp:1389
bool shrinkToTrack(size_t, unsigned int flags=0, DbU::Unit leftAxisHint=0, DbU::Unit rightAxisHint=0)
Definition: Manipulator.cpp:855
bool minimize()
Definition: Manipulator.cpp:1201
Abstract Class for all Elements inserted inside a Track.
Definition: TrackElement.h:100
Definition: Manipulator.h:48
bool ripple()
Definition: Manipulator.cpp:998
Definition: Manipulator.h:47
bool pivotUp()
Definition: Manipulator.cpp:1050
The namespace dedicated to Kite.
Definition: Constants.h:22
RoutingEvent * getEvent() const
Definition: Manipulator.h:96
Algorimthmic datas associated the TrackSegment.
Definition: DataNegociate.h:50
bool ripupPerpandiculars(unsigned int flags=0)
Definition: Manipulator.cpp:158
bool moveUp(unsigned int flags=0)
Definition: Manipulator.cpp:1078
Handle TrackElement ripup & topological modifications.
Definition: Manipulator.h:38
bool forceOverLocals()
Definition: Manipulator.cpp:925
Definition: Manipulator.h:46


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