aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2018-10-11 11:50:56 +0100
committerDavid Shah <dave@ds0.me>2018-10-11 11:50:56 +0100
commit228cbf77d0e6573883c03331b5ce6dfecee65c93 (patch)
treee0db6648e7b907614c394394ca5c342620eaac26 /common
parent848ce6d41c270fd44c548fdc367ab191710100c0 (diff)
downloadnextpnr-228cbf77d0e6573883c03331b5ce6dfecee65c93.tar.gz
nextpnr-228cbf77d0e6573883c03331b5ce6dfecee65c93.tar.bz2
nextpnr-228cbf77d0e6573883c03331b5ce6dfecee65c93.zip
placer: Fix conflicts during constraint legalisation
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'common')
-rw-r--r--common/place_common.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/common/place_common.cc b/common/place_common.cc
index 120e5e00..da8ab37d 100644
--- a/common/place_common.cc
+++ b/common/place_common.cc
@@ -237,6 +237,12 @@ class ConstraintLegaliseWorker
return false;
}
}
+ // Don't place at tiles where any strongly bound Bels exist, as we might need to rip them up later
+ for (auto tilebel : ctx->getBelsByTile(loc.x, loc.y)) {
+ CellInfo *tcell = ctx->getBoundBelCell(tilebel);
+ if (tcell && tcell->belStrength >= STRENGTH_STRONG)
+ return false;
+ }
usedLocations.insert(loc);
for (auto child : cell->constr_children) {
IncreasingDiameterSearch xSearch, ySearch, zSearch;