diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-07-24 16:28:06 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-07-24 16:28:06 +0200 |
commit | a82a8840d2c3995a1b746020a54315acd7fba7b8 (patch) | |
tree | 944f2c8a41ccb857539914493e1baefab380b3cb /generic | |
parent | 974ca143e80ac48b0e87054001a48b0d6597c6fa (diff) | |
download | nextpnr-a82a8840d2c3995a1b746020a54315acd7fba7b8.tar.gz nextpnr-a82a8840d2c3995a1b746020a54315acd7fba7b8.tar.bz2 nextpnr-a82a8840d2c3995a1b746020a54315acd7fba7b8.zip |
Add missing implementations of generic Arch methods
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'generic')
-rw-r--r-- | generic/arch.cc | 33 | ||||
-rw-r--r-- | generic/arch.h | 2 |
2 files changed, 30 insertions, 5 deletions
diff --git a/generic/arch.cc b/generic/arch.cc index af245a4b..ac79ebea 100644 --- a/generic/arch.cc +++ b/generic/arch.cc @@ -77,18 +77,18 @@ void Arch::addBel(IdString name, IdString type, Loc loc, bool gb) bel_ids.push_back(name); bel_by_loc[loc] = name; - if (bels_by_tile.size() <= loc.x) + if (int(bels_by_tile.size()) <= loc.x) bels_by_tile.resize(loc.x + 1); - if (bels_by_tile[loc.x].size() <= loc.y) + if (int(bels_by_tile[loc.x].size()) <= loc.y) bels_by_tile[loc.x].resize(loc.y + 1); bels_by_tile[loc.x][loc.y].push_back(name); - if (tileDimZ.size() <= loc.x) + if (int(tileDimZ.size()) <= loc.x) tileDimZ.resize(loc.x + 1); - if (tileDimZ[loc.x].size() <= loc.y) + if (int(tileDimZ[loc.x].size()) <= loc.y) tileDimZ[loc.x].resize(loc.y + 1); gridDimX = std::max(gridDimX, loc.x + 1); @@ -193,6 +193,30 @@ BelId Arch::getBelByName(IdString name) const IdString Arch::getBelName(BelId bel) const { return bel; } +Loc Arch::getBelLocation(BelId bel) const +{ + auto &info = bels.at(bel); + return Loc(info.x, info.y, info.z); +} + +BelId Arch::getBelByLocation(Loc loc) const +{ + auto it = bel_by_loc.find(loc); + if (it != bel_by_loc.end()) + return it->second; + return BelId(); +} + +const std::vector<BelId> &Arch::getBelsByTile(int x, int y) const +{ + return bels_by_tile.at(x).at(y); +} + +bool Arch::getBelGlobalBuf(BelId bel) const +{ + return bels.at(bel).gb; +} + uint32_t Arch::getBelChecksum(BelId bel) const { // FIXME @@ -234,6 +258,7 @@ std::vector<PortPin> Arch::getBelPins(BelId bel) const std::vector<PortPin> ret; for (auto &it : bels.at(bel).pins) ret.push_back(it.first); + return ret; } // --------------------------------------------------------------- diff --git a/generic/arch.h b/generic/arch.h index 3025bda0..97ed1ac2 100644 --- a/generic/arch.h +++ b/generic/arch.h @@ -141,7 +141,7 @@ struct Arch : BaseCtx IdString getBelName(BelId bel) const; Loc getBelLocation(BelId bel) const; BelId getBelByLocation(Loc loc) const; - std::vector<BelId> getBelsByTile(int x, int y) const; + const std::vector<BelId> &getBelsByTile(int x, int y) const; bool getBelGlobalBuf(BelId bel) const; uint32_t getBelChecksum(BelId bel) const; void bindBel(BelId bel, IdString cell, PlaceStrength strength); |