@@ -260,7 +260,8 @@ struct more_sinks_than {
260
260
}
261
261
};
262
262
263
- static WirelengthInfo calculate_wirelength_info ();
263
+ static size_t calculate_wirelength_available ();
264
+ static WirelengthInfo calculate_wirelength_info (size_t available_wirelength);
264
265
static OveruseInfo calculate_overuse_info ();
265
266
266
267
static void print_route_status_header ();
@@ -368,6 +369,8 @@ bool try_timing_driven_route(const t_router_opts& router_opts,
368
369
constexpr float BB_SCALE_FACTOR = 2 ;
369
370
constexpr int BB_SCALE_ITER_COUNT = 5 ;
370
371
372
+ size_t available_wirelength = calculate_wirelength_available ();
373
+
371
374
/*
372
375
* Routing status and metrics
373
376
*/
@@ -460,7 +463,7 @@ bool try_timing_driven_route(const t_router_opts& router_opts,
460
463
float est_success_iteration = routing_predictor.estimate_success_iteration ();
461
464
462
465
overuse_info = calculate_overuse_info ();
463
- wirelength_info = calculate_wirelength_info ();
466
+ wirelength_info = calculate_wirelength_info (available_wirelength );
464
467
routing_predictor.add_iteration_overuse (itry, overuse_info.overused_nodes ());
465
468
466
469
if (timing_info) {
@@ -2311,18 +2314,26 @@ static OveruseInfo calculate_overuse_info() {
2311
2314
return OveruseInfo (device_ctx.rr_nodes .size (), overused_nodes, total_overuse, worst_overuse);
2312
2315
}
2313
2316
2314
- static WirelengthInfo calculate_wirelength_info () {
2317
+ static size_t calculate_wirelength_available () {
2315
2318
auto & device_ctx = g_vpr_ctx.device ();
2316
- auto & cluster_ctx = g_vpr_ctx.clustering ();
2317
2319
2318
- size_t used_wirelength = 0 ;
2319
2320
size_t available_wirelength = 0 ;
2320
-
2321
2321
for (size_t i = 0 ; i < device_ctx.rr_nodes .size (); ++i) {
2322
2322
if (device_ctx.rr_nodes [i].type () == CHANX || device_ctx.rr_nodes [i].type () == CHANY) {
2323
- available_wirelength += device_ctx.rr_nodes [i].capacity () + device_ctx.rr_nodes [i].xhigh () - device_ctx.rr_nodes [i].xlow () + device_ctx.rr_nodes [i].yhigh () - device_ctx.rr_nodes [i].ylow ();
2323
+ size_t length_x = device_ctx.rr_nodes [i].xhigh () - device_ctx.rr_nodes [i].xlow ();
2324
+ size_t length_y = device_ctx.rr_nodes [i].yhigh () - device_ctx.rr_nodes [i].ylow ();
2325
+
2326
+ available_wirelength += device_ctx.rr_nodes [i].capacity () * (length_x + length_y + 1 );
2324
2327
}
2325
2328
}
2329
+ return available_wirelength;
2330
+ }
2331
+
2332
+ static WirelengthInfo calculate_wirelength_info (size_t available_wirelength) {
2333
+ auto & cluster_ctx = g_vpr_ctx.clustering ();
2334
+
2335
+ size_t used_wirelength = 0 ;
2336
+ VTR_ASSERT (available_wirelength > 0 );
2326
2337
2327
2338
for (auto net_id : cluster_ctx.clb_nlist .nets ()) {
2328
2339
if (!cluster_ctx.clb_nlist .net_is_ignored (net_id)
@@ -2333,7 +2344,6 @@ static WirelengthInfo calculate_wirelength_info() {
2333
2344
used_wirelength += wirelength;
2334
2345
}
2335
2346
}
2336
- VTR_ASSERT (available_wirelength > 0 );
2337
2347
2338
2348
return WirelengthInfo (available_wirelength, used_wirelength);
2339
2349
}
0 commit comments