diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2019-06-14 08:13:59 +0200 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2019-06-14 08:13:59 +0200 |
commit | c6057abd00fc4d1538f066324188bd04d6b4cfc7 (patch) | |
tree | 3db292c4e4888a31f90c216d81fc8d8782db11e7 /ice40 | |
parent | 03dff10cbde4c55e4ac9b53a01ba84f4bdac169b (diff) | |
download | nextpnr-c6057abd00fc4d1538f066324188bd04d6b4cfc7.tar.gz nextpnr-c6057abd00fc4d1538f066324188bd04d6b4cfc7.tar.bz2 nextpnr-c6057abd00fc4d1538f066324188bd04d6b4cfc7.zip |
restore context from json
Diffstat (limited to 'ice40')
-rw-r--r-- | ice40/main.cc | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/ice40/main.cc b/ice40/main.cc index 00d7fe3e..ce4b5532 100644 --- a/ice40/main.cc +++ b/ice40/main.cc @@ -153,6 +153,49 @@ std::unique_ptr<Context> Ice40CommandHandler::createContext(std::unordered_map<s chipArgs.package = "sg48"; } + if (vm.count("package")) + chipArgs.package = vm["package"].as<std::string>(); + + if (values.find("arch.name")!=values.end()) { + std::string arch_name = values["arch.name"].str; + if (arch_name != "ice40") + 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; + if (chipArgs.type != ArchArgs::NONE) + log_error("Overriding architecture is unsuported.\n"); + + if (arch_type == "lp384") { + chipArgs.type = ArchArgs::LP384; + } + if (arch_type == "lp1k") { + chipArgs.type = ArchArgs::LP1K; + } + if (arch_type == "lp8k") { + chipArgs.type = ArchArgs::LP8K; + } + if (arch_type == "hx1k") { + chipArgs.type = ArchArgs::HX1K; + } + if (arch_type == "hx8k") { + chipArgs.type = ArchArgs::HX8K; + } + if (arch_type == "up5k") { + chipArgs.type = ArchArgs::UP5K; + } + if (arch_type == "u4k") { + chipArgs.type = ArchArgs::U4K; + } + if (chipArgs.type == ArchArgs::NONE) + log_error("Unsuported FPGA type '%s'.\n",arch_type.c_str()); + } + if (values.find("arch.package")!=values.end()) { + if (vm.count("package")) + log_error("Overriding architecture is unsuported.\n"); + chipArgs.package = values["arch.package"].str; + } + if (chipArgs.type == ArchArgs::NONE) { chipArgs.type = ArchArgs::HX1K; chipArgs.package = "tq144"; @@ -163,9 +206,6 @@ std::unique_ptr<Context> Ice40CommandHandler::createContext(std::unordered_map<s } #endif - if (vm.count("package")) - chipArgs.package = vm["package"].as<std::string>(); - auto ctx = std::unique_ptr<Context>(new Context(chipArgs)); ctx->settings[ctx->id("arch.package")] = ctx->archArgs().package; if (vm.count("promote-logic")) |