Merge pull request #655 from YosysHQ/gatecat/alt-placer-fix
interchange: Fix illegal placements
This commit is contained in:
commit
7a9082e698
@ -552,7 +552,9 @@ class SAPlacer
|
|||||||
add_move_cell(moveChange, other_cell, newBel);
|
add_move_cell(moveChange, other_cell, newBel);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ctx->isBelLocationValid(newBel) || ((other_cell != nullptr && !ctx->isBelLocationValid(oldBel)))) {
|
// Always check both the new and old locations; as in some cases of dedicated routing ripping up a cell can deny
|
||||||
|
// use of a dedicated path and thus make a site illegal
|
||||||
|
if (!ctx->isBelLocationValid(newBel) || !ctx->isBelLocationValid(oldBel)) {
|
||||||
ctx->unbindBel(newBel);
|
ctx->unbindBel(newBel);
|
||||||
if (other_cell != nullptr)
|
if (other_cell != nullptr)
|
||||||
ctx->unbindBel(oldBel);
|
ctx->unbindBel(oldBel);
|
||||||
|
@ -808,9 +808,7 @@ struct Arch : ArchAPI<ArchRanges>
|
|||||||
}
|
}
|
||||||
const TileStatus &tile_status = iter->second;
|
const TileStatus &tile_status = iter->second;
|
||||||
const CellInfo *cell = tile_status.boundcells[bel.index];
|
const CellInfo *cell = tile_status.boundcells[bel.index];
|
||||||
if (cell == nullptr) {
|
if (cell != nullptr) {
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
if (!dedicated_interconnect.isBelLocationValid(bel, cell)) {
|
if (!dedicated_interconnect.isBelLocationValid(bel, cell)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -825,11 +823,12 @@ struct Arch : ArchAPI<ArchRanges>
|
|||||||
if (!is_cell_valid_constraints(cell, tile_status, explain_constraints)) {
|
if (!is_cell_valid_constraints(cell, tile_status, explain_constraints)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
// Still check site status if cell is nullptr; as other bels in the site could be illegal (for example when
|
||||||
|
// dedicated paths can no longer be used after ripping up a cell)
|
||||||
auto &bel_data = bel_info(chip_info, bel);
|
auto &bel_data = bel_info(chip_info, bel);
|
||||||
return get_site_status(tile_status, bel_data).checkSiteRouting(getCtx(), tile_status);
|
return get_site_status(tile_status, bel_data).checkSiteRouting(getCtx(), tile_status);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
IdString get_bel_tiletype(BelId bel) const { return IdString(loc_info(chip_info, bel).name); }
|
IdString get_bel_tiletype(BelId bel) const { return IdString(loc_info(chip_info, bel).name); }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user