aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2018-11-16 10:24:00 +0000
committerDavid Shah <dave@ds0.me>2018-11-16 13:26:28 +0000
commit19cc284b8cd6293430dd8acc11ace73b8e13b287 (patch)
treeaf92774aa7a06886754964425786da56a82fc3b1
parentffe1166e3348392a863662b04dd1e244b14647c4 (diff)
downloadnextpnr-19cc284b8cd6293430dd8acc11ace73b8e13b287.tar.gz
nextpnr-19cc284b8cd6293430dd8acc11ace73b8e13b287.tar.bz2
nextpnr-19cc284b8cd6293430dd8acc11ace73b8e13b287.zip
ecp5: Allow selection of device speed grade
Signed-off-by: David Shah <dave@ds0.me>
-rw-r--r--ecp5/main.cc29
1 files changed, 26 insertions, 3 deletions
diff --git a/ecp5/main.cc b/ecp5/main.cc
index 0b187942..8e1ee8d4 100644
--- a/ecp5/main.cc
+++ b/ecp5/main.cc
@@ -59,6 +59,8 @@ po::options_description ECP5CommandHandler::getArchOptions()
specific.add_options()("um5g-85k", "set device type to LFE5UM5G-85F");
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)");
+
specific.add_options()("basecfg", po::value<std::string>(), "base chip configuration in Trellis text format");
specific.add_options()("textcfg", po::value<std::string>(), "textual configuration in Trellis format to write");
@@ -112,10 +114,31 @@ std::unique_ptr<Context> ECP5CommandHandler::createContext()
else
chipArgs.package = "CABGA381";
if (chipArgs.type == ArchArgs::LFE5UM5G_25F || chipArgs.type == ArchArgs::LFE5UM5G_45F ||
- chipArgs.type == ArchArgs::LFE5UM5G_85F)
+ chipArgs.type == ArchArgs::LFE5UM5G_85F) {
+ if (vm.count("speed") && vm["speed"].as<int>() != 8)
+ log_error("Only speed grade 8 is available for 5G parts\n");
chipArgs.speed = ArchArgs::SPEED_8_5G;
- else
- chipArgs.speed = ArchArgs::SPEED_6;
+ } else {
+ if (vm.count("speed")) {
+ int speed = vm["speed"].as<int>();
+ switch (speed) {
+ case 6:
+ chipArgs.speed = ArchArgs::SPEED_6;
+ break;
+ case 7:
+ chipArgs.speed = ArchArgs::SPEED_7;
+ break;
+ case 8:
+ chipArgs.speed = ArchArgs::SPEED_8;
+ break;
+ default:
+ log_error("Unsupported speed grade '%d'\n", speed);
+ }
+ } else {
+ chipArgs.speed = ArchArgs::SPEED_6;
+ }
+ }
+
return std::unique_ptr<Context>(new Context(chipArgs));
}