aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-08-03 18:31:54 +0200
committerDavid Shah <davey1576@gmail.com>2018-08-03 18:31:54 +0200
commitb937e6defea82c12227b6e00cf19e370b237ea8b (patch)
tree7940016c021225ad7eb7c20d00dd69cb1513fe6c
parent4a751d9aafa0de4f64960bf7e9f16400319259ef (diff)
downloadnextpnr-b937e6defea82c12227b6e00cf19e370b237ea8b.tar.gz
nextpnr-b937e6defea82c12227b6e00cf19e370b237ea8b.tar.bz2
nextpnr-b937e6defea82c12227b6e00cf19e370b237ea8b.zip
Add constraint weight as a command line option
Signed-off-by: David Shah <davey1576@gmail.com>
-rw-r--r--common/placer1.cc9
-rw-r--r--common/placer1.h7
-rw-r--r--ecp5/arch.cc2
-rw-r--r--generic/arch.cc2
-rw-r--r--ice40/arch.cc6
-rw-r--r--ice40/arch.h3
-rw-r--r--ice40/main.cc6
7 files changed, 27 insertions, 8 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
diff --git a/ecp5/arch.cc b/ecp5/arch.cc
index 262f43fe..377b8665 100644
--- a/ecp5/arch.cc
+++ b/ecp5/arch.cc
@@ -426,7 +426,7 @@ delay_t Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, de
// -----------------------------------------------------------------------
-bool Arch::place() { return placer1(getCtx()); }
+bool Arch::place() { return placer1(getCtx(), Placer1Cfg()); }
bool Arch::route()
{
diff --git a/generic/arch.cc b/generic/arch.cc
index 1c22dbf7..f9133f9e 100644
--- a/generic/arch.cc
+++ b/generic/arch.cc
@@ -412,7 +412,7 @@ delay_t Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, de
// ---------------------------------------------------------------
-bool Arch::place() { return placer1(getCtx()); }
+bool Arch::place() { return placer1(getCtx()\, Placer1Cfg()); }
bool Arch::route() { return router1(getCtx(), Router1Cfg()); }
diff --git a/ice40/arch.cc b/ice40/arch.cc
index eff1d9b9..84856402 100644
--- a/ice40/arch.cc
+++ b/ice40/arch.cc
@@ -659,7 +659,11 @@ delay_t Arch::getBudgetOverride(const NetInfo *net_info, const PortRef &sink, de
// -----------------------------------------------------------------------
-bool Arch::place() { return placer1(getCtx()); }
+bool Arch::place() {
+ Placer1Cfg cfg;
+ cfg.constraintWeight = placer_constraintWeight;
+ return placer1(getCtx(), cfg);
+}
bool Arch::route()
{
diff --git a/ice40/arch.h b/ice40/arch.h
index 98361132..b9b4f3c5 100644
--- a/ice40/arch.h
+++ b/ice40/arch.h
@@ -797,6 +797,9 @@ struct Arch : BaseCtx
}
NPNR_ASSERT_FALSE("Expected PLL pin to share an output with an SB_IO D_IN_{0,1}");
}
+
+ float placer_constraintWeight = 10;
+
};
NEXTPNR_NAMESPACE_END
diff --git a/ice40/main.cc b/ice40/main.cc
index 41d264ad..60f5b444 100644
--- a/ice40/main.cc
+++ b/ice40/main.cc
@@ -106,6 +106,8 @@ int main(int argc, char *argv[])
options.add_options()("seed", po::value<int>(), "seed value for random number generator");
options.add_options()("slack_redist_iter", po::value<int>(),
"number of iterations between slack redistribution");
+ options.add_options()("cstrweight", po::value<float>(), "placer weighting for relative constraint satisfaction");
+
options.add_options()("version,V", "show version");
options.add_options()("tmfuzz", "run path delay estimate fuzzer");
options.add_options()("test", "check architecture database integrity");
@@ -318,6 +320,10 @@ int main(int argc, char *argv[])
ctx->slack_redist_iter = vm["slack_redist_iter"].as<int>();
}
+ if (vm.count("cstrweight")) {
+ ctx->placer_constraintWeight = vm["cstrweight"].as<float>();
+ }
+
if (vm.count("svg")) {
std::cout << "<svg xmlns=\"http://www.w3.org/2000/svg\" "
"xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n";