diff options
author | gatecat <gatecat@ds0.me> | 2021-03-09 08:48:12 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-09 08:48:12 +0000 |
commit | 326b34887cdf82dc834382f4bf35d120bd4173dd (patch) | |
tree | bb346955c661bf96b51e309a3f1030c27ac1bb07 /common/placer1.cc | |
parent | 0f17e80eef2a4c0e417b65efa559481f83831f00 (diff) | |
parent | 8a4bf3a7805080db2c8f2e797a0f12aad7c99f5d (diff) | |
download | nextpnr-326b34887cdf82dc834382f4bf35d120bd4173dd.tar.gz nextpnr-326b34887cdf82dc834382f4bf35d120bd4173dd.tar.bz2 nextpnr-326b34887cdf82dc834382f4bf35d120bd4173dd.zip |
Merge pull request #609 from YosysHQ/gatecat/sta-v2
Use new timing engine for criticality
Diffstat (limited to 'common/placer1.cc')
-rw-r--r-- | common/placer1.cc | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/common/placer1.cc b/common/placer1.cc index d57a841a..c8b0d385 100644 --- a/common/placer1.cc +++ b/common/placer1.cc @@ -78,7 +78,7 @@ class SAPlacer public: SAPlacer(Context *ctx, Placer1Cfg cfg) - : ctx(ctx), fast_bels(ctx, /*check_bel_available=*/false, cfg.minBelsForGridPick), cfg(cfg) + : ctx(ctx), fast_bels(ctx, /*check_bel_available=*/false, cfg.minBelsForGridPick), cfg(cfg), tmg(ctx) { for (auto bel : ctx->getBels()) { Loc loc = ctx->getBelLocation(bel); @@ -241,8 +241,9 @@ class SAPlacer auto saplace_start = std::chrono::high_resolution_clock::now(); // Invoke timing analysis to obtain criticalities + tmg.setup_only = true; if (!cfg.budgetBased) - get_criticalities(ctx, &net_crit); + tmg.setup(); // Calculate costs after initial placement setup_costs(); @@ -379,7 +380,7 @@ class SAPlacer // Invoke timing analysis to obtain criticalities if (!cfg.budgetBased && cfg.timing_driven) - get_criticalities(ctx, &net_crit); + tmg.run(); // Need to rebuild costs after criticalities change setup_costs(); // Reset incremental bounds @@ -836,11 +837,9 @@ class SAPlacer double delay = ctx->getDelayNS(ctx->predictDelay(net, net->users.at(user))); return std::min(10.0, std::exp(delay - ctx->getDelayNS(net->users.at(user).budget) / 10)); } else { - auto crit = net_crit.find(net->name); - if (crit == net_crit.end() || crit->second.criticality.empty()) - return 0; + float crit = tmg.get_criticality(CellPortKey(net->users.at(user))); double delay = ctx->getDelayNS(ctx->predictDelay(net, net->users.at(user))); - return delay * std::pow(crit->second.criticality.at(user), crit_exp); + return delay * std::pow(crit, crit_exp); } } @@ -1216,9 +1215,6 @@ class SAPlacer wirelen_t last_wirelen_cost, curr_wirelen_cost; double last_timing_cost, curr_timing_cost; - // Criticality data from timing analysis - NetCriticalityMap net_crit; - Context *ctx; float temp = 10; float crit_exp = 8; @@ -1235,6 +1231,8 @@ class SAPlacer bool require_legal = true; const int legalise_dia = 4; Placer1Cfg cfg; + + TimingAnalyser tmg; }; Placer1Cfg::Placer1Cfg(Context *ctx) |