OpenROAD icon indicating copy to clipboard operation
OpenROAD copied to clipboard

gpl filler gcell removal instead of density modification for routability mode

Open gudeh opened this issue 7 months ago • 12 comments

This PR introduces a significant change to how filler cells are handled within the global placement (GPL) routability mode. Previously, when area increased due to routability mode inflations, we compensated by increasing density. This approach was counter-intuitive and hindered the routability mode's ability to spread instances effectively. Now, filler cells are removed to directly compensate for inflated area. The previous density modification approach is only utilized when no more fillers can be removed.

A special situation arises when routing congestion doesn't reduce for three consecutive routability iterations. In such cases, instead of reverting to the conventional snapshot (0.6 overflow), we revert to the inflation values that yielded the minimum observed routing congestion (i.e., the best solution found). When this occurs, previously removed fillers are restored using NesterovBase::restoreRemovedFillers().

Currently, this filler removal modification is exclusive to the routability mode. It has not been extended to the timing-driven mode due to consistent divergences observed on three Nangate45 designs when attempting to remove fillers after non-virtual timing-driven iterations.

This PR also includes the following modifications:

-Some renaming of functions (including 'get' prefix on getter functions). 
-New reports providing delta area information after modifications made by both routability and timing-driven modes.
-New functions have been added to write a CSV file containing all GCell information, including all parallel vector values and internal GCell attributes.

EDIT: Here are some examples, master on top and new version on bottom images: sky130hd/aes image

nangate45/swerv image

All public designs images are available in this link.

gudeh avatar May 30 '25 17:05 gudeh

@osamahammad21 FYI

gudeh avatar May 30 '25 17:05 gudeh

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar May 30 '25 17:05 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 02 '25 09:06 github-actions[bot]

Last Friday I ran a secure-CI and noticed only metrics failing. I triggered a new run with a master merge.

gudeh avatar Jun 02 '25 10:06 gudeh

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 03 '25 13:06 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 04 '25 17:06 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 10 '25 19:06 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 10 '25 19:06 github-actions[bot]

In the later commits, I added a limitation on the amount of filler cells that can be removed. I experimented with allowing up to 10%, 25%, 33%, and 50% removal based on the initial filler area. Allowing up to 10% removal seemed to yield slightly better results, with a greater reduction in initial violations observed at the start of DRT. Results are available here showing the difference from master on each run.

gudeh avatar Jun 10 '25 21:06 gudeh

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 10 '25 21:06 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 16 '25 10:06 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 18 '25 06:06 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 19 '25 10:06 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jun 25 '25 09:06 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jul 02 '25 08:07 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jul 02 '25 09:07 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jul 03 '25 10:07 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jul 08 '25 11:07 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jul 08 '25 14:07 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jul 08 '25 17:07 github-actions[bot]

@maliberty secure-CI is passing for public designs, I just triggered the updateRules in https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/pull/3220

gudeh avatar Jul 08 '25 21:07 gudeh

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jul 08 '25 21:07 github-actions[bot]

clang-tidy review says "All clean, LGTM! :+1:"

github-actions[bot] avatar Jul 09 '25 14:07 github-actions[bot]