aboutsummaryrefslogtreecommitdiffstats
path: root/common/router1.cc
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2020-02-03 13:55:07 +0000
committerGitHub <noreply@github.com>2020-02-03 13:55:07 +0000
commitb4d029a55cd67bafcc9c364d609208a818227204 (patch)
treeba83fbf0d6c4b1e3b7644c921960929a23f8735a /common/router1.cc
parentaed93a9390dd909111ab4526e7f3df8d24a2ee0a (diff)
parentf1dbb0c4f2242862dd365da8865e059d2c05a310 (diff)
downloadnextpnr-b4d029a55cd67bafcc9c364d609208a818227204.tar.gz
nextpnr-b4d029a55cd67bafcc9c364d609208a818227204.tar.bz2
nextpnr-b4d029a55cd67bafcc9c364d609208a818227204.zip
Merge pull request #385 from YosysHQ/router1-arc-fixes
Fixes for partial reconfig demo
Diffstat (limited to 'common/router1.cc')
-rw-r--r--common/router1.cc26
1 files changed, 25 insertions, 1 deletions
diff --git a/common/router1.cc b/common/router1.cc
index a89d870d..ef788fc2 100644
--- a/common/router1.cc
+++ b/common/router1.cc
@@ -400,7 +400,7 @@ struct Router1
dst_to_arc[dst_wire] = arc;
- if (net_info->wires.count(src_wire) == 0) {
+ if (net_info->wires.count(dst_wire) == 0) {
arc_queue_insert(arc, src_wire, dst_wire);
continue;
}
@@ -527,6 +527,18 @@ struct Router1
conflictWireNet = ctx->getConflictingWireNet(next_wire);
if (conflictWireNet == nullptr)
continue;
+ else {
+ if (conflictWireNet->wires.count(next_wire) &&
+ conflictWireNet->wires.at(next_wire).strength > STRENGTH_STRONG)
+ continue;
+ }
+ } else {
+ NetInfo *conflicting = ctx->getBoundWireNet(conflictWireWire);
+ if (conflicting != nullptr) {
+ if (conflicting->wires.count(conflictWireWire) &&
+ conflicting->wires.at(conflictWireWire).strength > STRENGTH_STRONG)
+ continue;
+ }
}
}
@@ -538,6 +550,18 @@ struct Router1
conflictPipNet = ctx->getConflictingPipNet(pip);
if (conflictPipNet == nullptr)
continue;
+ else {
+ if (conflictPipNet->wires.count(next_wire) &&
+ conflictPipNet->wires.at(next_wire).strength > STRENGTH_STRONG)
+ continue;
+ }
+ } else {
+ NetInfo *conflicting = ctx->getBoundWireNet(conflictPipWire);
+ if (conflicting != nullptr) {
+ if (conflicting->wires.count(conflictPipWire) &&
+ conflicting->wires.at(conflictPipWire).strength > STRENGTH_STRONG)
+ continue;
+ }
}
}