diff options
Diffstat (limited to 'fpga_interchange')
| -rw-r--r-- | fpga_interchange/arch.h | 25 | 
1 files changed, 14 insertions, 11 deletions
| diff --git a/fpga_interchange/arch.h b/fpga_interchange/arch.h index eb1e51c6..03a960d1 100644 --- a/fpga_interchange/arch.h +++ b/fpga_interchange/arch.h @@ -86,7 +86,7 @@ NPNR_PACKED_STRUCT(struct BelInfoPOD {      int16_t category;      int16_t padding; -    RelPtr<int8_t> valid_cells; +    RelPtr<int8_t> valid_cells; // Bool array, length of number_cells.  });  enum BELCategory { @@ -183,14 +183,10 @@ NPNR_PACKED_STRUCT(struct NodeInfoPOD {  });  NPNR_PACKED_STRUCT(struct CellMapPOD { -    // BEL bucket constids. -    int32_t number_bel_buckets; -    RelPtr<int32_t> bel_buckets; -      int32_t number_cells;      // Cell names supported in this arch. -    RelPtr<int32_t> cell_names; -    RelPtr<int32_t> cell_bel_buckets; +    RelPtr<int32_t> cell_names;       // constids +    RelPtr<int32_t> cell_bel_buckets; // constids  });  NPNR_PACKED_STRUCT(struct ChipInfoPOD { @@ -212,10 +208,11 @@ NPNR_PACKED_STRUCT(struct ChipInfoPOD {      int32_t num_nodes;      RelPtr<NodeInfoPOD> nodes; -    RelPtr<CellMapPOD> cell_map; - +    // BEL bucket constids.      int32_t number_bel_buckets;      RelPtr<int32_t> bel_buckets; + +    RelPtr<CellMapPOD> cell_map;  });  /************************ End of chipdb section. ************************/ @@ -306,7 +303,9 @@ struct FilteredBelIterator      BelId operator*() const      { -        return *b; +        BelId bel = *b; +        NPNR_ASSERT(filter(bel)); +        return bel;      }  }; @@ -318,11 +317,15 @@ struct FilteredBelRange          b.e = bel_e;          if(b.b != b.e && !filter(*b.b)) { -            ++b.b; +            ++b;          }          e.b = bel_e;          e.e = bel_e; + +        if(b != e) { +            NPNR_ASSERT(filter(*b.b)); +        }      }      FilteredBelIterator b, e; | 
