aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/nextpnr.h2
-rw-r--r--common/timing.cc12
-rw-r--r--ecp5/main.cc6
-rw-r--r--ice40/main.cc17
4 files changed, 18 insertions, 19 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h
index f01173e6..c0d1a918 100644
--- a/common/nextpnr.h
+++ b/common/nextpnr.h
@@ -472,7 +472,7 @@ struct Context : Arch, DeterministicRNG
bool force = false;
bool timing_driven = true;
float target_freq = 12e6;
- bool user_freq = false;
+ bool auto_freq = false;
int slack_redist_iter = 0;
Context(ArchArgs args) : Arch(args) {}
diff --git a/common/timing.cc b/common/timing.cc
index 9777ab7d..f422ee91 100644
--- a/common/timing.cc
+++ b/common/timing.cc
@@ -125,7 +125,7 @@ void assign_budget(Context *ctx, bool quiet)
{
if (!quiet) {
log_break();
- log_info("Annotating ports with timing budgets\n");
+ log_info("Annotating ports with timing budgets for target frequency %.2f MHz\n", ctx->target_freq/1e6);
}
// Clear delays to a very high value first
@@ -142,7 +142,7 @@ void assign_budget(Context *ctx, bool quiet)
for (auto &net : ctx->nets) {
for (auto &user : net.second->users) {
// Post-update check
- if (ctx->user_freq && user.budget < 0)
+ if (!ctx->auto_freq && user.budget < 0)
log_warning("port %s.%s, connected to net '%s', has negative "
"timing budget of %fns\n",
user.cell->name.c_str(ctx), user.port.c_str(ctx), net.first.c_str(ctx),
@@ -159,11 +159,11 @@ void assign_budget(Context *ctx, bool quiet)
// For slack redistribution, if user has not specified a frequency
// dynamically adjust the target frequency to be the currently
// achieved maximum
- if (!ctx->user_freq && ctx->slack_redist_iter > 0) {
+ if (ctx->auto_freq && ctx->slack_redist_iter > 0) {
ctx->target_freq = 1e12 / (default_slack - min_slack);
- /*if (ctx->verbose)*/
- log_info("minimum slack for this assign = %d, target Fmax for next update = %.2f MHz\n", min_slack,
- ctx->target_freq / 1e6);
+ if (ctx->verbose)
+ log_info("minimum slack for this assign = %d, target Fmax for next update = %.2f MHz\n", min_slack,
+ ctx->target_freq / 1e6);
}
if (!quiet)
diff --git a/ecp5/main.cc b/ecp5/main.cc
index f40a5e61..dac7a635 100644
--- a/ecp5/main.cc
+++ b/ecp5/main.cc
@@ -162,12 +162,8 @@ int main(int argc, char *argv[])
if (!ctx->pack() && !ctx->force)
log_error("Packing design failed.\n");
- if (vm.count("freq")) {
+ if (vm.count("freq"))
ctx->target_freq = vm["freq"].as<double>() * 1e6;
- ctx->user_freq = true;
- } else {
- log_warning("Target frequency not specified. Will optimise for max frequency.\n");
- }
assign_budget(ctx.get());
ctx->check();
print_utilisation(ctx.get());
diff --git a/ice40/main.cc b/ice40/main.cc
index 4a2e9532..2d8e3099 100644
--- a/ice40/main.cc
+++ b/ice40/main.cc
@@ -317,6 +317,13 @@ int main(int argc, char *argv[])
if (vm.count("slack_redist_iter")) {
ctx->slack_redist_iter = vm["slack_redist_iter"].as<int>();
+ if (vm.count("freq") && vm["freq"].as<double>() == 0) {
+ ctx->auto_freq = true;
+#ifndef NO_GUI
+ if (!vm.count("gui"))
+#endif
+ log_warning("Target frequency not specified. Will optimise for max frequency.\n");
+ }
}
if (vm.count("svg")) {
@@ -379,13 +386,9 @@ int main(int argc, char *argv[])
}
if (vm.count("freq")) {
- ctx->target_freq = vm["freq"].as<double>() * 1e6;
- ctx->user_freq = true;
- } else {
-#ifndef NO_GUI
- if (!vm.count("gui"))
-#endif
- log_warning("Target frequency not specified. Will optimise for max frequency.\n");
+ auto freq = vm["freq"].as<double>();
+ if (freq > 0)
+ ctx->target_freq = freq * 1e6;
}
ctx->timing_driven = true;