router2: Improve backwards routing of some cases
Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
parent
363d664f27
commit
59c554b50a
@ -374,8 +374,34 @@ struct Router2
|
|||||||
t.backwards_queue.pop();
|
t.backwards_queue.pop();
|
||||||
auto &cwd = wires.at(cursor);
|
auto &cwd = wires.at(cursor);
|
||||||
PipId cpip;
|
PipId cpip;
|
||||||
if (cwd.bound_nets.count(net->udata))
|
if (cwd.bound_nets.count(net->udata)) {
|
||||||
|
// If we can tack onto existing routing; try that
|
||||||
|
// Only do this if the existing routing is uncontented; however
|
||||||
|
WireId cursor2 = cursor;
|
||||||
|
bool bwd_merge_fail = false;
|
||||||
|
while (wires.at(cursor2).bound_nets.count(net->udata)) {
|
||||||
|
if (wires.at(cursor2).bound_nets.size() > 1) {
|
||||||
|
bwd_merge_fail = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
PipId p = wires.at(cursor2).bound_nets.at(net->udata).second;
|
||||||
|
if (p == PipId())
|
||||||
|
break;
|
||||||
|
cursor2 = ctx->getPipSrcWire(p);
|
||||||
|
}
|
||||||
|
if (!bwd_merge_fail && cursor2 == src_wire) {
|
||||||
|
// Found a path to merge to existing routing; backwards
|
||||||
|
cursor2 = cursor;
|
||||||
|
while (wires.at(cursor2).bound_nets.count(net->udata)) {
|
||||||
|
PipId p = wires.at(cursor2).bound_nets.at(net->udata).second;
|
||||||
|
if (p == PipId())
|
||||||
|
break;
|
||||||
|
cursor2 = ctx->getPipSrcWire(p);
|
||||||
|
t.backwards_pip[cursor2] = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
cpip = cwd.bound_nets.at(net->udata).second;
|
cpip = cwd.bound_nets.at(net->udata).second;
|
||||||
|
}
|
||||||
bool did_something = false;
|
bool did_something = false;
|
||||||
for (auto uh : ctx->getPipsUphill(cursor)) {
|
for (auto uh : ctx->getPipsUphill(cursor)) {
|
||||||
did_something = true;
|
did_something = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user