$NetNameAndFanout = join (" ",$NetName,$NetFanout); $NetStatsHash{$NetNameAndFanout} = join (" ",$NetCap,$NetRes,$NetLength,$FirstDriver); #### for ($i = 1; $i <= $UpperFanoutLimitOfTable; $i++) { $TotalCap[$i] = 0; $TotalRes[$i] = 0; $TotalLength[$i] = 0; $FanoutCount = 0; foreach $MasterKey (keys %NetStatsHash) { @KeyEntries = split (/\s+/,$MasterKey); $KeyNetName = $KeyEntries[0]; $KeyFanout = $KeyEntries[1]; $OkayToAdd = 0; if ($KeyFanout == $i) { @NetDetails = split (/\s+/,$NetStatsHash{$MasterKey}); $NetCap = $NetDetails[0]; $NetRes = $NetDetails[1]; $NetLength = $NetDetails[2]; $FirstDriver = $NetDetails[3]; if ($DebugMode == 1) {print ("$i $NetCap $NetRes $NetLength $FirstDriver\n");} if (($UseDriverCell == 0) && ($UseNetPattern == 0)) {$OkayToAdd = 1;} if ($UseDriverCell == 1) { if ($FirstDriver =~ /$DriverPattern/) { $OkayToAdd = 1; } } if ($UseNetPattern == 1) { if ($KeyNetName =~ /$NetPattern/) { $OkayToAdd = 1; } } if ($OkayToAdd == 1) { if ($DebugMode == 1) {print ("Processing net $KeyNetName (driver = $FirstDriver)...\n");} $TotalCap[$i] = $TotalCap[$i] + $NetCap; $TotalRes[$i] = $TotalRes[$i] + $NetRes; $TotalLength[$i] = $TotalLength[$i] + $NetLength; $FanoutCount++; } } } if ($FanoutCount > 0) { $CapAvg[$i] = $TotalCap[$i]/$FanoutCount; $ResAvg[$i] = $TotalRes[$i]/$FanoutCount; $LengthAvg[$i] = $TotalLength[$i]/$FanoutCount; } if ($FanoutCount == 0) { print ("No nets match input criteria when fanout = $i. Please review command-line settings--they may be too restrictive!\n"); } if ($DebugMode == 1) { printf ("CapAvg[$i] = %0.6f\n",$CapAvg[$i]); printf ("ResAvg[$i] = %0.6f\n",$ResAvg[$i]); printf ("LengthAvg[$i] = %0.6f\n",$LengthAvg[$i]); } }