From 9b71bba747936e8c5fcb81880d570b515c63599f Mon Sep 17 00:00:00 2001 From: Sylvain Munaut Date: Tue, 2 Jun 2020 20:21:05 +0200 Subject: ice40: Add fallback behavior for Extra Cell config bits vectors This helps make new nextpnr compatible with old chipdbs when a parameters goes from single bit to multi bit. Signed-off-by: Sylvain Munaut --- ice40/bitstream.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'ice40/bitstream.cc') diff --git a/ice40/bitstream.cc b/ice40/bitstream.cc index 3865316f..85f1e847 100644 --- a/ice40/bitstream.cc +++ b/ice40/bitstream.cc @@ -133,6 +133,16 @@ static const BelConfigPOD &get_ec_config(const ChipInfoPOD *chip, BelId bel) typedef std::vector>>> chipconfig_t; +static bool has_ec_cbit(const BelConfigPOD &cell_cbits, std::string name) +{ + for (int i = 0; i < cell_cbits.num_entries; i++) { + const auto &cbit = cell_cbits.entries[i]; + if (cbit.entry_name.get() == name) + return true; + } + return false; +} + static void set_ec_cbit(chipconfig_t &config, const Context *ctx, const BelConfigPOD &cell_cbits, std::string name, bool value, std::string prefix) { @@ -190,7 +200,7 @@ void configure_extra_cell(chipconfig_t &config, const Context *ctx, CellInfo *ce } value.resize(p.second); - if (p.second == 1) { + if ((p.second == 1) || !has_ec_cbit(bc, p.first + "_0")) { set_ec_cbit(config, ctx, bc, p.first, value.at(0), prefix); } else { for (int i = 0; i < p.second; i++) { -- cgit v1.2.3