Merge pull request #588 from YosysHQ/gatecat/gowin-fixes
Gowin regression fixes
This commit is contained in:
commit
b4a97efe4d
@ -5,3 +5,4 @@ ${BUILD_DIR}/nextpnr-ice40 --hx8k --package ct256 --test
|
|||||||
${BUILD_DIR}/nextpnr-ice40 --up5k --package sg48 --test
|
${BUILD_DIR}/nextpnr-ice40 --up5k --package sg48 --test
|
||||||
${BUILD_DIR}/nextpnr-ecp5 --um5g-25k --package CABGA381 --test
|
${BUILD_DIR}/nextpnr-ecp5 --um5g-25k --package CABGA381 --test
|
||||||
${BUILD_DIR}/nextpnr-nexus --device LIFCL-40-9BG400CES --test
|
${BUILD_DIR}/nextpnr-nexus --device LIFCL-40-9BG400CES --test
|
||||||
|
${BUILD_DIR}/nextpnr-gowin --device GW1N-UV4LQ144C6/I5 --test
|
||||||
|
@ -89,6 +89,16 @@ void Arch::addPip(IdString name, IdString type, IdString srcWire, IdString dstWi
|
|||||||
if (int(tilePipDimZ[loc.x].size()) <= loc.y)
|
if (int(tilePipDimZ[loc.x].size()) <= loc.y)
|
||||||
tilePipDimZ[loc.x].resize(loc.y + 1);
|
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);
|
gridDimX = std::max(gridDimX, loc.x + 1);
|
||||||
gridDimY = std::max(gridDimY, loc.y + 1);
|
gridDimY = std::max(gridDimY, loc.y + 1);
|
||||||
tilePipDimZ[loc.x][loc.y] = std::max(tilePipDimZ[loc.x][loc.y], loc.z + 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);
|
tileBelDimZ[loc.x].resize(loc.y + 1);
|
||||||
|
|
||||||
gridDimX = std::max(gridDimX, loc.x + 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);
|
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];
|
const PairPOD pip = pips[p][j];
|
||||||
int destrow = row;
|
int destrow = row;
|
||||||
int destcol = col;
|
int destcol = col;
|
||||||
IdString destid(pip.dest_id);
|
IdString destid(pip.dest_id), gdestid(pip.dest_id);
|
||||||
IdString gdestname = wireToGlobal(destrow, destcol, db, destid);
|
IdString gdestname = wireToGlobal(destrow, destcol, db, gdestid);
|
||||||
if (wires.count(gdestname) == 0)
|
if (wires.count(gdestname) == 0)
|
||||||
addWire(gdestname, destid, destcol, destrow);
|
addWire(gdestname, destid, destcol, destrow);
|
||||||
int srcrow = row;
|
int srcrow = row;
|
||||||
int srccol = col;
|
int srccol = col;
|
||||||
IdString srcid(pip.src_id);
|
IdString srcid(pip.src_id), gsrcid(pip.src_id);
|
||||||
IdString gsrcname = wireToGlobal(srcrow, srccol, db, srcid);
|
IdString gsrcname = wireToGlobal(srcrow, srccol, db, gsrcid);
|
||||||
if (wires.count(gsrcname) == 0)
|
if (wires.count(gsrcname) == 0)
|
||||||
addWire(gsrcname, srcid, srccol, srcrow);
|
addWire(gsrcname, srcid, srccol, srcrow);
|
||||||
}
|
}
|
||||||
@ -701,12 +711,12 @@ Arch::Arch(ArchArgs args) : args(args)
|
|||||||
const PairPOD pip = pips[p][j];
|
const PairPOD pip = pips[p][j];
|
||||||
int destrow = row;
|
int destrow = row;
|
||||||
int destcol = col;
|
int destcol = col;
|
||||||
IdString destid(pip.dest_id);
|
IdString destid(pip.dest_id), gdestid(pip.dest_id);
|
||||||
IdString gdestname = wireToGlobal(destrow, destcol, db, destid);
|
IdString gdestname = wireToGlobal(destrow, destcol, db, gdestid);
|
||||||
int srcrow = row;
|
int srcrow = row;
|
||||||
int srccol = col;
|
int srccol = col;
|
||||||
IdString srcid(pip.src_id);
|
IdString srcid(pip.src_id), gsrcid(pip.src_id);
|
||||||
IdString gsrcname = wireToGlobal(srcrow, srccol, db, srcid);
|
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));
|
snprintf(buf, 32, "R%dC%d_%s_%s", row + 1, col + 1, srcid.c_str(this), destid.c_str(this));
|
||||||
IdString pipname = id(buf);
|
IdString pipname = id(buf);
|
||||||
|
@ -243,7 +243,7 @@ struct CellTiming
|
|||||||
std::unordered_map<IdString, std::vector<TimingClockingInfo>> clockingInfo;
|
std::unordered_map<IdString, std::vector<TimingClockingInfo>> clockingInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ArchRanges
|
struct ArchRanges : BaseArchRanges
|
||||||
{
|
{
|
||||||
using ArchArgsT = ArchArgs;
|
using ArchArgsT = ArchArgs;
|
||||||
// Bels
|
// Bels
|
||||||
@ -269,10 +269,6 @@ struct ArchRanges
|
|||||||
using GroupGroupsRangeT = const std::vector<GroupId> &;
|
using GroupGroupsRangeT = const std::vector<GroupId> &;
|
||||||
// Decals
|
// Decals
|
||||||
using DecalGfxRangeT = const std::vector<GraphicElement> &;
|
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>
|
struct Arch : BaseArch<ArchRanges>
|
||||||
|
Loading…
Reference in New Issue
Block a user