From 493ed1ea117cd30d4cbf42670470c808a75e9ee6 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 21 Apr 2021 13:49:41 +0200 Subject: [PATCH] In AutoSegment::canMoveUp(), adjust balance for FlexLib M2/M4. * Change: In AutoSegment::canMoveUp(), hard code for FlexLib a track reserve of one when trying to move up. In FlexLib, the router promotes too easily METAL2 towards METAL4, clogging the higher level. So we end up with the METAL2 level under-saturated and the METAL4 over saturated, leading to routing failures. Now we assume that there is "one track less available" in METAL4. As for now, solves the problem for LibreSOC. --- anabatic/src/AutoSegment.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/anabatic/src/AutoSegment.cpp b/anabatic/src/AutoSegment.cpp index b48216cc..55dcadc7 100644 --- a/anabatic/src/AutoSegment.cpp +++ b/anabatic/src/AutoSegment.cpp @@ -2103,6 +2103,8 @@ namespace Anabatic { { cdebug_log(159,0) << "AutoSegment::canMoveUp() " << flags << " (reserve:" << reserve << ") " << this << endl; + if (Session::getRoutingGauge()->getName() == "FlexLib") + reserve += 1.0; bool nLowDensity = true; bool nLowUpDensity = true;