ecp5: Add an error for out-of-sync constids and bba

Signed-off-by: David Shah <dave@ds0.me>
diff --git a/ecp5/arch.cc b/ecp5/arch.cc
index 5f62d5a..d931c5b 100644
--- a/ecp5/arch.cc
+++ b/ecp5/arch.cc
@@ -117,6 +117,9 @@
         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 444dfa0..3df2d84 100644
--- a/ecp5/arch.h
+++ b/ecp5/arch.h
@@ -194,6 +194,7 @@
     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 da12eea..3cd9211 100644
--- a/ecp5/archdefs.h
+++ b/ecp5/archdefs.h
@@ -58,6 +58,8 @@
 #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 610bd33..549b308 100755
--- a/ecp5/trellis_import.py
+++ b/ecp5/trellis_import.py
@@ -441,6 +441,7 @@
     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 @@
 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 @@
             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"]