diff options
| author | Eddie Hung <eddieh@ece.ubc.ca> | 2018-11-14 17:58:16 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-11-14 17:58:16 -0800 |
| commit | d3b2065cd7d2470a132c055f4bd88d270e1e8fe1 (patch) | |
| tree | 7b014d137f73fb51a15e0faba7e73f1426f4996c /common/placer1.cc | |
| parent | 42d1990784b95710e16d3892399262877ab18502 (diff) | |
| parent | df2622d30014d6c7fc0dfc3b440688ab22331ba2 (diff) | |
| download | nextpnr-d3b2065cd7d2470a132c055f4bd88d270e1e8fe1.tar.gz nextpnr-d3b2065cd7d2470a132c055f4bd88d270e1e8fe1.tar.bz2 nextpnr-d3b2065cd7d2470a132c055f4bd88d270e1e8fe1.zip | |
Merge pull request #114 from YosysHQ/fix_legalise
Fix legalise
Diffstat (limited to 'common/placer1.cc')
| -rw-r--r-- | common/placer1.cc | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/common/placer1.cc b/common/placer1.cc index 0d7c0701..0fd9a227 100644 --- a/common/placer1.cc +++ b/common/placer1.cc @@ -244,21 +244,23 @@ class SAPlacer } // Once cooled below legalise threshold, run legalisation and start requiring // legal moves only - if (temp < legalise_temp && !require_legal) { - legalise_relative_constraints(ctx); - require_legal = true; - autoplaced.clear(); - for (auto cell : sorted(ctx->cells)) { - if (cell.second->belStrength < STRENGTH_STRONG) - autoplaced.push_back(cell.second); - } - temp = post_legalise_temp; - diameter *= post_legalise_dia_scale; - ctx->shuffle(autoplaced); + if (temp < legalise_temp && require_legal) { + if (legalise_relative_constraints(ctx)) { + // Only increase temperature if something was moved + autoplaced.clear(); + for (auto cell : sorted(ctx->cells)) { + if (cell.second->belStrength < STRENGTH_STRONG) + autoplaced.push_back(cell.second); + } + temp = post_legalise_temp; + diameter *= post_legalise_dia_scale; + ctx->shuffle(autoplaced); - // Legalisation is a big change so force a slack redistribution here - if (ctx->slack_redist_iter > 0) - assign_budget(ctx, true /* quiet */); + // Legalisation is a big change so force a slack redistribution here + if (ctx->slack_redist_iter > 0) + assign_budget(ctx, true /* quiet */); + } + require_legal = false; } else if (ctx->slack_redist_iter > 0 && iter % ctx->slack_redist_iter == 0) { assign_budget(ctx, true /* quiet */); } @@ -486,7 +488,7 @@ class SAPlacer std::unordered_map<IdString, int> bel_types; std::vector<std::vector<std::vector<std::vector<BelId>>>> fast_bels; std::unordered_set<BelId> locked_bels; - bool require_legal = false; + bool require_legal = true; const float legalise_temp = 1; const float post_legalise_temp = 10; const float post_legalise_dia_scale = 1.5; |
