diff options
author | gatecat <gatecat@ds0.me> | 2021-02-18 11:05:04 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-18 11:05:04 +0000 |
commit | b4a97efe4da95084ba5585c48d20681f68742fd4 (patch) | |
tree | 68578cc660392278abd6bc74758eb7b7015e6840 /gowin | |
parent | cbff1e13712438648c595e5a62d7cfd34304e2f2 (diff) | |
parent | a8c55728e2f10ef2d92369ee120640b76cbe3ff2 (diff) | |
download | nextpnr-b4a97efe4da95084ba5585c48d20681f68742fd4.tar.gz nextpnr-b4a97efe4da95084ba5585c48d20681f68742fd4.tar.bz2 nextpnr-b4a97efe4da95084ba5585c48d20681f68742fd4.zip |
Merge pull request #588 from YosysHQ/gatecat/gowin-fixes
Gowin regression fixes
Diffstat (limited to 'gowin')
-rw-r--r-- | gowin/arch.cc | 28 | ||||
-rw-r--r-- | gowin/arch.h | 6 |
2 files changed, 20 insertions, 14 deletions
diff --git a/gowin/arch.cc b/gowin/arch.cc index 58df773c..b817dae0 100644 --- a/gowin/arch.cc +++ b/gowin/arch.cc @@ -89,6 +89,16 @@ void Arch::addPip(IdString name, IdString type, IdString srcWire, IdString dstWi if (int(tilePipDimZ[loc.x].size()) <= loc.y) tilePipDimZ[loc.x].resize(loc.y + 1); + // Needed to ensure empty tile bel locations + if (int(bels_by_tile.size()) <= loc.x) + bels_by_tile.resize(loc.x + 1); + if (int(bels_by_tile[loc.x].size()) <= loc.y) + bels_by_tile[loc.x].resize(loc.y + 1); + if (int(tileBelDimZ.size()) <= loc.x) + tileBelDimZ.resize(loc.x + 1); + if (int(tileBelDimZ[loc.x].size()) <= loc.y) + tileBelDimZ[loc.x].resize(loc.y + 1); + gridDimX = std::max(gridDimX, loc.x + 1); gridDimY = std::max(gridDimY, loc.y + 1); tilePipDimZ[loc.x][loc.y] = std::max(tilePipDimZ[loc.x][loc.y], loc.z + 1); @@ -124,7 +134,7 @@ void Arch::addBel(IdString name, IdString type, Loc loc, bool gb) tileBelDimZ[loc.x].resize(loc.y + 1); gridDimX = std::max(gridDimX, loc.x + 1); - gridDimY = std::max(gridDimY, loc.x + 1); + gridDimY = std::max(gridDimY, loc.y + 1); tileBelDimZ[loc.x][loc.y] = std::max(tileBelDimZ[loc.x][loc.y], loc.z + 1); } @@ -589,14 +599,14 @@ Arch::Arch(ArchArgs args) : args(args) const PairPOD pip = pips[p][j]; int destrow = row; int destcol = col; - IdString destid(pip.dest_id); - IdString gdestname = wireToGlobal(destrow, destcol, db, destid); + IdString destid(pip.dest_id), gdestid(pip.dest_id); + IdString gdestname = wireToGlobal(destrow, destcol, db, gdestid); if (wires.count(gdestname) == 0) addWire(gdestname, destid, destcol, destrow); int srcrow = row; int srccol = col; - IdString srcid(pip.src_id); - IdString gsrcname = wireToGlobal(srcrow, srccol, db, srcid); + IdString srcid(pip.src_id), gsrcid(pip.src_id); + IdString gsrcname = wireToGlobal(srcrow, srccol, db, gsrcid); if (wires.count(gsrcname) == 0) addWire(gsrcname, srcid, srccol, srcrow); } @@ -701,12 +711,12 @@ Arch::Arch(ArchArgs args) : args(args) const PairPOD pip = pips[p][j]; int destrow = row; int destcol = col; - IdString destid(pip.dest_id); - IdString gdestname = wireToGlobal(destrow, destcol, db, destid); + IdString destid(pip.dest_id), gdestid(pip.dest_id); + IdString gdestname = wireToGlobal(destrow, destcol, db, gdestid); int srcrow = row; int srccol = col; - IdString srcid(pip.src_id); - IdString gsrcname = wireToGlobal(srcrow, srccol, db, srcid); + IdString srcid(pip.src_id), gsrcid(pip.src_id); + IdString gsrcname = wireToGlobal(srcrow, srccol, db, gsrcid); snprintf(buf, 32, "R%dC%d_%s_%s", row + 1, col + 1, srcid.c_str(this), destid.c_str(this)); IdString pipname = id(buf); diff --git a/gowin/arch.h b/gowin/arch.h index 3a1b2534..cdc011aa 100644 --- a/gowin/arch.h +++ b/gowin/arch.h @@ -243,7 +243,7 @@ struct CellTiming std::unordered_map<IdString, std::vector<TimingClockingInfo>> clockingInfo; }; -struct ArchRanges +struct ArchRanges : BaseArchRanges { using ArchArgsT = ArchArgs; // Bels @@ -269,10 +269,6 @@ struct ArchRanges using GroupGroupsRangeT = const std::vector<GroupId> &; // Decals using DecalGfxRangeT = const std::vector<GraphicElement> &; - // Placement validity - using CellTypeRangeT = std::vector<IdString>; - using BelBucketRangeT = std::vector<BelBucketId>; - using BucketBelRangeT = std::vector<BelId>; }; struct Arch : BaseArch<ArchRanges> |