The digital backend concept we are discussing today is called "Placement Blockage." This is a commonly used constraint in floorplanning that helps manage the density of specific areas. By strategically applying these blockages, designers can avoid congestion and improve routing efficiency, making the overall design process more effective.
There are nine different types of placement blockages: hard, hard_macro, soft, partial, category, rp_group, allow_buffer_only, allow_rp_only, and register. Each serves a unique purpose depending on the design requirements.
A **hard** blockage is the most restrictive. It prohibits placing any instance—whether during placement, legalization, optimization, or even Clock Tree Synthesis (CTS). This ensures that no logic or cells are placed in the specified area.
A **hard_macro** blockage prevents macros from being placed in the designated region. During the automatic macro placement phase, the tool will not place any macros in this area, which is useful for reserving space for other critical components.
A **soft** blockage restricts placement only during the initial placement stage. However, once the legalization and optimization phases begin, the tool is allowed to place instances in the area. This provides some flexibility while still controlling the placement density.
A **partial** blockage requires the designer to define a blocking percentage. For example, if set to 40%, it means that at least 40% of the area must be blocked, allowing only 60% of the space for actual placements. Importantly, this type of blockage is only active during the placement phase and does not affect later stages like legalization or optimization.
A **category** blockage is a specialized form of partial blockage. It allows designers to specify certain types of instances that should not be placed in a given area. By assigning these instances to a category, the tool automatically avoids placing them in regions marked with a category blockage.
An **rp_group** blockage is another special type of partial blockage. It prevents relative placement instances from being placed in the specified area. This is rarely used but can be helpful when working with relative placement flows.
An **allow_buffer_only** blockage restricts the area to only allow buffer placement. This is particularly useful when you want to ensure that only buffers—such as clock buffers or signal buffers—are placed in a specific region. It is only effective during the placement phase.
An **allow_rp_only** blockage allows the placement of relative placement groups but still permits hard macros to be placed. This gives more control over where specific groups of instances can be located without fully restricting all other elements.
Finally, a **register** blockage prevents registers from being placed in the designated area. Like the others, this only applies during the placement stage and has no effect on later optimization or legalization steps.
These blockages provide powerful tools for managing the layout and flow of complex digital designs, helping engineers achieve better performance and more efficient use of space.
JIANGSU BEST ENERGY CO.,LTD , https://www.bestenergy-group.com