diff options
Diffstat (limited to 'ecp5/arch_place.cc')
-rw-r--r-- | ecp5/arch_place.cc | 36 |
1 files changed, 6 insertions, 30 deletions
diff --git a/ecp5/arch_place.cc b/ecp5/arch_place.cc index 668b3141..5565a01c 100644 --- a/ecp5/arch_place.cc +++ b/ecp5/arch_place.cc @@ -82,38 +82,14 @@ bool Arch::isBelLocationValid(BelId bel) const return slices_compatible(bel_cells); } else { CellInfo *cell = getBoundBelCell(bel); - if (cell == nullptr) + if (cell == nullptr) { + return true; + } else if (cell->type == id_DCUA || cell->type == id_EXTREFB || cell->type == id_PCSCLKDIV) { + return args.type != ArchArgs::LFE5U_25F && args.type != ArchArgs::LFE5U_45F && + args.type != ArchArgs::LFE5U_85F; + } else { return true; - else - return isValidBelForCell(cell, bel); - } -} - -bool Arch::isValidBelForCell(CellInfo *cell, BelId bel) const -{ - if (cell->type == id_TRELLIS_SLICE) { - NPNR_ASSERT(getBelType(bel) == id_TRELLIS_SLICE); - - 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) { - bel_cells.push_back(cell_other); - } } - - bel_cells.push_back(cell); - return slices_compatible(bel_cells); - } else if (cell->type == id_DCUA || cell->type == id_EXTREFB || cell->type == id_PCSCLKDIV) { - return args.type != ArchArgs::LFE5U_25F && args.type != ArchArgs::LFE5U_45F && args.type != ArchArgs::LFE5U_85F; - } else { - // other checks - return true; } } |