TritonCTS 2.0¶
TritonCTS 2.0 is available under the OpenROAD app as clock_tree_synthesis
command. The following tcl snippet shows how to call TritonCTS. TritonCTS
2.0 performs on-the-fly characterization. Thus there is no need to
generate characterization data. On-the-fly characterization feature
could still be optionally controlled by parameters specified to
configure_cts_characterization
command. Use set_wire_rc
command to
set clock routing layer.
Commands¶
Configure CTS Characterization¶
configure_cts_characterization [-max_slew <max_slew>] \
[-max_cap <max_cap>] \
[-slew_inter <slew_inter>] \
[-cap_inter <cap_inter>]
Argument description:
-max_slew
is the max slew value (in seconds) that the characterization will test. If this parameter is omitted, the code would use max slew value for specified buffer inbuf_list
from liberty file.-max_cap
is the max capacitance value (in farad) that the characterization will test. If this parameter is omitted, the code would use max cap value for specified buffer inbuf_list
from liberty file.-slew_inter
is the time value (in seconds) that the characterization will consider for results. If this parameter is omitted, the code gets the default value (5.0e-12
). Be careful that this value can be quite low for bigger technologies (>65nm
).-cap_inter
is the capacitance value (in farad) that the characterization will consider for results. If this parameter is omitted, the code gets the default value (5.0e-15
). Be careful that this value can be quite low for bigger technologies (>65nm
).
Clock Tree Synthesis¶
clock_tree_synthesis -buf_list <list_of_buffers> \
[-root_buf <root_buf>] \
[-wire_unit <wire_unit>] \
[-clk_nets <list_of_clk_nets>] \
[-out_path <lut_path>] \
[-post_cts_disable] \
[-distance_between_buffers] \
[-branching_point_buffers_distance] \
[-clustering_exponent] \
[-clustering_unbalance_ratio] \
[-sink_clustering_enable] \
[-sink_clustering_size <cluster_size>] \
[-sink_clustering_max_diameter <max_diameter>]
Argument description:
-buf_list
are the master cells (buffers) that will be considered when making the wire segments.-root_buffer
is the master cell of the buffer that serves as root for the clock tree. If this parameter is omitted, the first master cell from-buf_list
is taken.-wire_unit
is the 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
.-clk_nets
is a string containing the names of the clock roots. If this parameter is omitted, TritonCTS looks for the clock roots automatically.-out_path
is the output path (full) that thelut.txt
andsol_list.txt
files will be saved. This is used to load an existing characterization, without creating one from scratch.-post_cts_disable
is a flag that, when specified, disables the post-processing operation for outlier sinks (buffer insertion on 10% of the way between source and sink).-distance_between_buffers
is the distance (in micron) between buffers that TritonCTS should use when creating the tree. When using this parameter, the clock tree algorithm is simplified, and only uses a fraction of the segments from the LUT.-branching_point_buffers_distance
is the distance (in micron) that a branch has to have in order for a buffer to be inserted on a branch end-point. This requires the-distance_between_buffers
value to be set.-clustering_exponent
is a value that determines the power used on the difference between sink and means on the CKMeans clustering algorithm. If this parameter is omitted, the code gets the default value (4).-clustering_unbalance_ratio
is a value that determines the maximum capacity of each cluster during CKMeans. A value of 50% means that each cluster will have exactly half of all sinks for a specific region (half for each branch). If this parameter is omitted, the code gets the default value (0.6).-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. Default value is 20.sink_clustering_max_diameter
specifies maximum diameter (in micron) of sink cluster. Default value is 50.-clk_nets
is a string containing the names of the clock roots. If this parameter is omitted, TritonCTS looks for the clock roots automatically.
Report CTS¶
Another command available from TritonCTS is report_cts
. It is used to
extract metrics after a successful clock_tree_synthesis
run. These
are: Number of Clock Roots, Number of Buffers Inserted, Number of Clock
Subnets, and Number of Sinks. The following tcl snippet shows how to call
report_cts
.
report_cts [-out_file <file>]
Argument description:
-out_file
(optional) is the file containing the TritonCTS reports. If this parameter is omitted, the metrics are shown on the standard output.
Example scripts¶
clock_tree_synthesis -root_buf "BUF_X4" \
-buf_list "BUF_X4" \
-wire_unit 20
report_cts "file.txt"
Regression tests¶
Limitations¶
FAQs¶
Check out GitHub discussion about this tool.
External references¶
License¶
BSD 3-Clause License. See LICENSE file.