MacroPlacement

Grouping

Grouping is an important preprocessing step of clustering. The grouping step in Circuit Training requires as inputs: the post-synthesis gate-level netlist (standard cells and hard macros), placed IOs (ports, or terminals), typically at the borders of the chip canvas, the grid of n_rows rows and n_cols columns of gridcells, which defines the gridded layout canvas. The purpose of grouping, to our understanding, is to ensure that closely-related standard-cell logic, which connect to the same macro or the same clump of IO (noted as IO cluster), belong to the same standard-cell clusters.

The Grouping Process

The grouping consists of three steps:

Figure 1. Illustration of the netlist representation in Circuit Training.

Figure 2. Illustration of grouping IO ports.

How Groups Are Used

Each group is recorded in the “.fix file” that is part of the input to the hMETIS hypergraph partitioner when the gate-level netlist is clustered into soft macros.

How Grouping Scripts Are used

We provide (an example) about the usage of our grouping scripts. Basically our grouping scripts take follows as inputs: (i) (setup_file) including enablement information (lefs/libs), synthesized gate-level netlist (.v), def file with placed IOs (.def); (ii) n_rows and n_cols determined by the (Gridding) step; (iii) K_in and K_out parameters; (iv) global_net_threshold for ignoring global nets. If a net has more than global_net_threshold instances, we ignore such this net when we search “transitive” fanins and fanouts. After running grouping scripts, you will get the .fix file.

Thanks

We thank Google engineers for Q&A in a shared document, as well as live discussions on May 19, 2022, that explained the grouping 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.