aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ice40/chip.cc10
-rw-r--r--ice40/chip.h1
-rw-r--r--ice40/main.cc17
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);