The-OpenROAD-Project / TritonRoute

UCSD Detailed Router
Other
79 stars 26 forks source link

Wire patches/tabs causing violations #21

Closed ax3ghazy closed 4 years ago

ax3ghazy commented 4 years ago

Hello,

There are some patches/tabs that are added at the routes terminal points, most likely to satisfy the minimum area rule. They also seem to be added only from one side and without checking whether their addition causes shorts or minimum spacing violations. I am aware that these tabs must be inserted, but perhaps a better heuristic would be to "contain" such small areas on the layer within a (roughly) square patch of minimum width such that they both would have the same geometric center (i.e., intersection of diagonals) or something like that.

Here are two examples of this; check the vertical extensions on the right most and left most sides of the screenshot (red metal layer). On the right it caused a short, for example.

screenshot_20200420_18-14-09

I think the above information is enough to deterministically specify the issue, but I can perhaps share a full test case if it was not enough or if needed; please let me know.

Thanks!

bangqixu commented 4 years ago

The patch wires are violation-aware in the sense that they will avoid violations with existing routing objects. In the case you share, I believe the net which the patch is shorting with is routed after the patch is added.

This is already the best heuristic we can implement considering the engineering resource we have. If you have bandwidth to implement your proposed heuristic and see QoR improvement, please feel free to file a pull request.

ax3ghazy commented 4 years ago

Thanks for your quick reply.

The patch wires are violation-aware in the sense that they will avoid violations with existing routing objects. In the case you share, I believe the net which the patch is shorting with is routed after the patch is added.

Well, in that case, wouldn't it make sense to add the patches in the end as a form of post-processing? I guess you could agree that fixing minimum area violations by hand (in case some patches couldn't be applied) are much easier than fixing shorts (which sometimes requires tracing a the whole net). Also, I realized that the patch on the right was really not needed at all as it is part of a longer wire segment that extends vertically upwards:

screenshot_20200420_19-54-53

This is already the best heuristic we can implement considering the engineering resource we have. If you have bandwidth to implement your proposed heuristic and see QoR improvement, please feel free to file a pull request.

I guess I can try that; I have already taken a look at this section of the code, so I guess I may give it a shot soon.

bangqixu commented 4 years ago

The problem with doing patching with post-processing is that if you don't preserve the space for such patches, most likely A* search of other nets would not leave you with the space needed for patching.

I understand that there are some unnecessary patches in the solution, but that's because when we patch them, the vertical part does not exist so that we have to play safe, or we may have no space to patch it at all. That's why I said that the current heuristic is the best we can think of with limited resource while still compatible with multi-terminal A* search and multi-net routing.