Replies: 8 comments 29 replies
-
The violations are related to routing congestion so they can occur over fill cells. Do you not see congested areas in the heatmap? I'm not sure what "anything suspicious" means. Also you could play with the layer derates in grt. Reducing them makes it more likely you'll get past grt but also more likely you'll have trouble in drt. We set them more conservatively in the PDK. |
Beta Was this translation helpful? Give feedback.
-
Something doesn't make sense. It fails to route due to congestion but you don't see any in the congestion map. If you load the congestion report in the drc viewer you should be able to see where the congestion is. |
Beta Was this translation helpful? Give feedback.
-
Can you show a local image of the area? If you click the underlined heat map you'll get an options dialog. You can investigate on what layers/directions the congestion is happening in. |
Beta Was this translation helpful? Give feedback.
-
I'm going to investigate something else... Could it be that the PDN is overlaying the pins at the top of the macro? Here the blue line (from PDN) is not overlaying the pins at the top of the macro. The vertical PDN lines go all the way to the top, but the horizontal not all the way to the right edge. That's an assymetry that I find puzzling. The screenshot below is the upper right corner of the design I'm tinkering with: The routing congestion heat map shows that there's a lot of routing at the top (orange). There's nothing there... |
Beta Was this translation helpful? Give feedback.
-
I scaled down the design (fewer wires) and then I can see gui_route. Although there's only horizontal routes between the inner macro's right edge and the top level design's right edge, there's this spagetti just before the input/outputs on the right side... No wonder this doesn't work if you scale up the number of wires. I wonder what is going on here... zoom in:
|
Beta Was this translation helpful? Give feedback.
-
@rovinski @maliberty I've polished up a test case The-OpenROAD-Project/OpenROAD-flow-scripts#764. This array is open source and big enough to exhibit the problems, though less pronounced, seen above that will appear as you go from from mock-array-big to a bigger version, yet it will build in a more reasonable amount of time. In this pull request, I increase the datapath from 8 to 64 bits, at which point global routing fails: The-OpenROAD-Project/OpenROAD-flow-scripts#774 |
Beta Was this translation helpful? Give feedback.
-
I looked at The-OpenROAD-Project/OpenROAD-flow-scripts#764. I see a path like: The input arrives at 50ps (20% of your 250ps clock period). The capture clock path is at nearly 200ps with 44ps of hold from the liberty:
So you'll need 200ps of hold buffering to make this pass. BUFx2 is ~12ps so you need a good number to meet your hold constraint. I don't see anything wrong here other than inputs that arrive quite early relative to the macro's requirements. |
Beta Was this translation helpful? Give feedback.
-
The most forgiving would be to put no i/o timings at all aside from clock. Then only paths internal to the block would be checked. Another option would be to give different min/max timings where they are both forgiving. |
Beta Was this translation helpful? Give feedback.
-
Any tips?
I'm trying a larger version & different version of The-OpenROAD-Project/OpenROAD-flow-scripts#743 and it fails in global routing.
The most recent .odb file to be written is 4_cts.odb, but when I load it and look at the routing congestion map, I don't see anything suspicious. Such arrays have a lot of routing to do, but the routing is simple conceptually: point to point between the array elements.
I'm learning a few tricks with OpenROAD-flow-scripts:
Looking at congestion.rpt, it is full of these. There's nothing in that area, just filler cells. Sometimes overflow is as high as 20.
Beta Was this translation helpful? Give feedback.
All reactions