aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5/arch_place.cc
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2018-11-16 17:36:34 +0000
committerDavid Shah <dave@ds0.me>2018-11-16 17:36:34 +0000
commit458aa20161504c06dbfc282be3dd7717a575a31e (patch)
tree03ec70d5c31c4b46aacf8df8edf287e39f9d2150 /ecp5/arch_place.cc
parent3ae8b86003eb6b378c10ddd0f602c40abe28552b (diff)
downloadnextpnr-458aa20161504c06dbfc282be3dd7717a575a31e.tar.gz
nextpnr-458aa20161504c06dbfc282be3dd7717a575a31e.tar.bz2
nextpnr-458aa20161504c06dbfc282be3dd7717a575a31e.zip
ecp5: More optimal LUT6 placement
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ecp5/arch_place.cc')
-rw-r--r--ecp5/arch_place.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/ecp5/arch_place.cc b/ecp5/arch_place.cc
index 41f87cb8..ff70bb5a 100644
--- a/ecp5/arch_place.cc
+++ b/ecp5/arch_place.cc
@@ -75,6 +75,8 @@ bool Arch::isBelLocationValid(BelId bel) const
bel_cells.push_back(cell_other);
}
}
+ if (getBoundBelCell(bel) != nullptr && getBoundBelCell(bel)->sliceInfo.has_l6mux && ((bel_loc.z % 2) == 1))
+ return false;
return slicesCompatible(bel_cells);
} else {
CellInfo *cell = getBoundBelCell(bel);
@@ -92,6 +94,10 @@ bool Arch::isValidBelForCell(CellInfo *cell, BelId bel) const
std::vector<const CellInfo *> bel_cells;
Loc bel_loc = getBelLocation(bel);
+
+ if (cell->sliceInfo.has_l6mux && ((bel_loc.z % 2) == 1))
+ return false;
+
for (auto bel_other : getBelsByTile(bel_loc.x, bel_loc.y)) {
CellInfo *cell_other = getBoundBelCell(bel_other);
if (cell_other != nullptr && bel_other != bel) {