From a9b6543361ba35202cbe6c6c16860c3e8a388bc4 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 8 Aug 2018 00:06:03 +0200 Subject: Add Region struct Signed-off-by: Clifford Wolf --- common/nextpnr.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'common') diff --git a/common/nextpnr.h b/common/nextpnr.h index e588f47b..28c144ac 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -216,6 +216,13 @@ struct BelPin struct CellInfo; +struct Region +{ + IdString name; + std::unordered_set bels; + std::unordered_set wires; +}; + enum PlaceStrength { STRENGTH_NONE = 0, @@ -250,6 +257,8 @@ struct NetInfo : ArchNetInfo // wire -> uphill_pip std::unordered_map wires; + + Region *region = nullptr; }; enum PortType @@ -289,6 +298,8 @@ struct CellInfo : ArchCellInfo int constr_z = UNCONSTR; // this.z - parent.z bool constr_abs_z = false; // parent.z := 0 // parent.[xyz] := 0 when (constr_parent == nullptr) + + Region *region = nullptr; }; enum TimingPortClass @@ -391,6 +402,9 @@ struct BaseCtx std::unordered_map> nets; std::unordered_map> cells; + // Floorplanning regions + std::unordered_map> region; + BaseCtx() { idstring_str_to_idx = new std::unordered_map; -- cgit v1.2.3 From 5ddde5c49ffaf6c2f827e9805caac0b7dd43f4a0 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 8 Aug 2018 10:27:08 +0200 Subject: Add pip locations Signed-off-by: Clifford Wolf --- common/archcheck.cc | 4 ++-- common/nextpnr.h | 6 ++++++ common/place_common.cc | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) (limited to 'common') diff --git a/common/archcheck.cc b/common/archcheck.cc index 5059066d..3d9e4e76 100644 --- a/common/archcheck.cc +++ b/common/archcheck.cc @@ -75,7 +75,7 @@ void archcheck_locs(const Context *ctx) log_assert(0 <= loc.z); log_assert(loc.x < ctx->getGridDimX()); log_assert(loc.y < ctx->getGridDimY()); - log_assert(loc.z < ctx->getTileDimZ(loc.x, loc.y)); + log_assert(loc.z < ctx->getTileBelDimZ(loc.x, loc.y)); BelId bel2 = ctx->getBelByLocation(loc); dbg(" ... %s\n", ctx->getBelName(bel2).c_str(ctx)); @@ -88,7 +88,7 @@ void archcheck_locs(const Context *ctx) dbg("> %d %d\n", x, y); std::unordered_set usedz; - for (int z = 0; z < ctx->getTileDimZ(x, y); z++) { + for (int z = 0; z < ctx->getTileBelDimZ(x, y); z++) { BelId bel = ctx->getBelByLocation(Loc(x, y, z)); if (bel == BelId()) continue; diff --git a/common/nextpnr.h b/common/nextpnr.h index 28c144ac..29a85a10 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -219,8 +219,14 @@ struct CellInfo; struct Region { IdString name; + + bool constr_bels = false; + bool constr_wires = false; + bool constr_pips = false; + std::unordered_set bels; std::unordered_set wires; + std::unordered_set piplocs; }; enum PlaceStrength diff --git a/common/place_common.cc b/common/place_common.cc index f9867057..5cdb96ef 100644 --- a/common/place_common.cc +++ b/common/place_common.cc @@ -251,7 +251,7 @@ class ConstraintLegaliseWorker ySearch = IncreasingDiameterSearch(loc.y + child->constr_y); } if (child->constr_z == child->UNCONSTR) { - zSearch = IncreasingDiameterSearch(loc.z, 0, ctx->getTileDimZ(loc.x, loc.y)); + zSearch = IncreasingDiameterSearch(loc.z, 0, ctx->getTileBelDimZ(loc.x, loc.y)); } else { if (child->constr_abs_z) { zSearch = IncreasingDiameterSearch(child->constr_z); @@ -329,7 +329,7 @@ class ConstraintLegaliseWorker yRootSearch = IncreasingDiameterSearch(cell->constr_y); if (cell->constr_z == cell->UNCONSTR) - zRootSearch = IncreasingDiameterSearch(currentLoc.z, 0, ctx->getTileDimZ(currentLoc.x, currentLoc.y)); + zRootSearch = IncreasingDiameterSearch(currentLoc.z, 0, ctx->getTileBelDimZ(currentLoc.x, currentLoc.y)); else zRootSearch = IncreasingDiameterSearch(cell->constr_z); while (!xRootSearch.done()) { -- cgit v1.2.3