HeAP: Make HeAP placer optional

A CMake option 'BUILD_HEAP' (default on) configures building of the
HeAP placer and the associated Eigen3 dependency.

Default for the iCE40 is SA placer, with --heap-placer to use HeAP

Default for the ECP5 is HeAP placer, as SA placer can take 1hr+ for
large ECP5 designs and HeAP tends to give better QoR. --sa-placer can
be used to use SA instead, and auto-fallback to SA if HeAP not built.

Signed-off-by: David Shah <[email protected]>
This commit is contained in:
David Shah
2019-03-22 10:31:54 +00:00
parent 1c824709e2
commit 7142db28a8
6 changed files with 72 additions and 16 deletions
+7 -1
View File
@@ -59,6 +59,8 @@ po::options_description ECP5CommandHandler::getArchOptions()
specific.add_options()("um5g-45k", "set device type to LFE5UM5G-45F");
specific.add_options()("um5g-85k", "set device type to LFE5UM5G-85F");
specific.add_options()("sa-placer", "use pure simulated annealing placer instead of HeAP analytic placer");
specific.add_options()("package", po::value<std::string>(), "select device package (defaults to CABGA381)");
specific.add_options()("speed", po::value<int>(), "select device speedgrade (6, 7 or 8)");
@@ -149,8 +151,12 @@ std::unique_ptr<Context> ECP5CommandHandler::createContext()
chipArgs.speed = ArchArgs::SPEED_6;
}
}
auto ctx = std::unique_ptr<Context>(new Context(chipArgs));
return std::unique_ptr<Context>(new Context(chipArgs));
if (vm.count("sa-placer"))
ctx->settings[ctx->id("sa_placer")] = "1";
return ctx;
}
void ECP5CommandHandler::customAfterLoad(Context *ctx)