aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5/main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ecp5/main.cc')
-rw-r--r--ecp5/main.cc23
1 files changed, 18 insertions, 5 deletions
diff --git a/ecp5/main.cc b/ecp5/main.cc
index 75126cea..24a98df4 100644
--- a/ecp5/main.cc
+++ b/ecp5/main.cc
@@ -71,6 +71,10 @@ po::options_description ECP5CommandHandler::getArchOptions()
specific.add_options()("lpf", po::value<std::vector<std::string>>(), "LPF pin constraint file(s)");
specific.add_options()("lpf-allow-unconstrained", "don't require LPF file(s) to constrain all IO");
+ specific.add_options()(
+ "out-of-context",
+ "disable IO buffer insertion and global promotion/routing, for building pre-routed blocks (experimental)");
+
return specific;
}
void ECP5CommandHandler::validate()
@@ -91,6 +95,10 @@ void ECP5CommandHandler::customBitstream(Context *ctx)
basecfg = vm["basecfg"].as<std::string>();
}
+ if (bool_or_default(ctx->settings, ctx->id("arch.ooc")) && vm.count("textcfg"))
+ log_error("bitstream generation is not available in out-of-context mode (use --write to create a post-PnR JSON "
+ "design)\n");
+
std::string textcfg;
if (vm.count("textcfg"))
textcfg = vm["textcfg"].as<std::string>();
@@ -162,12 +170,12 @@ std::unique_ptr<Context> ECP5CommandHandler::createContext(std::unordered_map<st
chipArgs.speed = ArchArgs::SPEED_6;
}
if (values.find("arch.name") != values.end()) {
- std::string arch_name = values["arch.name"].str;
+ std::string arch_name = values["arch.name"].as_string();
if (arch_name != "ecp5")
log_error("Unsuported architecture '%s'.\n", arch_name.c_str());
}
if (values.find("arch.type") != values.end()) {
- std::string arch_type = values["arch.type"].str;
+ std::string arch_type = values["arch.type"].as_string();
if (chipArgs.type != ArchArgs::NONE)
log_error("Overriding architecture is unsuported.\n");
@@ -196,10 +204,10 @@ std::unique_ptr<Context> ECP5CommandHandler::createContext(std::unordered_map<st
if (values.find("arch.package") != values.end()) {
if (vm.count("package"))
log_error("Overriding architecture is unsuported.\n");
- chipArgs.package = values["arch.package"].str;
+ chipArgs.package = values["arch.package"].as_string();
}
if (values.find("arch.speed") != values.end()) {
- std::string arch_speed = values["arch.speed"].str;
+ std::string arch_speed = values["arch.speed"].as_string();
if (arch_speed == "6")
chipArgs.speed = ArchArgs::SPEED_6;
else if (arch_speed == "7")
@@ -212,8 +220,11 @@ std::unique_ptr<Context> ECP5CommandHandler::createContext(std::unordered_map<st
if (chipArgs.type == ArchArgs::NONE)
chipArgs.type = ArchArgs::LFE5U_45F;
- if (chipArgs.package.empty())
+ if (chipArgs.package.empty()) {
chipArgs.package = "CABGA381";
+ log_warning("Use of default value for --package is deprecated. Please add '--package %s' to arguments.\n",
+ chipArgs.package.c_str());
+ }
if (chipArgs.type == ArchArgs::LFE5UM5G_25F || chipArgs.type == ArchArgs::LFE5UM5G_45F ||
chipArgs.type == ArchArgs::LFE5UM5G_85F) {
@@ -228,6 +239,8 @@ std::unique_ptr<Context> ECP5CommandHandler::createContext(std::unordered_map<st
ctx->settings[ctx->id(val.first)] = val.second;
ctx->settings[ctx->id("arch.package")] = ctx->archArgs().package;
ctx->settings[ctx->id("arch.speed")] = speedString(ctx->archArgs().speed);
+ if (vm.count("out-of-context"))
+ ctx->settings[ctx->id("arch.ooc")] = 1;
return ctx;
}