Clock tree synthesis

Each card shows a command to explain. A missed card returns later in the round and starts the schedule over. A card answered correctly moves up the schedule and next appears after 1, 3, 7, then 21 days. Keys 1 to 4 choose an option, h shows a hint, and Enter moves on. A hint keeps the card where it is on the schedule. An ordering card is answered by clicking its items in order, and one wrong click ends it. Time values are in nanoseconds. Progress is stored in this browser.

SourceThese cards cover the make variables that drive OpenROAD-flow-scripts, the reference flow built on OpenROAD. Each card shows a line as it appears in a design's or a platform's config.mk, and each answer links to that variable in the flow's own variable reference. Variables come and go between releases; this deck follows the version in the openroad/orfs image. Reference: flow variable reference (OpenROAD-flow-scripts on GitHub).
All 6 cards in this section, with answers
  • export CTS_CLUSTER_SIZE = 30
    Allows at most 30 clock sinks in one cluster under a buffer.

    Hint: A cluster is a group of sinks that will share one buffer.

    Sinks are grouped before the tree is built, and each group gets its own buffer, which becomes a leaf of the tree above. A larger cluster means fewer buffers and more load on each. CTS_CLUSTER_DIAMETER limits the same group by distance instead. OpenROAD-flow-scripts reference

  • export CTS_CLUSTER_DIAMETER = 100
    Keeps a clock sink cluster within 100 microns across.

    Hint: The unit is microns, so this limit is geometric.

    A cluster that is small in count can still be spread across the block, and then its buffer drives a long wire to each sink. The diameter limit keeps a cluster compact; the two limits are used together. OpenROAD-flow-scripts reference

  • export CTS_BUF_DISTANCE = 60
    Puts a buffer roughly every 60 microns along the clock tree's wires.

    Hint: It concerns the wire between buffers, not the sinks.

    Wire delay grows with the square of length, so a long clock wire is split by buffers. Setting the distance makes the tree regular; leaving it unset lets the tool choose from its characterization. OpenROAD-flow-scripts reference

  • export CTS_LIB_NAME = NangateOpenCellLibrary
    Names the library that the clock buffers are chosen from.

    Hint: Ask where the clock buffers are chosen from when several libraries are loaded.

    A run may load several libraries, including macro libraries and different threshold-voltage flavours. Naming one keeps clock buffer selection inside it. OpenROAD-flow-scripts reference

  • export SKIP_CTS_REPAIR_TIMING = 1
    Skips the timing repair that normally follows clock tree synthesis.

    Hint: Ask what is being traded away, and when that would be acceptable.

    Repair after the clock tree is often the longest step of a run, because real skew appears there for the first time. Skipping it suits early exploration or a fast test run, and it leaves timing unfixed. OpenROAD-flow-scripts reference

  • export CTS_ARGS = -sink_clustering_size 20
    Overrides the arguments the flow passes to clock tree synthesis.

    Hint: Compare it with the CTS (Clock Tree Synthesis) variables that have their own names.

    The named variables, such as CTS_CLUSTER_SIZE, build the usual clock tree synthesis call. This variable replaces those arguments outright, which is the way to reach an option that has no variable of its own. OpenROAD-flow-scripts reference