The digital backend concept we're going to discuss today is called "Placement Blockage." This is a commonly used technique in floorplanning that helps manage the density of specific areas. By applying placement blockages, you can effectively prevent congestion and improve the overall efficiency of the routing process.
There are nine different types of placement blockages, each with its own level of restriction and purpose. These include: hard, hard_macro, soft, partial, category, rp_group, allow_buffer_only, allow_rp_only, and register.
A **hard** blockage is the most restrictive type. It prevents any instance from being placed during all stages, including placement, legalization, optimization, and even Clock Tree Synthesis (CTS). This ensures that no logic or macro is placed in this area.
A **hard_macro** blockage restricts the placement of macros in a specific region. During the automatic macro placement phase, the tool will avoid placing any macros in this area, which is useful for protecting critical regions like power domains or high-speed interfaces.
A **soft** blockage is less strict. It prohibits placing instances during the initial placement stage but allows them to be placed during legalization and optimization. This gives more flexibility while still controlling where certain components are placed.
A **partial** blockage requires a user-defined blocking percentage. For example, if set to 40%, it means that at least 40% of the area will be blocked, allowing only up to 60% of the space for actual placement. This is especially useful for managing congestion in dense regions. However, it only applies during the placement phase and not in later stages like legalization or optimization.
A **category** blockage is a specialized form of partial blockage. It allows you to define a group of instances (such as I/O cells or special logic) and prevent them from being placed in certain areas. This is helpful when you want to avoid placing specific components in sensitive regions.
An **rp_group** blockage is another specialized type. It prevents the placement of relative placement groups in a given area. This is typically used in flows where relative placement constraints are applied, such as in complex designs requiring precise positioning.
An **allow_buffer_only** blockage restricts placement to buffers only. This is useful when you want to ensure that only clock buffers or signal buffers are placed in a particular area, without any other logic elements.
An **allow_rp_only** blockage allows only relative placement groups to be placed in the area. Unlike hard macros, it does not restrict the placement of hard macros, making it a flexible option in certain design scenarios.
Finally, a **register** blockage prevents the placement of registers in a specific area. This can be useful for avoiding timing issues or ensuring that certain logic blocks remain untouched during the placement process.
Each of these blockage types plays an important role in optimizing the layout and ensuring that the design meets both functional and performance requirements. Understanding how to use them effectively is key to achieving a successful digital backend flow.
Solar power system
JIANGSU BEST ENERGY CO.,LTD , https://www.bestenergy-group.com