OpenASIP  2.0
AssignmentPlan.hh
Go to the documentation of this file.
1 /*
2  Copyright (c) 2002-2009 Tampere University.
3 
4  This file is part of TTA-Based Codesign Environment (TCE).
5 
6  Permission is hereby granted, free of charge, to any person obtaining a
7  copy of this software and associated documentation files (the "Software"),
8  to deal in the Software without restriction, including without limitation
9  the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  and/or sell copies of the Software, and to permit persons to whom the
11  Software is furnished to do so, subject to the following conditions:
12 
13  The above copyright notice and this permission notice shall be included in
14  all copies or substantial portions of the Software.
15 
16  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  DEALINGS IN THE SOFTWARE.
23  */
24 /**
25  * @file AssignmentPlan.hh
26  *
27  * Declaration of AssignmentPlan class.
28  *
29  * @author Ari Metsähalme 2006 (ari.metsahalme-no.spam-tut.fi)
30  * @note rating: red
31  */
32 
33 #ifndef TTA_ASSIGNMENT_PLAN_HH
34 #define TTA_ASSIGNMENT_PLAN_HH
35 
36 #include <vector>
37 #include "Exception.hh"
38 
39 class ResourceBroker;
40 class PendingAssignment;
41 class MoveNode;
42 class SchedulingResource;
43 
44 namespace TTAMachine {
45  class Bus;
46  class FunctionUnit;
47  class ImmediateUnit;
48 }
49 
50 /**
51  * Keeps the order in which single resource-specific brokers are
52  * invoked to perform their bit of the allocation or assignment. Also
53  * records the current state of tentative and potential assignments
54  * for each type of resource.
55  */
57 public:
59  virtual ~AssignmentPlan();
60 
62  void setRequest(
63  int cycle, MoveNode& node, const TTAMachine::Bus* bus,
64  const TTAMachine::FunctionUnit* srcFU,
65  const TTAMachine::FunctionUnit* dstFU,
66  int immWriteCycle,
67  const TTAMachine::ImmediateUnit* immu,
68  int immRegIndex);
73  void advance();
74  void backtrack();
75  void tryNextAssignment();
77  void resetAssignments();
78  void resetAssignments(MoveNode& node);
79 
80  int brokerCount() const;
81  ResourceBroker& broker(int index) const;
82  void clear();
83 
84  bool tryCachedAssignment(MoveNode& node, int cycle,
85  const TTAMachine::Bus* bus,
86  const TTAMachine::FunctionUnit* srcFU,
87  const TTAMachine::FunctionUnit* dstFU,
88  int immWriteCycle,
89  const TTAMachine::ImmediateUnit* immu,
90  int immRegIndex);
91  void clearCache();
92 private:
93 
100 
101  /// Sequence of pending assignments.
102  std::vector<PendingAssignment*> assignments_;
103  /// Sequence of applicable pending assignments.
104  std::vector<PendingAssignment*> applicableAssignments_;
105  /// Sequence of resource brokers.
106  std::vector<ResourceBroker*> brokers_;
107  /// Move of current resource assignment request.
109  /// Cycle in which current node should be placed.
110  int cycle_;
111  /// Current broker.
113  /// True if a valid resource of current broker has been assigned.
115 
116  /// cache.
117  std::vector<std::pair<ResourceBroker*, SchedulingResource*> >
121 };
122 
123 #endif
AssignmentPlan::srcFU_
const TTAMachine::FunctionUnit * srcFU_
Definition: AssignmentPlan.hh:95
AssignmentPlan::tryCachedAssignment
bool tryCachedAssignment(MoveNode &node, int cycle, const TTAMachine::Bus *bus, const TTAMachine::FunctionUnit *srcFU, const TTAMachine::FunctionUnit *dstFU, int immWriteCycle, const TTAMachine::ImmediateUnit *immu, int immRegIndex)
Definition: AssignmentPlan.cc:310
Exception.hh
AssignmentPlan::dstFU_
const TTAMachine::FunctionUnit * dstFU_
Definition: AssignmentPlan.hh:96
AssignmentPlan::~AssignmentPlan
virtual ~AssignmentPlan()
Definition: AssignmentPlan.cc:58
TTAMachine::Bus
Definition: Bus.hh:53
AssignmentPlan::AssignmentPlan
AssignmentPlan()
Definition: AssignmentPlan.cc:50
ResourceBroker
Definition: ResourceBroker.hh:61
AssignmentPlan::currentBroker_
int currentBroker_
Current broker.
Definition: AssignmentPlan.hh:112
AssignmentPlan::lastTestedWorkingAssignment_
std::vector< std::pair< ResourceBroker *, SchedulingResource * > > lastTestedWorkingAssignment_
cache.
Definition: AssignmentPlan.hh:118
MoveNode
Definition: MoveNode.hh:65
AssignmentPlan::setRequest
void setRequest(int cycle, MoveNode &node, const TTAMachine::Bus *bus, const TTAMachine::FunctionUnit *srcFU, const TTAMachine::FunctionUnit *dstFU, int immWriteCycle, const TTAMachine::ImmediateUnit *immu, int immRegIndex)
Definition: AssignmentPlan.cc:81
AssignmentPlan::immRegIndex_
int immRegIndex_
Definition: AssignmentPlan.hh:99
AssignmentPlan::lastBroker
ResourceBroker & lastBroker()
Definition: AssignmentPlan.cc:164
AssignmentPlan::insertBroker
void insertBroker(ResourceBroker &broker)
Definition: AssignmentPlan.cc:68
TTAMachine::FunctionUnit
Definition: FunctionUnit.hh:55
AssignmentPlan::immu_
const TTAMachine::ImmediateUnit * immu_
Definition: AssignmentPlan.hh:98
AssignmentPlan::isTestedAssignmentPossible
bool isTestedAssignmentPossible()
Definition: AssignmentPlan.cc:263
AssignmentPlan::firstBroker
ResourceBroker & firstBroker()
Definition: AssignmentPlan.cc:130
AssignmentPlan::node_
MoveNode * node_
Move of current resource assignment request.
Definition: AssignmentPlan.hh:108
AssignmentPlan::applicableAssignments_
std::vector< PendingAssignment * > applicableAssignments_
Sequence of applicable pending assignments.
Definition: AssignmentPlan.hh:104
SchedulingResource
Definition: SchedulingResource.hh:52
AssignmentPlan::currentBroker
ResourceBroker & currentBroker()
Definition: AssignmentPlan.cc:179
AssignmentPlan::clearCache
void clearCache()
Definition: AssignmentPlan.cc:464
AssignmentPlan::backtrack
void backtrack()
Definition: AssignmentPlan.cc:211
AssignmentPlan::resetAssignments
void resetAssignments()
Definition: AssignmentPlan.cc:384
AssignmentPlan::broker
ResourceBroker & broker(int index) const
Definition: AssignmentPlan.cc:436
AssignmentPlan::assignments_
std::vector< PendingAssignment * > assignments_
Sequence of pending assignments.
Definition: AssignmentPlan.hh:102
AssignmentPlan::advance
void advance()
Definition: AssignmentPlan.cc:191
AssignmentPlan::immWriteCycle_
int immWriteCycle_
Definition: AssignmentPlan.hh:97
AssignmentPlan::nextBroker
ResourceBroker & nextBroker(ResourceBroker &pos)
Definition: AssignmentPlan.cc:139
AssignmentPlan::lastTriedNode_
MoveNode * lastTriedNode_
Definition: AssignmentPlan.hh:119
PendingAssignment
Definition: PendingAssignment.hh:48
AssignmentPlan::lastTriedCycle_
int lastTriedCycle_
Definition: AssignmentPlan.hh:120
AssignmentPlan::tryNextAssignment
void tryNextAssignment()
Definition: AssignmentPlan.cc:237
AssignmentPlan
Definition: AssignmentPlan.hh:56
AssignmentPlan::brokers_
std::vector< ResourceBroker * > brokers_
Sequence of resource brokers.
Definition: AssignmentPlan.hh:106
AssignmentPlan::brokerCount
int brokerCount() const
Definition: AssignmentPlan.cc:424
AssignmentPlan::clear
void clear()
Definition: AssignmentPlan.cc:446
TTAMachine
Definition: Assembler.hh:48
AssignmentPlan::bus_
const TTAMachine::Bus * bus_
Definition: AssignmentPlan.hh:94
AssignmentPlan::resourceFound_
bool resourceFound_
True if a valid resource of current broker has been assigned.
Definition: AssignmentPlan.hh:114
AssignmentPlan::cycle_
int cycle_
Cycle in which current node should be placed.
Definition: AssignmentPlan.hh:110
TTAMachine::ImmediateUnit
Definition: ImmediateUnit.hh:50