From c128df127bea52d0fde7ef9de00b7d117580c8d1 Mon Sep 17 00:00:00 2001 From: Eddie Hung Date: Mon, 3 Sep 2018 13:17:16 -0700 Subject: [PATCH] Do not consider route-through for CLB tiles --- xc7/arch.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/xc7/arch.cc b/xc7/arch.cc index 0f5da9b4..1d0ead8c 100644 --- a/xc7/arch.cc +++ b/xc7/arch.cc @@ -115,7 +115,6 @@ std::vector TorcInfo::construct_wire_to_tilewire(const Segments& segme currentTilewire.setTileIndex(tileIndex); for(WireIndex wireIndex(0); wireIndex < wireCount; wireIndex++) { currentTilewire.setWireIndex(wireIndex); - const auto& currentSegment = segments.getTilewireSegment(currentTilewire); if (!currentSegment.isTrivial()) { @@ -134,6 +133,8 @@ std::vector TorcInfo::construct_wire_to_tilewire(const Segments& segme } std::vector TorcInfo::construct_pip_to_arc(const std::vector& wire_to_tilewire, const DDB& ddb, std::vector> &wire_to_pips_uphill, std::vector> &wire_to_pips_downhill) { + const auto &tiles = ddb.getTiles(); + std::vector pip_to_arc; wire_to_pips_downhill.resize(wire_to_tilewire.size()); @@ -144,7 +145,12 @@ std::vector TorcInfo::construct_pip_to_arc(const std::vector& wir const auto &tw = wire_to_tilewire[i]; if (tw.isUndefined()) continue; arcs.clear(); - const_cast(ddb).expandSegmentSinks(tw, arcs, DDB::eExpandDirectionNone, false /* inUseTied */, true /*inUseRegular */, true /* inUseIrregular */, false /* inUseRoutethrough */); + + const auto& tileInfo = tiles.getTileInfo(tw.getTileIndex()); + const auto tileTypeName = tiles.getTileTypeName(tileInfo.getTypeIndex()); + bool clb = boost::starts_with(tileTypeName, "CLB"); + + const_cast(ddb).expandSegmentSinks(tw, arcs, DDB::eExpandDirectionNone, false /* inUseTied */, true /*inUseRegular */, true /* inUseIrregular */, !clb /* inUseRoutethrough */); auto index = pip_to_arc.size(); pip_to_arc.insert(pip_to_arc.end(), arcs.begin(), arcs.end());