diff options
author | David Shah <dave@ds0.me> | 2018-11-16 10:24:00 +0000 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2018-11-16 13:26:28 +0000 |
commit | 19cc284b8cd6293430dd8acc11ace73b8e13b287 (patch) | |
tree | af92774aa7a06886754964425786da56a82fc3b1 /ecp5 | |
parent | ffe1166e3348392a863662b04dd1e244b14647c4 (diff) | |
download | nextpnr-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>
Diffstat (limited to 'ecp5')
-rw-r--r-- | ecp5/main.cc | 29 |
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)); } |