From 9d17a243a03a53d720ab0c59ec2ffd38aa1062d1 Mon Sep 17 00:00:00 2001 From: Avi71 <33029441+Avi71@users.noreply.github.com> Date: Sun, 7 Jun 2026 00:58:59 -0700 Subject: [PATCH 1/3] docs(cts): correct sink_clustering_size auto-selection description When -sink_clustering_size is not set, clustering is based on buffer max cap, not a fixed choice from {10, 20, 30}. The cluster size is PDK-dependent and may be less than 10. Fixes #10602 Signed-off-by: Avi71 <33029441+Avi71@users.noreply.github.com> --- src/cts/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cts/README.md b/src/cts/README.md index 3ebed37972a..f43d8ef7c1b 100644 --- a/src/cts/README.md +++ b/src/cts/README.md @@ -83,7 +83,7 @@ clock_tree_synthesis | `-clustering_exponent` | Value that determines the power used on the difference between sink and means on the CKMeans clustering algorithm. The default value is `4`, and the allowed values are integers `[0, MAX_INT]`. | | `-clustering_unbalance_ratio` | Value determines each cluster's maximum capacity during CKMeans. A value of `0.5` (i.e., 50%) means that each cluster will have exactly half of all sinks for a specific region (half for each branch). The default value is `0.6`, and the allowed values are floats `[0, 1.0]`. | | `-sink_clustering_enable` | Enables pre-clustering of sinks to create one level of sub-tree before building H-tree. Each cluster is driven by buffer which becomes end point of H-tree structure. | -| `-sink_clustering_size` | Specifies the maximum number of sinks per cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified the size will be automatically chosen between `10, 20 or 30` based on the tree buffer max cap. | +| `-sink_clustering_size` | Specifies the maximum number of sinks per cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified, sinks will be clustered based on buffer max cap. | | `-sink_clustering_max_diameter` | Specifies maximum diameter (in microns) of sink cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified the diameter will be automatically chosen between `50, 100 or 200`, based on the tree buffer max cap. | | `-macro_clustering_size` | Specifies the maximum number of sinks per cluster for the macro tree. The default value is `4`, and the allowed values are integers `[0, MAX_INT]`. | | `-macro_clustering_max_diameter` | Specifies maximum diameter (in microns) of sink cluster for the macro tree. The default value is `50`, and the allowed values are integers `[0, MAX_INT]`. | @@ -179,7 +179,7 @@ set_cts_config | `-sink_buffer_max_cap_derate` | Use this option to control automatic buffer selection. To favor strong(weak) drive strength buffers use a small(large) value. The default value is `0.01`, meaning that buffers are selected by derating max cap limit by 0.01. The value of 1.0 means no derating of max cap limit. | | `-sink_clustering_levels` | ... | | `-sink_clustering_max_diameter` | Specifies maximum diameter (in microns) of sink cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified the diameter will be automatically chosen between `50, 100 or 200`, based on the tree buffer max cap. | -| `-sink_clustering_size` | Specifies the maximum number of sinks per cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified the size will be automatically chosen between `10, 20 or 30` based on the tree buffer max cap. | +| `-sink_clustering_size` | Specifies the maximum number of sinks per cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified, sinks will be clustered based on buffer max cap. | | `-sink_clustering_levels` | ... | | `-skip_nets` | Tcl list containing the clock nets to be skipped (e.g. `{net1, net2}`). If the net is a root clock net, the whole clock is skipped, otherwise only the subnet specified is skipped. | | `-wire_unit` | Minimum unit distance between buffers for a specific wire. If this parameter is omitted, the code gets the value from ten times the height of `-root_buffer`. | From e73feb352293daf6d5a0685c1b11c1a203ee4b85 Mon Sep 17 00:00:00 2001 From: Avi71 <33029441+Avi71@users.noreply.github.com> Date: Wed, 10 Jun 2026 12:01:10 -0700 Subject: [PATCH 2/3] Update src/cts/README.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Signed-off-by: Avi71 <33029441+Avi71@users.noreply.github.com> --- src/cts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cts/README.md b/src/cts/README.md index f43d8ef7c1b..74672334ee6 100644 --- a/src/cts/README.md +++ b/src/cts/README.md @@ -83,7 +83,7 @@ clock_tree_synthesis | `-clustering_exponent` | Value that determines the power used on the difference between sink and means on the CKMeans clustering algorithm. The default value is `4`, and the allowed values are integers `[0, MAX_INT]`. | | `-clustering_unbalance_ratio` | Value determines each cluster's maximum capacity during CKMeans. A value of `0.5` (i.e., 50%) means that each cluster will have exactly half of all sinks for a specific region (half for each branch). The default value is `0.6`, and the allowed values are floats `[0, 1.0]`. | | `-sink_clustering_enable` | Enables pre-clustering of sinks to create one level of sub-tree before building H-tree. Each cluster is driven by buffer which becomes end point of H-tree structure. | -| `-sink_clustering_size` | Specifies the maximum number of sinks per cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified, sinks will be clustered based on buffer max cap. | +| -sink_clustering_size | Specifies the maximum number of sinks per cluster for the register tree. The allowed values are integers [0, MAX_INT]. If this is not specified, sinks will be clustered based on the sink buffer's maximum fanout. | | `-sink_clustering_max_diameter` | Specifies maximum diameter (in microns) of sink cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified the diameter will be automatically chosen between `50, 100 or 200`, based on the tree buffer max cap. | | `-macro_clustering_size` | Specifies the maximum number of sinks per cluster for the macro tree. The default value is `4`, and the allowed values are integers `[0, MAX_INT]`. | | `-macro_clustering_max_diameter` | Specifies maximum diameter (in microns) of sink cluster for the macro tree. The default value is `50`, and the allowed values are integers `[0, MAX_INT]`. | From 114505de686a3e0048602901fc8e9894b69068cd Mon Sep 17 00:00:00 2001 From: Avi71 <33029441+Avi71@users.noreply.github.com> Date: Wed, 10 Jun 2026 12:01:24 -0700 Subject: [PATCH 3/3] Update src/cts/README.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Signed-off-by: Avi71 <33029441+Avi71@users.noreply.github.com> --- src/cts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cts/README.md b/src/cts/README.md index 74672334ee6..383a43daee0 100644 --- a/src/cts/README.md +++ b/src/cts/README.md @@ -179,7 +179,7 @@ set_cts_config | `-sink_buffer_max_cap_derate` | Use this option to control automatic buffer selection. To favor strong(weak) drive strength buffers use a small(large) value. The default value is `0.01`, meaning that buffers are selected by derating max cap limit by 0.01. The value of 1.0 means no derating of max cap limit. | | `-sink_clustering_levels` | ... | | `-sink_clustering_max_diameter` | Specifies maximum diameter (in microns) of sink cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified the diameter will be automatically chosen between `50, 100 or 200`, based on the tree buffer max cap. | -| `-sink_clustering_size` | Specifies the maximum number of sinks per cluster for the register tree. The allowed values are integers `[0, MAX_INT]`. If this is not specified, sinks will be clustered based on buffer max cap. | +| -sink_clustering_size | Specifies the maximum number of sinks per cluster for the register tree. The allowed values are integers [0, MAX_INT]. If this is not specified, sinks will be clustered based on the sink buffer's maximum fanout. | | `-sink_clustering_levels` | ... | | `-skip_nets` | Tcl list containing the clock nets to be skipped (e.g. `{net1, net2}`). If the net is a root clock net, the whole clock is skipped, otherwise only the subnet specified is skipped. | | `-wire_unit` | Minimum unit distance between buffers for a specific wire. If this parameter is omitted, the code gets the value from ten times the height of `-root_buffer`. |