diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/placer1.cc | 9 | ||||
-rw-r--r-- | common/placer1.h | 7 |
2 files changed, 11 insertions, 5 deletions
diff --git a/common/placer1.cc b/common/placer1.cc index 6da8608a..37294dfd 100644 --- a/common/placer1.cc +++ b/common/placer1.cc @@ -46,7 +46,7 @@ NEXTPNR_NAMESPACE_BEGIN class SAPlacer { public: - SAPlacer(Context *ctx) : ctx(ctx) + SAPlacer(Context *ctx, Placer1Cfg cfg) : ctx(ctx), cfg(cfg) { int num_bel_types = 0; for (auto bel : ctx->getBels()) { @@ -395,7 +395,7 @@ private: if (other != IdString()) new_dist += get_constraints_distance(ctx, other_cell); delta = new_metric - curr_metric; - delta += (10 / temp) * (new_dist - old_dist); + delta += (cfg.constraintWeight / temp) * (new_dist - old_dist); n_move++; // SA acceptance criterea if (delta < 0 || (temp > 1e-6 && (ctx->rng() / float(0x3fffffff)) <= std::exp(-delta / temp))) { @@ -458,12 +458,13 @@ private: const float legalise_temp = 1; const float post_legalise_temp = 10; const float post_legalise_dia_scale = 1.5; + Placer1Cfg cfg; }; -bool placer1(Context *ctx) +bool placer1(Context *ctx, Placer1Cfg cfg) { try { - SAPlacer placer(ctx); + SAPlacer placer(ctx, cfg); placer.place(); log_info("Checksum: 0x%08x\n", ctx->checksum()); #ifndef NDEBUG diff --git a/common/placer1.h b/common/placer1.h index 477fae56..d8f64b84 100644 --- a/common/placer1.h +++ b/common/placer1.h @@ -23,7 +23,12 @@ NEXTPNR_NAMESPACE_BEGIN -extern bool placer1(Context *ctx); +struct Placer1Cfg +{ + float constraintWeight = 10; +}; + +extern bool placer1(Context *ctx, Placer1Cfg cfg); NEXTPNR_NAMESPACE_END |