From 3d5dcda12c80175f5bfb2c2615de9cb5fadacb90 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Fri, 3 Aug 2018 19:53:32 -0700 Subject: [PATCH] Auto frequency only if --freq 0 is set --- common/nextpnr.h | 2 +- common/timing.cc | 12 ++++++------ ecp5/main.cc | 6 +----- ice40/main.cc | 17 ++++++++++------- 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() * 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(); + if (vm.count("freq") && vm["freq"].as() == 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() * 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(); + if (freq > 0) + ctx->target_freq = freq * 1e6; } ctx->timing_driven = true;