diff options
author | David Shah <davey1576@gmail.com> | 2018-06-13 11:51:09 +0200 |
---|---|---|
committer | David Shah <davey1576@gmail.com> | 2018-06-13 11:51:09 +0200 |
commit | 5435a970246081f9239bca86519aed4c12ad0a03 (patch) | |
tree | 7a44fc6f81d933dc64c4c7bf3d98db88efc7a03f /ice40 | |
parent | 696aaee24c3e859283e79f9a753e8402524d8f2b (diff) | |
download | nextpnr-5435a970246081f9239bca86519aed4c12ad0a03.tar.gz nextpnr-5435a970246081f9239bca86519aed4c12ad0a03.tar.bz2 nextpnr-5435a970246081f9239bca86519aed4c12ad0a03.zip |
ice40: Add package selection
Signed-off-by: David Shah <davey1576@gmail.com>
Diffstat (limited to 'ice40')
-rw-r--r-- | ice40/chip.cc | 10 | ||||
-rw-r--r-- | ice40/chip.h | 1 | ||||
-rw-r--r-- | ice40/main.cc | 17 |
3 files changed, 25 insertions, 3 deletions
diff --git a/ice40/chip.cc b/ice40/chip.cc index 918a7fb4..464b226c 100644 --- a/ice40/chip.cc +++ b/ice40/chip.cc @@ -98,6 +98,16 @@ Chip::Chip(ChipArgs args) : args(args) } #endif + package_info = nullptr; + for (int i = 0; i < chip_info.num_packages; i++) { + if (chip_info.packages_data[i].name == args.package) { + package_info = &(chip_info.packages_data[i]); + break; + } + } + if (package_info == nullptr) + log_error("Unsupported package '%s'.\n", args.package.c_str()); + bel_to_cell.resize(chip_info.num_bels); wire_to_net.resize(chip_info.num_wires); pip_to_net.resize(chip_info.num_pips); diff --git a/ice40/chip.h b/ice40/chip.h index e1fc09a6..7d5c9fbf 100644 --- a/ice40/chip.h +++ b/ice40/chip.h @@ -432,6 +432,7 @@ struct ChipArgs struct Chip { ChipInfoPOD chip_info; + PackageInfoPOD *package_info; mutable std::unordered_map<IdString, int> bel_by_name; mutable std::unordered_map<IdString, int> wire_by_name; diff --git a/ice40/main.cc b/ice40/main.cc index 8c418cae..7a0d92be 100644 --- a/ice40/main.cc +++ b/ice40/main.cc @@ -83,7 +83,8 @@ int main(int argc, char *argv[]) options.add_options()("hx1k", "set device type to iCE40HX1K"); options.add_options()("hx8k", "set device type to iCE40HX8K"); options.add_options()("up5k", "set device type to iCE40UP5K"); - + options.add_options()("package", po::value<std::string>(), + "set device package"); po::positional_options_description pos; pos.add("run", -1); @@ -127,41 +128,48 @@ int main(int argc, char *argv[]) if (chipArgs.type != ChipArgs::NONE) goto help; chipArgs.type = ChipArgs::LP384; + chipArgs.package = "qn32"; } if (vm.count("lp1k")) { if (chipArgs.type != ChipArgs::NONE) goto help; chipArgs.type = ChipArgs::LP1K; + chipArgs.package = "tq144"; } if (vm.count("lp8k")) { if (chipArgs.type != ChipArgs::NONE) goto help; chipArgs.type = ChipArgs::LP8K; + chipArgs.package = "ct256"; } if (vm.count("hx1k")) { if (chipArgs.type != ChipArgs::NONE) goto help; chipArgs.type = ChipArgs::HX1K; + chipArgs.package = "tq144"; } if (vm.count("hx8k")) { if (chipArgs.type != ChipArgs::NONE) goto help; chipArgs.type = ChipArgs::HX8K; + chipArgs.package = "ct256"; } if (vm.count("up5k")) { if (chipArgs.type != ChipArgs::NONE) goto help; chipArgs.type = ChipArgs::UP5K; + chipArgs.package = "sg48"; } - if (chipArgs.type == ChipArgs::NONE) + if (chipArgs.type == ChipArgs::NONE) { chipArgs.type = ChipArgs::HX1K; - + chipArgs.package = "tq144"; + } #ifdef ICE40_HX1K_ONLY if (chipArgs.type != ChipArgs::HX1K) { std::cout << "This version of nextpnr-ice40 is built with HX1K-support " @@ -170,6 +178,9 @@ int main(int argc, char *argv[]) } #endif + if (vm.count("package")) + chipArgs.package = vm["package"].as<std::string>(); + Design design(chipArgs); init_python(argv[0]); python_export_global("design", design); |