From 456688a49d30960f14234bb890fbeaa0bf1de3fc Mon Sep 17 00:00:00 2001 From: Balint Cristian Date: Thu, 18 Feb 2021 00:06:23 +0200 Subject: Expose ice40 arch placer-heap internal parameters. --- common/command.cc | 28 ++++++++++++++++++++++++++++ common/placer_heap.cc | 8 ++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/common/command.cc b/common/command.cc index d3e8af8d..2303ad91 100644 --- a/common/command.cc +++ b/common/command.cc @@ -161,6 +161,11 @@ po::options_description CommandHandler::getGeneralOptions() general.add_options()("no-print-critical-path-source", "disable printing of the line numbers associated with each net in the critical path"); + general.add_options()("placer-heap-alpha", po::value(), "placer heap alpha value (float, default: 0.1)"); + general.add_options()("placer-heap-beta", po::value(), "placer heap beta value (float, default: 0.9)"); + general.add_options()("placer-heap-critexp", po::value(), "placer heap criticality exponent (int, default: 2)"); + general.add_options()("placer-heap-timingweight", po::value(), "placer heap timing weight (int, default: 10)"); + general.add_options()("placed-svg", po::value(), "write render of placement to SVG file"); general.add_options()("routed-svg", po::value(), "write render of routing to SVG file"); @@ -258,6 +263,18 @@ void CommandHandler::setupContext(Context *ctx) if (vm.count("no-tmdriv")) ctx->settings[ctx->id("timing_driven")] = false; + if (vm.count("placer-heap-alpha")) + ctx->settings[ctx->id("placerHeap/alpha")] = std::to_string(vm["placer-heap-alpha"].as()); + + if (vm.count("placer-heap-beta")) + ctx->settings[ctx->id("placerHeap/beta")] = std::to_string(vm["placer-heap-beta"].as()); + + if (vm.count("placer-heap-critexp")) + ctx->settings[ctx->id("placerHeap/criticalityExponent")] = std::to_string(vm["placer-heap-critexp"].as()); + + if (vm.count("placer-heap-timingweight")) + ctx->settings[ctx->id("placerHeap/timingWeight")] = std::to_string(vm["placer-heap-timingweight"].as()); + // Setting default values if (ctx->settings.find(ctx->id("target_freq")) == ctx->settings.end()) ctx->settings[ctx->id("target_freq")] = std::to_string(12e6); @@ -275,6 +292,15 @@ void CommandHandler::setupContext(Context *ctx) ctx->settings[ctx->id("arch.name")] = std::string(ctx->archId().c_str(ctx)); ctx->settings[ctx->id("arch.type")] = std::string(ctx->archArgsToId(ctx->archArgs()).c_str(ctx)); ctx->settings[ctx->id("seed")] = ctx->rngstate; + + if (ctx->settings.find(ctx->id("placerHeap/alpha")) == ctx->settings.end()) + ctx->settings[ctx->id("placerHeap/alpha")] = std::to_string(0.1); + if (ctx->settings.find(ctx->id("placerHeap/beta")) == ctx->settings.end()) + ctx->settings[ctx->id("placerHeap/beta")] = std::to_string(0.9); + if (ctx->settings.find(ctx->id("placerHeap/criticalityExponent")) == ctx->settings.end()) + ctx->settings[ctx->id("placerHeap/criticalityExponent")] = std::to_string(2); + if (ctx->settings.find(ctx->id("placerHeap/timingWeight")) == ctx->settings.end()) + ctx->settings[ctx->id("placerHeap/timingWeight")] = std::to_string(10); } int CommandHandler::executeMain(std::unique_ptr ctx) @@ -421,6 +447,8 @@ int CommandHandler::exec() setupArchContext(ctx.get()); int rc = executeMain(std::move(ctx)); printFooter(); + log_break(); + log_info("Program finished normally.\n"); return rc; } catch (log_execution_error_exception) { printFooter(); diff --git a/common/placer_heap.cc b/common/placer_heap.cc index 7d529401..92caaf09 100644 --- a/common/placer_heap.cc +++ b/common/placer_heap.cc @@ -1764,10 +1764,10 @@ bool placer_heap(Context *ctx, PlacerHeapCfg cfg) { return HeAPPlacer(ctx, cfg). PlacerHeapCfg::PlacerHeapCfg(Context *ctx) { - alpha = ctx->setting("placerHeap/alpha", 0.1); - beta = ctx->setting("placerHeap/beta", 0.9); - criticalityExponent = ctx->setting("placerHeap/criticalityExponent", 2); - timingWeight = ctx->setting("placerHeap/timingWeight", 10); + alpha = ctx->setting("placerHeap/alpha"); + beta = ctx->setting("placerHeap/beta"); + criticalityExponent = ctx->setting("placerHeap/criticalityExponent"); + timingWeight = ctx->setting("placerHeap/timingWeight"); timing_driven = ctx->setting("timing_driven"); solverTolerance = 1e-5; placeAllAtOnce = false; -- cgit v1.2.3