The-OpenROAD-Project / OpenROAD

OpenROAD's unified application implementing an RTL-to-GDS Flow. Documentation at https://openroad.readthedocs.io/en/latest/
https://theopenroadproject.org/
BSD 3-Clause "New" or "Revised" License
1.6k stars 556 forks source link

CTS has trouble with lack of blockage awareness #2131

Open maliberty opened 2 years ago

maliberty commented 2 years ago

CTS isn't aware of blockages when constructing the tree or adding post-opt buffers. This can lead to poor results with excessive skew. A test case is provided in https://github.com/The-OpenROAD-Project/OpenROAD/pull/2130

The Post-GRT skew is:

Clock clk
Latency      CRPR       Skew
inst_8_4/clk ^
   1.95
inst_10_4/clk ^
   1.69      0.00       0.26

Immediately after CTS this pair looks like this with the last common segment in yellow and the clkopt buffers as yellow dots. The cts buffer and the clkopt buffers are placed on the macros: image

Detailed placement will push them off the macros (left & right in this example): image

The global route guides have to go through the buffers leading to a circuitous route: image

without instances to better see the scenic routes: image

maliberty commented 2 years ago

I believe the same issue will show up in the resizer as well due to its reliance on Steiner trees that are blockage unaware.