@@ -311,6 +311,21 @@ void ClusteringEngine::setBaseThresholds()
311311{
312312 if (tree_->base_max_macro <= 0 || tree_->base_min_macro <= 0
313313 || tree_->base_max_std_cell <= 0 || tree_->base_min_std_cell <= 0 ) {
314+ // From original implementation: Reset maximum level based on number
315+ // of macros.
316+ const int min_num_macros_for_multilevel = 150 ;
317+ if (design_metrics_->getNumMacro () <= min_num_macros_for_multilevel) {
318+ tree_->max_level = 1 ;
319+ debugPrint (
320+ logger_,
321+ MPL,
322+ " multilevel_autoclustering" ,
323+ 1 ,
324+ " Number of macros is below {}. Resetting number of levels to {}" ,
325+ min_num_macros_for_multilevel,
326+ tree_->max_level );
327+ }
328+
314329 // Set base values for std cell lower/upper thresholds
315330 const int min_num_std_cells_allowed = 1000 ;
316331 tree_->base_min_std_cell
@@ -331,21 +346,6 @@ void ClusteringEngine::setBaseThresholds()
331346 }
332347 tree_->base_max_macro
333348 = tree_->base_min_macro * tree_->cluster_size_ratio / 2.0 ;
334-
335- // From original implementation: Reset maximum level based on number
336- // of macros.
337- const int min_num_macros_for_multilevel = 150 ;
338- if (design_metrics_->getNumMacro () <= min_num_macros_for_multilevel) {
339- tree_->max_level = 1 ;
340- debugPrint (
341- logger_,
342- MPL,
343- " multilevel_autoclustering" ,
344- 1 ,
345- " Number of macros is below {}. Resetting number of levels to {}" ,
346- min_num_macros_for_multilevel,
347- tree_->max_level );
348- }
349349 }
350350
351351 // Set sizes for root
@@ -1978,14 +1978,7 @@ void ClusteringEngine::breakMixedLeaves(
19781978// A1 A2 A3
19791979void ClusteringEngine::breakMixedLeaf (Cluster* mixed_leaf)
19801980{
1981- Cluster* parent = mixed_leaf;
1982- const float macro_dominated_cluster_ratio = 0.01 ;
1983-
1984- // Split by replacement if macro dominated.
1985- if (mixed_leaf->getNumStdCell () * macro_dominated_cluster_ratio
1986- < mixed_leaf->getNumMacro ()) {
1987- parent = mixed_leaf->getParent ();
1988- }
1981+ Cluster* parent = mixed_leaf->getParent ();
19891982
19901983 mapMacroInCluster2HardMacro (mixed_leaf);
19911984
@@ -2027,12 +2020,7 @@ void ClusteringEngine::breakMixedLeaf(Cluster* mixed_leaf)
20272020 // Never use SetInstProperty in the following lines for the reason above!
20282021 std::vector<int > virtual_conn_clusters;
20292022
2030- // Deal with the std cells
2031- if (parent == mixed_leaf) {
2032- addStdCellClusterToSubTree (parent, mixed_leaf, virtual_conn_clusters);
2033- } else {
2034- replaceByStdCellCluster (mixed_leaf, virtual_conn_clusters);
2035- }
2023+ replaceByStdCellCluster (mixed_leaf, virtual_conn_clusters);
20362024
20372025 // Deal with the macros
20382026 for (int i = 0 ; i < macro_class.size (); i++) {
@@ -2256,29 +2244,6 @@ void ClusteringEngine::groupSingleMacroClusters(
22562244 }
22572245}
22582246
2259- void ClusteringEngine::addStdCellClusterToSubTree (
2260- Cluster* parent,
2261- Cluster* mixed_leaf,
2262- std::vector<int >& virtual_conn_clusters)
2263- {
2264- std::string std_cell_cluster_name = mixed_leaf->getName ();
2265- auto std_cell_cluster
2266- = std::make_unique<Cluster>(id_, std_cell_cluster_name, logger_);
2267-
2268- std_cell_cluster->copyInstances (*mixed_leaf);
2269- std_cell_cluster->clearLeafMacros ();
2270- std_cell_cluster->setClusterType (StdCellCluster);
2271-
2272- setClusterMetrics (std_cell_cluster.get ());
2273-
2274- virtual_conn_clusters.push_back (std_cell_cluster->getId ());
2275-
2276- tree_->maps .id_to_cluster [id_++] = std_cell_cluster.get ();
2277- std_cell_cluster->setParent (parent);
2278- parent->addChild (std::move (std_cell_cluster));
2279- }
2280-
2281- // We don't modify the physical hierarchy when spliting by replacement
22822247void ClusteringEngine::replaceByStdCellCluster (
22832248 Cluster* mixed_leaf,
22842249 std::vector<int >& virtual_conn_clusters)
0 commit comments