All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
conflict_table.h
Go to the documentation of this file.
1 #ifndef CONFLICT_TABLE_H_INCLUDED_
2 #define CONFLICT_TABLE_H_INCLUDED_
3 
4 #include<utility>
5 
6 #include "rose.h"
7 
8 #include "segment_graph.h" // needed for VertexDescriptor
9 #include "mapped_variable.h" // needed for MappedVariable
10 
11 namespace risc {
12 
13 class PathInstanceMapper;
14 
15 namespace sg {
16 
18 
19 public:
20 
25  SegmentGraph &segment_graph,
26  PathInstanceMapper *path_instance_mapper,
27  bool debugging = false);
28 
33 
40 
46 
52 
59 
66 
72 
77 
82  void print_conflict_table(std::string filename);
83 
88  void print_lookup_table(std::string filename);
89 
95  int segment_and_instance_id_to_index(int segment_id, int instance_id);
96 
103  std::pair<int, int> index_to_segment_and_instance_id(int index);
104 
111  bool has_conflict(int segment_id_1, int instance_id_1, int segment_id_2,
112  int instance_id_2);
113 
120 
126  void set_conflict(int segment_id_1, int instance_id_1,
127  int segment_id_2, int instance_id_2);
128 
134  virtual void determine_conflict_table();
135 
142 
149  get_mapped_variable(SgVariableSymbol *variable, int instance_id,
150  bool dynamic_analysis);
151 
160  get_mapped_variable_statically(SgVariableSymbol *variable, int instance_id);
161 
168  get_mapped_variable_dynamically(SgVariableSymbol *variable, int instance_id);
169 
175  int get_max_instances(int segment_id);
176 
186  int
187  get_channel_id(const SymbolWithPath &swp, int instance,
188  bool dynamic_analysis);
189 
197  int get_channel_id_statically(const SymbolWithPath &swp, int instance);
198 
206  int get_channel_id_dynamically(const SymbolWithPath &swp, int instance);
207 
209 
211 
212  // The following part is for debugging purposes
214  std::set<Conflict> conflict_variables_;
217  };
218 
220 
222 };
223 
224 }; // end of namesapce sg
225 
226 }; // end of namespace risc
227 
228 #endif /* CONFLICT_TABLE_H_INCLUDED_ */
229 
230 /* ex: set softtabstop=2 tabstop=2 shiftwidth=2 expandtab: */
int max_instances_
This variable represents the max number of module instances in the design. Also, this is the number o...
Definition: conflict_table.h:58
Definition: port_call_path.h:46
virtual void determine_conflict_table()
This function determines the conflict table. The function is overloaded for the data and event confli...
Definition: conflict_table.cpp:604
This class represents a segment graph for a process.
Definition: segment_graph.h:79
int max_instances_with_thread_
Maximum number of module/channel instances Only instances with at least one simulation thread are con...
Definition: conflict_table.h:51
bool ** conflict_table_
The conflict table.
Definition: conflict_table.h:76
int number_of_segments_
This variable defines how many segments exist in the segment graph. Also, this is the number of colum...
Definition: conflict_table.h:65
int get_channel_id_statically(const SymbolWithPath &swp, int instance)
Determines the channel instance id for a given variable declared in a channel.
Definition: conflict_table.cpp:1002
boost::graph_traits< Graph >::vertex_descriptor VertexDescriptor
Definition: segment_graph.h:34
int size_of_conflict_table_
This variable defines the size of the conflict table. The size is quadratic.
Definition: conflict_table.h:45
bool has_conflict(int segment_id_1, int instance_id_1, int segment_id_2, int instance_id_2)
This function looks up if there is a conflict between segment 1 with instance id 1 and segment 2 with...
Definition: conflict_table.cpp:707
VertexDescriptor * vertex_lookup_
This lookup table translates segment ids into vertex descriptors. At position i is the segment with t...
Definition: conflict_table.h:39
PathInstanceMapper * path_instance_mapper_
Definition: conflict_table.h:208
std::set< Conflict > conflict_variables_
Definition: conflict_table.h:214
This class can be used as a lookup table between an instance id of a module or hierarchical channel a...
Definition: path_instance_mapper.h:13
Definition: conflict_table.h:213
std::pair< int, int > index_to_segment_and_instance_id(int index)
This function translates a given index from the conflict table into the corresponding segment id and ...
Definition: conflict_table.cpp:685
bool debugging_
Definition: conflict_table.h:221
int segment_and_instance_id_to_index(int segment_id, int instance_id)
This function translates a given segment id and instance id to a index of the conflict table...
Definition: conflict_table.cpp:664
ConflictTable(SegmentGraph &segment_graph, PathInstanceMapper *path_instance_mapper, bool debugging=false)
Default constructor.
Definition: conflict_table.cpp:299
void print_conflict_table(std::string filename)
Generates a html file of the conflict table.
Definition: conflict_table.cpp:716
void set_conflict(int segment_id_1, int instance_id_1, int segment_id_2, int instance_id_2)
This function sets a conflict in the conflict table.
int get_max_instances(int segment_id)
This functions returns how many instances of a given segment exist.
Definition: conflict_table.cpp:964
MappedVariableList get_mapped_variable_dynamically(SgVariableSymbol *variable, int instance_id)
This function determines the mapped address of a reference during the pre simulation.
Definition: conflict_table.cpp:44
Definition: conflict_table.h:17
ConflictInformation ** conflict_info_
Definition: conflict_table.h:219
int get_channel_id(const SymbolWithPath &swp, int instance, bool dynamic_analysis)
Determines the channel instance id for a given variable declared in a channel.
Definition: conflict_table.cpp:986
MappedVariableList get_mapped_variable_statically(SgVariableSymbol *variable, int instance_id)
This function determines for a given variable the mapped variable. If variable is a reference...
Definition: conflict_table.cpp:164
bool contains_sc_stop_
Definition: conflict_table.h:215
MappedVariableList get_mapped_variable(SgVariableSymbol *variable, int instance_id, bool dynamic_analysis)
Determines the mapped variable.
Definition: conflict_table.cpp:31
VertexDescriptor segment_id_to_vertex_descriptor(int id)
This function translates the given segment id to the corresponding vertex descriptor.
Definition: conflict_table.cpp:953
~ConflictTable()
Destructor.
Definition: conflict_table.cpp:614
std::list< MappedVariable > MappedVariableList
Definition: mapped_variable.h:44
int ** instance_id_to_index_lookup_
This table should be used a lookup table: (segment id, instance id) -&gt; index of conflict table...
Definition: conflict_table.h:71
void print_lookup_table(std::string filename)
Generates a html file of the lookup table.
Definition: conflict_table.cpp:896
ConflictInformation()
Definition: conflict_table.h:216
void print_instance_id_to_index_lookup_table()
This function prints the table instance_id_to_index_lookup_table in the terminal. ...
Definition: conflict_table.cpp:642
SegmentGraph & segment_graph_
Definition: conflict_table.h:210
int get_channel_id_dynamically(const SymbolWithPath &swp, int instance)
Determines the channel instance id for a given variable declared in a channel.
Definition: conflict_table.cpp:1039