MacroPlacement

Hypergraph clustering (soft macro definition)

Hypergraph clustering is, in our view, one of the most crucial undocumented portions of Circuit Training.

Information provided by Google.

The Methods section of the Nature paper provides the following information.

Therefore, at least one purpose of clustering is to enable fast placement of standard cells to provide a signal to the RL policy. The Methods section subsequently explains how the clusters are placed using a force-directed approach:

The Circuit Training FAQ adds:

Finally, the Methods section of the Nature paper also explains the provenance of the netlist hypergraph:

What exactly is the Hypergraph, and how is it partitioned?

From the above information sources, the description of the Grouping process, and information provided by Google engineers, we are fairly certain of the following.

Before going further, we provide a concrete example for (2).

Figure 3. Illustration of net model used in Circuit Training.

Break up clusters that span a distance larger than breakup_threshold

After partitioning the hypergraph, we can have nparts clusters. Then Circuit Training breaks up clusters that span a distance larger than breakup_threshold. Here breakup_threshold = sqrt(canvas_width * canvas_height / 16). For each cluster c, the breakup process is as follows:

Figure 4. Illustration of breaking up a cluster.

Note that since the netlist is generated by physical-aware synthesis, we know the (x, y) coordinate for each instance.

Recursively merge small adjacent clusters

After breaking up clusters which span large distance, there may be some small clusters with only tens of standard cells. In this step, Circuit Training recursively merges small clusters to the most adjacent cluster if they are within a certain distance closeness (breakup_threshold / 2.0), thus reducing number of clusters. A cluster is defined to be a small cluster if the number of elements (macro pins, macros, IO ports and standard cells) is less than or equal to max_num_nodes, where max_num_nodes = number_of_vertices // number_of_clusters_after_breakup // 4. The merging process is as following:

Pending Clarifications

We call readers’ attention to the existence of significant aspects that are still pending clarification here.
While Gridding and Grouping are hopefully well-understood, we are still in the process of documenting and implementing such aspects as the following.

Our Implementation of Hypergraph Clustering.

Our implementation of hypergraph clustering takes the synthesized netlist and a .def file with placed IO ports as input, then generates the clustered netlist (in lef/def format) using hMETIS (1998 binary). In default mode, our implementation will generate the clustered netlist in protocol buffer format and cooresponding plc file. We implement the entire flow based on OpenROAD APIs. Please refer to the OpenROAD repo for explanation of each Tcl command.

Please note that The OpenROAD Project does not distribute any compiled binaries. You need to build your own OpenROAD binary before you run our scripts.

Input file: setup.tcl (you can follow the example to set up your own design) and FixFile (This file is generated by our Grouping scripts)

Output_files: the clustered netlist in protocol buffer format and cooresponding plc file.

Note that the example that we provide is the ariane design implemented in NanGate45. The netlist and corresponding def file with placed instances are generated by Genus iSpatial flow. Here the macro placement is automatically done by the Genus and Innovus tools, i.e., according to Flow (B.1) above.

Thanks

We thank Google engineers for Q&A in a shared document, as well as live discussions on May 19, 2022, that explained the hypergraph clustering method used in Circuit Training. All errors of understanding and implementation are the authors’. We will rectify such errors as soon as possible after being made aware of them.