HeAP: Legaliser fixes

Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
David Shah 2019-01-30 19:28:15 +00:00
parent 352f15e96b
commit 6cf001d355

View File

@ -807,7 +807,7 @@ class HeAPPlacer
if (ci->constr_children.empty() && !ci->constr_abs_z) { if (ci->constr_children.empty() && !ci->constr_abs_z) {
for (auto sz : fb.at(nx).at(ny)) { for (auto sz : fb.at(nx).at(ny)) {
if (ctx->checkBelAvail(sz) || radius > ripup_radius) { if (ctx->checkBelAvail(sz) || (radius > ripup_radius || ctx->rng(20000) < 10)) {
CellInfo *bound = ctx->getBoundBelCell(sz); CellInfo *bound = ctx->getBoundBelCell(sz);
if (bound != nullptr) { if (bound != nullptr) {
if (bound->constr_parent != nullptr || !bound->constr_children.empty() || if (bound->constr_parent != nullptr || !bound->constr_children.empty() ||
@ -869,7 +869,7 @@ class HeAPPlacer
visit.pop(); visit.pop();
BelId target = ctx->getBelByLocation(ploc); BelId target = ctx->getBelByLocation(ploc);
CellInfo *bound; CellInfo *bound;
if (target == BelId()) if (target == BelId() || ctx->getBelType(target) != vc->type)
goto fail; goto fail;
bound = ctx->getBoundBelCell(target); bound = ctx->getBoundBelCell(target);
// Chains cannot overlap // Chains cannot overlap