Skip to content

Commit d7a9c0a

Browse files
committed
Move rr node storage behind an object.
Signed-off-by: Keith Rothman <[email protected]>
1 parent 16d5bae commit d7a9c0a

File tree

6 files changed

+39
-34
lines changed

6 files changed

+39
-34
lines changed

vpr/src/base/vpr_context.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "vtr_vector.h"
1010
#include "atom_netlist.h"
1111
#include "clustered_netlist.h"
12+
#include "rr_node_storage.h"
1213
#include "rr_node.h"
1314
#include "tatum/TimingGraph.hpp"
1415
#include "tatum/TimingConstraints.hpp"
@@ -144,7 +145,7 @@ struct DeviceContext : public Context {
144145
t_chan_width chan_width;
145146

146147
/* Structures to define the routing architecture of the FPGA. */
147-
std::vector<t_rr_node> rr_nodes; /* autogenerated in build_rr_graph */
148+
t_rr_node_storage rr_nodes; /* autogenerated in build_rr_graph */
148149

149150
std::vector<t_rr_indexed_data> rr_indexed_data; /* [0 .. num_rr_indexed_data-1] */
150151

vpr/src/route/clock_network_builders.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void ClockNetwork::set_num_instance(int num_inst) {
6161
*/
6262

6363
void ClockNetwork::create_rr_nodes_for_clock_network_wires(ClockRRGraphBuilder& clock_graph,
64-
std::vector<t_rr_node>* rr_nodes,
64+
t_rr_node_storage* rr_nodes,
6565
t_rr_edge_info_set* rr_edges_to_create,
6666
int num_segments) {
6767
for (int inst_num = 0; inst_num < get_num_inst(); inst_num++) {
@@ -215,7 +215,7 @@ size_t ClockRib::estimate_additional_nodes(const DeviceGrid& grid) {
215215
}
216216

217217
void ClockRib::create_rr_nodes_and_internal_edges_for_one_instance(ClockRRGraphBuilder& clock_graph,
218-
std::vector<t_rr_node>* rr_nodes,
218+
t_rr_node_storage* rr_nodes,
219219
t_rr_edge_info_set* rr_edges_to_create,
220220
int num_segments) {
221221
// Only chany wires need to know the number of segments inorder
@@ -307,7 +307,7 @@ int ClockRib::create_chanx_wire(int x_start,
307307
int y,
308308
int ptc_num,
309309
e_direction direction,
310-
std::vector<t_rr_node>* rr_nodes) {
310+
t_rr_node_storage* rr_nodes) {
311311
rr_nodes->emplace_back();
312312
auto node_index = rr_nodes->size() - 1;
313313
auto& node = rr_nodes->back();
@@ -502,7 +502,7 @@ size_t ClockSpine::estimate_additional_nodes(const DeviceGrid& grid) {
502502
}
503503

504504
void ClockSpine::create_rr_nodes_and_internal_edges_for_one_instance(ClockRRGraphBuilder& clock_graph,
505-
std::vector<t_rr_node>* rr_nodes,
505+
t_rr_node_storage* rr_nodes,
506506
t_rr_edge_info_set* rr_edges_to_create,
507507
int num_segments) {
508508
auto& grid = clock_graph.grid();
@@ -596,7 +596,7 @@ int ClockSpine::create_chany_wire(int y_start,
596596
int x,
597597
int ptc_num,
598598
e_direction direction,
599-
std::vector<t_rr_node>* rr_nodes,
599+
t_rr_node_storage* rr_nodes,
600600
int num_segments) {
601601
rr_nodes->emplace_back();
602602
auto node_index = rr_nodes->size() - 1;
@@ -662,7 +662,7 @@ size_t ClockHTree::estimate_additional_nodes(const DeviceGrid& /*grid*/) {
662662
}
663663

664664
void ClockHTree::create_rr_nodes_and_internal_edges_for_one_instance(ClockRRGraphBuilder& clock_graph,
665-
std::vector<t_rr_node>* rr_nodes,
665+
t_rr_node_storage* rr_nodes,
666666
t_rr_edge_info_set* rr_edges_to_create,
667667
int num_segments) {
668668
//Remove unused parameter warning

vpr/src/route/clock_network_builders.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "rr_graph2.h"
1212
#include "rr_graph_clock.h"
1313

14+
class t_rr_node_storage;
1415
class ClockRRGraphBuilder;
1516

1617
enum class ClockType {
@@ -102,13 +103,13 @@ class ClockNetwork {
102103
/* Creates the RR nodes for the clock network wires and adds them to the reverse lookup
103104
* in ClockRRGraphBuilder. The reverse lookup maps the nodes to their switch point locations */
104105
void create_rr_nodes_for_clock_network_wires(ClockRRGraphBuilder& clock_graph,
105-
std::vector<t_rr_node>* rr_nodes,
106+
t_rr_node_storage* rr_nodes,
106107
t_rr_edge_info_set* rr_edges_to_create,
107108
int num_segments);
108109
virtual void create_segments(std::vector<t_segment_inf>& segment_inf) = 0;
109110
virtual void create_rr_nodes_and_internal_edges_for_one_instance(
110111
ClockRRGraphBuilder& clock_graph,
111-
std::vector<t_rr_node>* rr_nodes,
112+
t_rr_node_storage* rr_nodes,
112113
t_rr_edge_info_set* rr_edges_to_create,
113114
int num_segments)
114115
= 0;
@@ -163,7 +164,7 @@ class ClockRib : public ClockNetwork {
163164
*/
164165
void create_segments(std::vector<t_segment_inf>& segment_inf) override;
165166
void create_rr_nodes_and_internal_edges_for_one_instance(ClockRRGraphBuilder& clock_graph,
166-
std::vector<t_rr_node>* rr_nodes,
167+
t_rr_node_storage* rr_nodes,
167168
t_rr_edge_info_set* rr_edges_to_create,
168169
int num_segments) override;
169170
size_t estimate_additional_nodes(const DeviceGrid& grid) override;
@@ -172,7 +173,7 @@ class ClockRib : public ClockNetwork {
172173
int y,
173174
int ptc_num,
174175
e_direction direction,
175-
std::vector<t_rr_node>* rr_nodes);
176+
t_rr_node_storage* rr_nodes);
176177
void record_tap_locations(unsigned x_start,
177178
unsigned x_end,
178179
unsigned y,
@@ -222,7 +223,7 @@ class ClockSpine : public ClockNetwork {
222223
*/
223224
void create_segments(std::vector<t_segment_inf>& segment_inf) override;
224225
void create_rr_nodes_and_internal_edges_for_one_instance(ClockRRGraphBuilder& clock_graph,
225-
std::vector<t_rr_node>* rr_nodes,
226+
t_rr_node_storage* rr_nodes,
226227
t_rr_edge_info_set* rr_edges_to_create,
227228
int num_segments) override;
228229
size_t estimate_additional_nodes(const DeviceGrid& grid) override;
@@ -231,7 +232,7 @@ class ClockSpine : public ClockNetwork {
231232
int x,
232233
int ptc_num,
233234
e_direction direction,
234-
std::vector<t_rr_node>* rr_nodes,
235+
t_rr_node_storage* rr_nodes,
235236
int num_segments);
236237
void record_tap_locations(unsigned y_start,
237238
unsigned y_end,
@@ -257,7 +258,7 @@ class ClockHTree : private ClockNetwork {
257258
// TODO: Unimplemented member function
258259
void create_segments(std::vector<t_segment_inf>& segment_inf) override;
259260
void create_rr_nodes_and_internal_edges_for_one_instance(ClockRRGraphBuilder& clock_graph,
260-
std::vector<t_rr_node>* rr_nodes,
261+
t_rr_node_storage* rr_nodes,
261262
t_rr_edge_info_set* rr_edges_to_create,
262263
int num_segments) override;
263264
size_t estimate_additional_nodes(const DeviceGrid& grid) override;

vpr/src/route/rr_graph.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ static void build_bidir_rr_opins(const int i,
105105
const int j,
106106
const e_side side,
107107
const t_rr_node_indices& L_rr_node_indices,
108-
const std::vector<t_rr_node>& rr_nodes,
108+
const t_rr_node_storage& rr_nodes,
109109
const t_pin_to_track_lookup& opin_to_track_map,
110110
const std::vector<vtr::Matrix<int>>& Fc_out,
111111
t_rr_edge_info_set& created_rr_edges,
@@ -130,7 +130,7 @@ static void build_unidir_rr_opins(const int i,
130130
t_rr_edge_info_set& created_rr_edges,
131131
bool* Fc_clipped,
132132
const t_rr_node_indices& L_rr_node_indices,
133-
const std::vector<t_rr_node>& rr_nodes,
133+
const t_rr_node_storage& rr_nodes,
134134
const t_direct_inf* directs,
135135
const int num_directs,
136136
const t_clb_to_clb_directs* clb_to_clb_directs,
@@ -143,12 +143,12 @@ static int get_opin_direct_connecions(int x,
143143
int from_rr_node,
144144
t_rr_edge_info_set& rr_edges_to_create,
145145
const t_rr_node_indices& L_rr_node_indices,
146-
const std::vector<t_rr_node>& rr_nodes,
146+
const t_rr_node_storage& rr_nodes,
147147
const t_direct_inf* directs,
148148
const int num_directs,
149149
const t_clb_to_clb_directs* clb_to_clb_directs);
150150

151-
static std::function<void(t_chan_width*)> alloc_and_load_rr_graph(std::vector<t_rr_node>& L_rr_node,
151+
static std::function<void(t_chan_width*)> alloc_and_load_rr_graph(t_rr_node_storage& L_rr_node,
152152
const int num_seg_types,
153153
const t_chan_details& chan_details_x,
154154
const t_chan_details& chan_details_y,
@@ -209,7 +209,7 @@ static std::vector<std::vector<bool>> alloc_and_load_perturb_ipins(const int L_n
209209

210210
static void build_rr_sinks_sources(const int i,
211211
const int j,
212-
std::vector<t_rr_node>& L_rr_node,
212+
t_rr_node_storage& L_rr_node,
213213
t_rr_edge_info_set& rr_edges_to_create,
214214
const t_rr_node_indices& L_rr_node_indices,
215215
const int delayless_switch,
@@ -231,13 +231,13 @@ static void build_rr_chan(const int i,
231231
const t_chan_details& chan_details_y,
232232
const t_rr_node_indices& L_rr_node_indices,
233233
t_rr_edge_info_set& created_rr_edges,
234-
std::vector<t_rr_node>& L_rr_node,
234+
t_rr_node_storage& L_rr_node,
235235
const int wire_to_ipin_switch,
236236
const enum e_directionality directionality);
237237

238238
void uniquify_edges(t_rr_edge_info_set& rr_edges_to_create);
239239

240-
void alloc_and_load_edges(std::vector<t_rr_node>& L_rr_node,
240+
void alloc_and_load_edges(t_rr_node_storage& L_rr_node,
241241
const t_rr_edge_info_set& rr_edges_to_create);
242242

243243
static void alloc_and_load_rr_switch_inf(const int num_arch_switches,
@@ -275,7 +275,7 @@ static std::vector<vtr::Matrix<int>> alloc_and_load_actual_fc(const std::vector<
275275
const enum e_directionality directionality,
276276
bool* Fc_clipped);
277277

278-
static int pick_best_direct_connect_target_rr_node(const std::vector<t_rr_node>& rr_nodes,
278+
static int pick_best_direct_connect_target_rr_node(const t_rr_node_storage& rr_nodes,
279279
int from_rr,
280280
const std::vector<int>& candidate_rr_nodes);
281281

@@ -1185,7 +1185,7 @@ static void free_type_track_to_pin_map(t_track_to_pin_lookup& track_to_pin_map,
11851185

11861186
/* Does the actual work of allocating the rr_graph and filling all the *
11871187
* appropriate values. Everything up to this was just a prelude! */
1188-
static std::function<void(t_chan_width*)> alloc_and_load_rr_graph(std::vector<t_rr_node>& L_rr_node,
1188+
static std::function<void(t_chan_width*)> alloc_and_load_rr_graph(t_rr_node_storage& L_rr_node,
11891189
const int num_seg_types,
11901190
const t_chan_details& chan_details_x,
11911191
const t_chan_details& chan_details_y,
@@ -1333,7 +1333,7 @@ static void build_bidir_rr_opins(const int i,
13331333
const int j,
13341334
const e_side side,
13351335
const t_rr_node_indices& L_rr_node_indices,
1336-
const std::vector<t_rr_node>& rr_nodes,
1336+
const t_rr_node_storage& rr_nodes,
13371337
const t_pin_to_track_lookup& opin_to_track_map,
13381338
const std::vector<vtr::Matrix<int>>& Fc_out,
13391339
t_rr_edge_info_set& rr_edges_to_create,
@@ -1426,7 +1426,7 @@ void free_rr_graph() {
14261426

14271427
static void build_rr_sinks_sources(const int i,
14281428
const int j,
1429-
std::vector<t_rr_node>& L_rr_node,
1429+
t_rr_node_storage& L_rr_node,
14301430
t_rr_edge_info_set& rr_edges_to_create,
14311431
const t_rr_node_indices& L_rr_node_indices,
14321432
const int delayless_switch,
@@ -1555,7 +1555,7 @@ static void build_rr_sinks_sources(const int i,
15551555
//Create the actual edges
15561556
}
15571557

1558-
void init_fan_in(std::vector<t_rr_node>& L_rr_node, const int num_rr_nodes) {
1558+
void init_fan_in(t_rr_node_storage& L_rr_node, const int num_rr_nodes) {
15591559
//Loads fan-ins for all nodes
15601560

15611561
//Reset all fan-ins to zero
@@ -1591,7 +1591,7 @@ static void build_rr_chan(const int x_coord,
15911591
const t_chan_details& chan_details_y,
15921592
const t_rr_node_indices& L_rr_node_indices,
15931593
t_rr_edge_info_set& rr_edges_to_create,
1594-
std::vector<t_rr_node>& L_rr_node,
1594+
t_rr_node_storage& L_rr_node,
15951595
const int wire_to_ipin_switch,
15961596
const enum e_directionality directionality) {
15971597
/* this function builds both x and y-directed channel segments, so set up our
@@ -1754,7 +1754,7 @@ void uniquify_edges(t_rr_edge_info_set& rr_edges_to_create) {
17541754
rr_edges_to_create.erase(std::unique(rr_edges_to_create.begin(), rr_edges_to_create.end()), rr_edges_to_create.end());
17551755
}
17561756

1757-
void alloc_and_load_edges(std::vector<t_rr_node>& L_rr_node,
1757+
void alloc_and_load_edges(t_rr_node_storage& L_rr_node,
17581758
const t_rr_edge_info_set& rr_edges_to_create) {
17591759
/* Sets up all the edge related information for rr_node */
17601760

@@ -2590,7 +2590,7 @@ std::string describe_rr_node(int inode) {
25902590

25912591
return msg;
25922592
}
2593-
static void build_unidir_rr_opins(const int i, const int j, const e_side side, const DeviceGrid& grid, const std::vector<vtr::Matrix<int>>& Fc_out, const int max_chan_width, const t_chan_details& chan_details_x, const t_chan_details& chan_details_y, vtr::NdMatrix<int, 3>& Fc_xofs, vtr::NdMatrix<int, 3>& Fc_yofs, t_rr_edge_info_set& rr_edges_to_create, bool* Fc_clipped, const t_rr_node_indices& L_rr_node_indices, const std::vector<t_rr_node>& rr_nodes, const t_direct_inf* directs, const int num_directs, const t_clb_to_clb_directs* clb_to_clb_directs, const int num_seg_types) {
2593+
static void build_unidir_rr_opins(const int i, const int j, const e_side side, const DeviceGrid& grid, const std::vector<vtr::Matrix<int>>& Fc_out, const int max_chan_width, const t_chan_details& chan_details_x, const t_chan_details& chan_details_y, vtr::NdMatrix<int, 3>& Fc_xofs, vtr::NdMatrix<int, 3>& Fc_yofs, t_rr_edge_info_set& rr_edges_to_create, bool* Fc_clipped, const t_rr_node_indices& L_rr_node_indices, const t_rr_node_storage& rr_nodes, const t_direct_inf* directs, const int num_directs, const t_clb_to_clb_directs* clb_to_clb_directs, const int num_seg_types) {
25942594
/*
25952595
* This routine adds the edges from opins to channels at the specified
25962596
* grid location (i,j) and grid tile side
@@ -2825,7 +2825,7 @@ static int get_opin_direct_connecions(int x,
28252825
int from_rr_node,
28262826
t_rr_edge_info_set& rr_edges_to_create,
28272827
const t_rr_node_indices& L_rr_node_indices,
2828-
const std::vector<t_rr_node>& rr_nodes,
2828+
const t_rr_node_storage& rr_nodes,
28292829
const t_direct_inf* directs,
28302830
const int num_directs,
28312831
const t_clb_to_clb_directs* clb_to_clb_directs) {
@@ -3037,7 +3037,7 @@ static std::vector<bool> alloc_and_load_perturb_opins(const t_physical_tile_type
30373037
return perturb_opins;
30383038
}
30393039

3040-
static int pick_best_direct_connect_target_rr_node(const std::vector<t_rr_node>& rr_nodes,
3040+
static int pick_best_direct_connect_target_rr_node(const t_rr_node_storage& rr_nodes,
30413041
int from_rr,
30423042
const std::vector<int>& candidate_rr_nodes) {
30433043
//With physically equivalent pins there may be multiple candidate rr nodes (which are equivalent)

vpr/src/route/rr_graph.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ void free_rr_graph();
4545
//Returns a brief one-line summary of an RR node
4646
std::string describe_rr_node(int inode);
4747

48-
void init_fan_in(std::vector<t_rr_node>& L_rr_node, const int num_rr_nodes);
48+
class t_rr_node_storage;
49+
50+
void init_fan_in(t_rr_node_storage& L_rr_node, const int num_rr_nodes);
4951

5052
// Sets the spec for the rr_switch based on the arch switch
5153
void load_rr_switch_from_arch_switch(int arch_switch_idx,

vpr/src/route/rr_graph_clock.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
class ClockNetwork;
1717
class ClockConnection;
18+
class t_rr_node_storage;
1819

1920
class SwitchPoint {
2021
/* A switch point object: keeps information on the location and and rr_node indices
@@ -76,7 +77,7 @@ class ClockRRGraphBuilder {
7677
ClockRRGraphBuilder(
7778
const t_chan_width& chan_width,
7879
const DeviceGrid& grid,
79-
std::vector<t_rr_node>* rr_nodes)
80+
t_rr_node_storage* rr_nodes)
8081
: chan_width_(chan_width)
8182
, grid_(grid)
8283
, rr_nodes_(rr_nodes)
@@ -132,7 +133,7 @@ class ClockRRGraphBuilder {
132133

133134
const t_chan_width& chan_width_;
134135
const DeviceGrid& grid_;
135-
std::vector<t_rr_node>* rr_nodes_;
136+
t_rr_node_storage* rr_nodes_;
136137

137138
int chanx_ptc_idx_;
138139
int chany_ptc_idx_;

0 commit comments

Comments
 (0)