aboutsummaryrefslogtreecommitdiffstats
path: root/ice40
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2018-06-19 13:38:53 +0200
committerClifford Wolf <clifford@clifford.at>2018-06-19 14:10:42 +0200
commit5f37da970463b4197ddcdfeb94cfd7c7d6803682 (patch)
tree99ed6e7e7f8d4244f0ad1daf773314830e4194d8 /ice40
parent7abfd3677318152e1ff70d68a6664422b7efe5e6 (diff)
downloadnextpnr-5f37da970463b4197ddcdfeb94cfd7c7d6803682.tar.gz
nextpnr-5f37da970463b4197ddcdfeb94cfd7c7d6803682.tar.bz2
nextpnr-5f37da970463b4197ddcdfeb94cfd7c7d6803682.zip
Add Context::force and "nextpnr-ice40 --force"
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'ice40')
-rw-r--r--ice40/main.cc15
-rw-r--r--ice40/pack.cc3
-rw-r--r--ice40/pack.h2
3 files changed, 15 insertions, 5 deletions
diff --git a/ice40/main.cc b/ice40/main.cc
index 0ea3dc98..802a08b8 100644
--- a/ice40/main.cc
+++ b/ice40/main.cc
@@ -68,6 +68,7 @@ int main(int argc, char *argv[])
po::options_description options("Allowed options");
options.add_options()("help,h", "show help");
options.add_options()("verbose,v", "verbose output");
+ options.add_options()("force,f", "keep running after errors");
options.add_options()("gui", "start gui");
options.add_options()("svg", "dump SVG file");
options.add_options()("pack-only",
@@ -196,6 +197,10 @@ int main(int argc, char *argv[])
ctx.verbose = true;
}
+ if (vm.count("force")) {
+ ctx.force = true;
+ }
+
if (vm.count("seed")) {
ctx.rngseed(vm["seed"].as<int>());
}
@@ -225,12 +230,16 @@ int main(int argc, char *argv[])
apply_pcf(&ctx, pcf);
}
- pack_design(&ctx);
+ if (!pack_design(&ctx) && !ctx.force)
+ log_error("Packing design failed.\n");
+
print_utilisation(&ctx);
if (!vm.count("pack-only")) {
- place_design_sa(&ctx);
- route_design(&ctx);
+ if (!place_design_sa(&ctx) && !ctx.force)
+ log_error("Placing design failed.\n");
+ if (!route_design(&ctx) && !ctx.force)
+ log_error("Routing design failed.\n");
}
}
diff --git a/ice40/pack.cc b/ice40/pack.cc
index 1569fe01..60c86a43 100644
--- a/ice40/pack.cc
+++ b/ice40/pack.cc
@@ -390,7 +390,7 @@ static void promote_globals(Context *ctx)
}
// Main pack function
-void pack_design(Context *ctx)
+bool pack_design(Context *ctx)
{
pack_constants(ctx);
promote_globals(ctx);
@@ -398,6 +398,7 @@ void pack_design(Context *ctx)
pack_lut_lutffs(ctx);
pack_nonlut_ffs(ctx);
pack_ram(ctx);
+ return true;
}
NEXTPNR_NAMESPACE_END
diff --git a/ice40/pack.h b/ice40/pack.h
index 5495c986..92b76653 100644
--- a/ice40/pack.h
+++ b/ice40/pack.h
@@ -25,7 +25,7 @@
NEXTPNR_NAMESPACE_BEGIN
-void pack_design(Context *ctx);
+bool pack_design(Context *ctx);
NEXTPNR_NAMESPACE_END