@@ -80,63 +80,15 @@ void HTreeBuilder::preSinkClustering(
8080
8181 unsigned bestClusterSize = 0 ;
8282 float bestDiameter = 0.0 ;
83- if (clusterSizeSet && maxDiameterSet) {
84- // clang-format off
85- debugPrint (logger_, CTS, " clustering" , 1 , " **** match.run({}, {}, {}) ****" ,
86- clusterSize, maxDiameter, wireSegmentUnit_);
87- // clang-format on
88- matching.run (clusterSize,
89- maxDiameter,
90- wireSegmentUnit_,
91- bestClusterSize,
92- bestDiameter);
93- } else if (!clusterSizeSet && maxDiameterSet) {
94- // only diameter is set, try clustering sizes of 10, 20 and 30
95- for (unsigned clusterSize2 : options_->getSinkClusteringSizes ()) {
96- // clang-format off
97- debugPrint (logger_, CTS, " clustering" , 1 , " **** match.run({}, {}, {}) ****" ,
98- clusterSize2, maxDiameter, wireSegmentUnit_);
99- // clang-format on
100- matching.run (clusterSize2,
101- maxDiameter,
102- wireSegmentUnit_,
103- bestClusterSize,
104- bestDiameter);
105- }
106- } else if (clusterSizeSet && !maxDiameterSet) {
107- // only clustering size is set, try diameters of 50, 100 and 200 um
108- for (unsigned clusterDiameter2 : options_->getSinkClusteringDiameters ()) {
109- // clang-format off
110- debugPrint (logger_, CTS, " clustering" , 1 , " **** match.run({}, {}, {}) ****" ,
111- clusterSize, clusterDiameter2, wireSegmentUnit_);
112- // clang-format on
113- float maxDiameter2 = clusterDiameter2 * (float ) options_->getDbUnits ()
114- / wireSegmentUnit_;
115- matching.run (clusterSize,
116- maxDiameter2,
117- wireSegmentUnit_,
118- bestClusterSize,
119- bestDiameter);
120- }
121- } else { // neighther clustering size nor diameter is set
122- // try diameters of 50, 100 and 200 um
123- for (unsigned clusterDiameter2 : clusterDiameters ()) {
124- // try clustering sizes of 10, 20 and 30
125- for (unsigned clusterSize2 : options_->getSinkClusteringSizes ()) {
126- // clang-format off
127- debugPrint (logger_, CTS, " clustering" , 1 , " **** match.run({}, {}, {}) ****" ,
128- clusterSize2, clusterDiameter2, wireSegmentUnit_);
129- // clang-format on
130- float maxDiameter2 = clusterDiameter2 * (float ) options_->getDbUnits ()
131- / wireSegmentUnit_;
132- matching.run (clusterSize2,
133- maxDiameter2,
134- wireSegmentUnit_,
135- bestClusterSize,
136- bestDiameter);
137- }
138- }
139- }
83+ // clang-format off
84+ debugPrint (logger_, CTS, " clustering" , 1 , " **** match.run({}, {}, {}) ****" ,
85+ clusterSize, maxDiameter, wireSegmentUnit_);
86+ // clang-format on
87+ matching.run (clusterSize,
88+ maxDiameter,
89+ wireSegmentUnit_,
90+ bestClusterSize,
91+ bestDiameter);
14092
14193 if (clusterSizeSet || maxDiameterSet) {
14294 logger_->info (
@@ -1176,18 +1128,21 @@ void HTreeBuilder::run()
11761128 unsigned clusterSize = (type_ == TreeType::MacroTree)
11771129 ? options_->getMacroSinkClusteringSize ()
11781130 : options_->getSinkClusteringSize ();
1131+ bool use_max_diameter = (type_ == TreeType::MacroTree)
1132+ ? options_->isMacroMaxDiameterSet ()
1133+ : options_->isMaxDiameterSet ();
1134+ bool use_max_size = (type_ == TreeType::MacroTree)
1135+ ? options_->isMacroSinkClusteringSizeSet ()
1136+ : options_->isSinkClusteringSizeSet ();
11791137 bool useMaxCap = (type_ == TreeType::MacroTree)
11801138 ? false
1181- : options_-> getSinkClusteringUseMaxCap ( );
1139+ : !(use_max_size && use_max_diameter );
11821140
11831141 logger_->info (
11841142 CTS, 27 , " Generating H-Tree topology for net {}." , clock_.getName ());
11851143 logger_->info (CTS, 28 , " Total number of sinks: {}." , clock_.getNumSinks ());
11861144 if (options_->getSinkClustering ()) {
1187- if (useMaxCap) {
1188- logger_->info (
1189- CTS, 90 , " Sinks will be clustered based on buffer max cap." );
1190- } else {
1145+ if (!useMaxCap) {
11911146 logger_->info (
11921147 CTS,
11931148 29 ,
@@ -1196,6 +1151,23 @@ void HTreeBuilder::run()
11961151 type_ == TreeType::MacroTree ? " Macro " : " Register" ,
11971152 clusterSize,
11981153 clusterDiameter);
1154+ } else if (use_max_diameter && !use_max_size) {
1155+ logger_->info (CTS,
1156+ 59 ,
1157+ " {} sinks will be clustered with maximum cluster diameter "
1158+ " of {:.1f} um and based on buffer max cap." ,
1159+ type_ == TreeType::MacroTree ? " Macro " : " Register" ,
1160+ clusterDiameter);
1161+ } else if (!use_max_diameter && use_max_size) {
1162+ logger_->info (CTS,
1163+ 60 ,
1164+ " {} sinks will be clustered in groups of up to {} and "
1165+ " based on buffer max cap." ,
1166+ type_ == TreeType::MacroTree ? " Macro " : " Register" ,
1167+ clusterSize);
1168+ } else {
1169+ logger_->info (
1170+ CTS, 90 , " Sinks will be clustered based on buffer max cap." );
11991171 }
12001172 }
12011173 logger_->info (
0 commit comments