gpl filler gcell removal instead of density modification for routability mode
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
nangate45/swerv
All public designs images are available in this link.
@osamahammad21 FYI
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
Last Friday I ran a secure-CI and noticed only metrics failing. I triggered a new run with a master merge.
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
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.
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"
@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
clang-tidy review says "All clean, LGTM! :+1:"
clang-tidy review says "All clean, LGTM! :+1:"