@@ -39,18 +39,24 @@ void RoutingToClockConnection::set_fc_val(float fc_val) {
39
39
* RoutingToClockConnection (member functions)
40
40
*/
41
41
42
- void RoutingToClockConnection::create_switches (const ClockRRGraphBuilder& clock_graph) {
42
+ size_t RoutingToClockConnection::estimate_additional_nodes () {
43
+ return 1 ;
44
+ }
45
+
46
+ void RoutingToClockConnection::create_switches (const ClockRRGraphBuilder& clock_graph, t_rr_edge_info_set* rr_edges_to_create) {
43
47
// Initialize random seed
44
48
// Must be done durring every call inorder for restored rr_graphs after a binary
45
49
// search to be consistant
46
50
std::srand (seed);
47
51
48
- auto & device_ctx = g_vpr_ctx.mutable_device ();
49
- auto & rr_nodes = device_ctx.rr_nodes ;
52
+ auto & device_ctx = g_vpr_ctx.device ();
50
53
auto & rr_node_indices = device_ctx.rr_node_indices ;
51
54
52
55
int virtual_clock_network_root_idx = create_virtual_clock_network_sink_node (switch_location.x , switch_location.y );
53
- device_ctx.virtual_clock_network_root_idx = virtual_clock_network_root_idx;
56
+ {
57
+ auto & mut_device_ctx = g_vpr_ctx.mutable_device ();
58
+ mut_device_ctx.virtual_clock_network_root_idx = virtual_clock_network_root_idx;
59
+ }
54
60
55
61
// rr_node indices for x and y channel routing wires and clock wires to connect to
56
62
auto x_wire_indices = get_rr_node_chan_wires_at_location (
@@ -68,18 +74,18 @@ void RoutingToClockConnection::create_switches(const ClockRRGraphBuilder& clock_
68
74
// Connect to x-channel wires
69
75
unsigned num_wires_x = x_wire_indices.size () * fc;
70
76
for (size_t i = 0 ; i < num_wires_x; i++) {
71
- rr_nodes[ x_wire_indices[i]]. add_edge ( clock_index, rr_switch_idx);
77
+ rr_edges_to_create-> emplace_back ( x_wire_indices[i], clock_index, rr_switch_idx);
72
78
}
73
79
74
80
// Connect to y-channel wires
75
81
unsigned num_wires_y = y_wire_indices.size () * fc;
76
82
for (size_t i = 0 ; i < num_wires_y; i++) {
77
- rr_nodes[ y_wire_indices[i]]. add_edge ( clock_index, rr_switch_idx);
83
+ rr_edges_to_create-> emplace_back ( y_wire_indices[i], clock_index, rr_switch_idx);
78
84
}
79
85
80
86
// Connect to virtual clock sink node
81
87
// used by the two stage router
82
- rr_nodes[clock_index]. add_edge ( virtual_clock_network_root_idx, rr_switch_idx);
88
+ rr_edges_to_create-> emplace_back (clock_index, virtual_clock_network_root_idx, rr_switch_idx);
83
89
}
84
90
}
85
91
@@ -134,10 +140,13 @@ void ClockToClockConneciton::set_fc_val(float fc_val) {
134
140
* ClockToClockConneciton (member functions)
135
141
*/
136
142
137
- void ClockToClockConneciton::create_switches (const ClockRRGraphBuilder& clock_graph) {
138
- auto & device_ctx = g_vpr_ctx.mutable_device ();
143
+ size_t ClockToClockConneciton::estimate_additional_nodes () {
144
+ return 0 ;
145
+ }
146
+
147
+ void ClockToClockConneciton::create_switches (const ClockRRGraphBuilder& clock_graph, t_rr_edge_info_set* rr_edges_to_create) {
148
+ auto & device_ctx = g_vpr_ctx.device ();
139
149
auto & grid = device_ctx.grid ;
140
- auto & rr_nodes = device_ctx.rr_nodes ;
141
150
142
151
auto to_locations = clock_graph.get_switch_locations (to_clock, to_switch);
143
152
@@ -179,7 +188,7 @@ void ClockToClockConneciton::create_switches(const ClockRRGraphBuilder& clock_gr
179
188
if (from_itter == from_rr_node_indices.end ()) {
180
189
from_itter = from_rr_node_indices.begin ();
181
190
}
182
- rr_nodes[ *from_itter]. add_edge ( to_index, rr_switch_idx);
191
+ rr_edges_to_create-> emplace_back ( *from_itter, to_index, rr_switch_idx);
183
192
from_itter++;
184
193
}
185
194
}
@@ -211,9 +220,12 @@ void ClockToPinsConnection::set_fc_val(float fc_val) {
211
220
* ClockToPinsConnection (member functions)
212
221
*/
213
222
214
- void ClockToPinsConnection::create_switches (const ClockRRGraphBuilder& clock_graph) {
215
- auto & device_ctx = g_vpr_ctx.mutable_device ();
216
- auto & rr_nodes = device_ctx.rr_nodes ;
223
+ size_t ClockToPinsConnection::estimate_additional_nodes () {
224
+ return 0 ;
225
+ }
226
+
227
+ void ClockToPinsConnection::create_switches (const ClockRRGraphBuilder& clock_graph, t_rr_edge_info_set* rr_edges_to_create) {
228
+ auto & device_ctx = g_vpr_ctx.device ();
217
229
auto & rr_node_indices = device_ctx.rr_node_indices ;
218
230
auto & grid = device_ctx.grid ;
219
231
@@ -290,7 +302,7 @@ void ClockToPinsConnection::create_switches(const ClockRRGraphBuilder& clock_gra
290
302
291
303
// Create edges depending on Fc
292
304
for (size_t i = 0 ; i < clock_network_indices.size () * fc; i++) {
293
- rr_nodes[ clock_network_indices[i]]. add_edge ( clock_pin_node_idx, rr_switch_idx);
305
+ rr_edges_to_create-> emplace_back ( clock_network_indices[i], clock_pin_node_idx, rr_switch_idx);
294
306
}
295
307
}
296
308
}
0 commit comments