Merge pull request #663 from litghost/fix_router2_without_bb

Fix bug in router2 where router may give up too early.
This commit is contained in:
gatecat 2021-04-06 19:35:55 +01:00 committed by GitHub
commit 8501098c16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -654,7 +654,18 @@ struct Router2
bool debug_arc = /*usr.cell->type.str(ctx).find("RAMB") != std::string::npos && (usr.port ==
ctx->id("ADDRATIEHIGH0") || usr.port == ctx->id("ADDRARDADDRL0"))*/
false;
while (!t.queue.empty() && iter < toexplore) {
// When running without a bounding box, the toexplore limit should be
// suspended until a solution is reached. Once a solution is found,
// the toexplore limit should be used again to prevent requiring the
// router to drain the routing queue.
//
// Note that is it important that the must_drain_queue be set to true
// when running without a bb to ensure that a routing failure is
// because there is not route, rather than just because the toexplore
// heuristic is incorrect.
bool must_drain_queue = !is_bb;
while (!t.queue.empty() && (must_drain_queue || iter < toexplore)) {
auto curr = t.queue.top();
auto &d = flat_wires.at(curr.wire);
t.queue.pop();
@ -728,6 +739,7 @@ struct Router2
set_visited(t, next_idx, dh, next_score);
if (next == dst_wire) {
toexplore = std::min(toexplore, iter + 5);
must_drain_queue = false;
}
}
}