aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYRabbit <rabbit@yrabbit.cyou>2021-11-07 09:05:34 +1000
committerYRabbit <rabbit@yrabbit.cyou>2021-11-07 09:05:34 +1000
commitdeb14762aadc9eda0610215849829f5957d7c71d (patch)
treed6fb308cea78395e25ac08e779ccc6cff75ffedb
parent2a27085ecbe4d0f6ad46a370f7db938a5ac36348 (diff)
downloadnextpnr-deb14762aadc9eda0610215849829f5957d7c71d.tar.gz
nextpnr-deb14762aadc9eda0610215849829f5957d7c71d.tar.bz2
nextpnr-deb14762aadc9eda0610215849829f5957d7c71d.zip
gowin: Check the chipdb version
Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
-rw-r--r--gowin/arch.cc6
-rw-r--r--gowin/arch.h2
2 files changed, 7 insertions, 1 deletions
diff --git a/gowin/arch.cc b/gowin/arch.cc
index ca93c3ba..6641df72 100644
--- a/gowin/arch.cc
+++ b/gowin/arch.cc
@@ -674,8 +674,12 @@ Arch::Arch(ArchArgs args) : args(args)
// Load database
std::string chipdb = stringf("gowin/chipdb-%s.bin", family.c_str());
auto db = reinterpret_cast<const DatabasePOD *>(get_chipdb(chipdb));
- if (db == nullptr)
+ if (db == nullptr) {
log_error("Failed to load chipdb '%s'\n", chipdb.c_str());
+ }
+ if (db->version != chipdb_version) {
+ log_error("Incorrect chipdb version %u is used. Version %u is required\n", db->version, chipdb_version);
+ }
if (db->family.get() != family) {
log_error("Database is for family '%s' but provided device is family '%s'.\n", db->family.get(),
family.c_str());
diff --git a/gowin/arch.h b/gowin/arch.h
index bf69ebe9..aa751a4f 100644
--- a/gowin/arch.h
+++ b/gowin/arch.h
@@ -454,6 +454,8 @@ struct Arch : BaseArch<ArchRanges>
bool cellsCompatible(const CellInfo **cells, int count) const;
// start Z for the MUX2LUT5 bels
int const mux_0_z = 10;
+ // chip db version
+ unsigned int const chipdb_version = 1;
std::vector<IdString> cell_types;