diff options
author | David Shah <dave@ds0.me> | 2019-10-26 20:38:28 +0100 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2019-10-26 20:38:28 +0100 |
commit | 475fcd442520a1464ce6c3b1aecbea03aa158007 (patch) | |
tree | 8dfd548946394e0d53cdeb4eb8f2c0f4dcce14ee /ecp5 | |
parent | 371d33146fcfda9a1c568f46fd1f5775cd4fb1be (diff) | |
download | nextpnr-475fcd442520a1464ce6c3b1aecbea03aa158007.tar.gz nextpnr-475fcd442520a1464ce6c3b1aecbea03aa158007.tar.bz2 nextpnr-475fcd442520a1464ce6c3b1aecbea03aa158007.zip |
ecp5: Add an error for out-of-sync constids and bba
Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'ecp5')
-rw-r--r-- | ecp5/arch.cc | 3 | ||||
-rw-r--r-- | ecp5/arch.h | 1 | ||||
-rw-r--r-- | ecp5/archdefs.h | 2 | ||||
-rwxr-xr-x | ecp5/trellis_import.py | 6 |
4 files changed, 10 insertions, 2 deletions
diff --git a/ecp5/arch.cc b/ecp5/arch.cc index 5f62d5ae..d931c5b2 100644 --- a/ecp5/arch.cc +++ b/ecp5/arch.cc @@ -117,6 +117,9 @@ Arch::Arch(ArchArgs args) : args(args) log_error("Unsupported ECP5 chip type.\n"); } #endif + if (chip_info->const_id_count != DB_CONST_ID_COUNT) + log_error("Chip database 'bba' and nextpnr code are out of sync; please rebuild (or contact distribution " + "maintainer)!\n"); package_info = nullptr; for (int i = 0; i < chip_info->num_packages; i++) { if (args.package == chip_info->package_info[i].name.get()) { diff --git a/ecp5/arch.h b/ecp5/arch.h index 444dfa07..3df2d84f 100644 --- a/ecp5/arch.h +++ b/ecp5/arch.h @@ -194,6 +194,7 @@ NPNR_PACKED_STRUCT(struct ChipInfoPOD { int32_t num_tiles; int32_t num_location_types; int32_t num_packages, num_pios; + int32_t const_id_count; RelPtr<LocationTypePOD> locations; RelPtr<int32_t> location_type; RelPtr<GlobalInfoPOD> location_glbinfo; diff --git a/ecp5/archdefs.h b/ecp5/archdefs.h index da12eeaa..3cd92119 100644 --- a/ecp5/archdefs.h +++ b/ecp5/archdefs.h @@ -58,6 +58,8 @@ enum ConstIds #define X(t) , ID_##t #include "constids.inc" #undef X + , + DB_CONST_ID_COUNT }; #define X(t) static constexpr auto id_##t = IdString(ID_##t); diff --git a/ecp5/trellis_import.py b/ecp5/trellis_import.py index 610bd331..549b3080 100755 --- a/ecp5/trellis_import.py +++ b/ecp5/trellis_import.py @@ -441,6 +441,7 @@ def write_database(dev_name, chip, ddrg, endianness): bba.u32(len(location_types), "num_location_types") bba.u32(len(packages), "num_packages") bba.u32(len(pindata), "num_pios") + bba.u32(const_id_count, "const_id_count") bba.r("locations", "locations") bba.r("location_types", "location_type") @@ -457,11 +458,12 @@ def write_database(dev_name, chip, ddrg, endianness): dev_names = {"25k": "LFE5UM5G-25F", "45k": "LFE5UM5G-45F", "85k": "LFE5UM5G-85F"} def main(): - global max_row, max_col + global max_row, max_col, const_id_count pytrellis.load_database(database.get_db_root()) args = parser.parse_args() # Read port pin file + const_id_count = 1 # count ID_NONE with open(args.constids) as f: for line in f: line = line.replace("(", " ") @@ -473,7 +475,7 @@ def main(): assert line[0] == "X" idx = len(constids) + 1 constids[line[1]] = idx - + const_id_count += 1 constids["SLICE"] = constids["TRELLIS_SLICE"] constids["PIO"] = constids["TRELLIS_IO"] |