aboutsummaryrefslogtreecommitdiffstats
path: root/ice40/main.cc
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2019-06-14 08:13:59 +0200
committerMiodrag Milanovic <mmicko@gmail.com>2019-06-14 08:13:59 +0200
commitc6057abd00fc4d1538f066324188bd04d6b4cfc7 (patch)
tree3db292c4e4888a31f90c216d81fc8d8782db11e7 /ice40/main.cc
parent03dff10cbde4c55e4ac9b53a01ba84f4bdac169b (diff)
downloadnextpnr-c6057abd00fc4d1538f066324188bd04d6b4cfc7.tar.gz
nextpnr-c6057abd00fc4d1538f066324188bd04d6b4cfc7.tar.bz2
nextpnr-c6057abd00fc4d1538f066324188bd04d6b4cfc7.zip
restore context from json
Diffstat (limited to 'ice40/main.cc')
-rw-r--r--ice40/main.cc46
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"))