OpenROAD
OpenROAD copied to clipboard
DRT: Wrong via2via Forbidden spacing penalty calculation
Description
Consider the following case:
When we check for penalty of forbidden via2via spacing in FlexGridGraph::getNextPathCost we do the following:
- Extract the horizontal/vertical distance from the last via https://github.com/The-OpenROAD-Project/OpenROAD/blob/27c2eb93b38a81bb9f069b71dda7ff7a5b31e64f/src/drt/src/dr/FlexGridGraph_maze.cpp#L346
- In that case we have non-zero currVLengthX and currVLengthY so we decide if there is a penalty as following: https://github.com/The-OpenROAD-Project/OpenROAD/blob/27c2eb93b38a81bb9f069b71dda7ff7a5b31e64f/src/drt/src/dr/FlexGridGraph_maze.cpp#L393-L405
- The currVLengthX is not in the forbidden horizontal spacing range while currVLengthY is in the forbidden vertical spacing range. So isForbiddenVia2Via evaluates to true. This is obviously wrong because the second via is very far away from the first via horizontally that the vertical distance is not relevant anymore.
Suggested Solution
The problem is that we separate horizontal and vertical spacing check which is not correct. Instead we should evaluate using forbidden areas/boxes instead of forbidden spacing ranges. Some work is done on that solution but it is incomplete: https://github.com/The-OpenROAD-Project-private/OpenROAD/tree/TR-fix-rp-ranges
Additional Context
No response