New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Standard cell placement under power straps with same metal as standard cell pins causing obstructions for route. #1938
Comments
In pdks with more layers you rarely see this so the placer doesn't handle it currently. I suggest putting placement blockages under your stripes to avoid any cells going there as a workaround. |
Matt, thank you so very much for the super fast response. |
I think it will require some custom scripting. You could see https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/blob/master/flow/scripts/placement_blockages.tcl as an example of creating blockages (in that case for macro channels). |
Ok. So if I am understanding this correctly. This script is run every time right now for macros. So would I insert what I need into this script or create a script of my own? Does this script get called in the Makefile? |
There is a hook in pdn for POST_PDN_TCL (
|
Excellent! I will give that a shot. |
Before this issue is closed, would you like for me to feedback to you if it worked? I will leave that decision up to you. |
Its always nice to hear about success 😄 |
The issue that I am running into right now is I dont know how to get the shape of the POWER and GROUND nets. In the macro version it sets a box after it finds the instances using |
You'll need to use dbNet::getSWires and then dbSWire::getWires to get the boxes that make up the net. |
I apologize for bothering you again on this but I think I need some assistance in understanding what these odb objects are doing. I tried modifying the placement_blockage.tcl script to simply place a box of placement blockage of specific x and y size it seems to not be working. I ran the flow past placement and when viewing the layout in the gui I am not seeing the blockage. I have placement blockage view turned on as well. Here is the script.
|
Ah yes. I made a bad assumption of the order of magnitude of the box. I see it on my end now. Excellent! Thank you very much. |
Blockages are hard by default |
I can't actually see the placement blockage in your image - would you turn off the stripe and turn on the blockage |
At what step in the flow are you creating the blockage? |
The code that is generating that blockage is being implemented in the POST_PDN.tcl file. So it is executed during the PDN step. Should the blockage exist before the PDN script? I notice that it looks for macros before this step, is that critical? |
That should work. Is this something where you can provide a non-proprietary test case? |
Sorry to request more help on this issue but as it turns out, I am terrible at TCL, definitely not my strong suit. That in combination with little to no documentation on the db variable, I think I could use a hand on this script. I have test all the sections of this script apart from the collection of shapes. The set shapset, clip result, and output work. The only portion that I cannot correctly script is the collect shapes portion (lines 12-17).
|
I looked at the detailed placer and I think it is not handling such blockages (the global placer does). A workaround would be to generate the blockage creation into a script and then run it before initialize_flooplan so that the rows are cut by these blockages. |
@maliberty , thank you very much for looking into that. That makes sense to have to generate the shape before it creates the site rows. I apologize for the delayed response, I have been working to get other parts of the flow operating with this technology. I am now back onto this issue and I very much need this to work in order to realize a fully routed design unfortunately.
|
@maliberty , I had another idea that I am trying to setup. Is the flow capable of placing a MACRO with no pins and no liberty information in the core? I think that if I can create a BLOCK of met2 obstruction or via obstruction right under the power straps, that the DRC rules will avoid placing a standard cell in that area. Is that equivalent to the blockage we have already tried? I am trying to use the macro place command but cant seem to get it to work.
Any thoughts on that idea? |
Yes There is the If you could create fake macros (they don't even need obstruction layers) over the areas you want to prevent placement, I believe you could run I was thinking briefly about how hard it would be to simply add in a manual |
It is somewhat equivalent as the macro will just cause the rows to be cut the same as the blockage did. However the OBS will induce spacing requirements that I don't think you want. |
@rovinski note that if dpl obeys the blockage the flow will have to be changed as well. Today gpl will respect blockages around macros but rsz might put some buffers in an otherwise blocked channel between macros. Currently dpl will legalize them there but if we obeyed the blockage they would be moved far away. We would have to remove the macro blockages after gpl. We would need to distinguish mpl created blockages from user ones. |
I don't see how adding blockages would have had this effect. Please check for any pilot error. |
That would be a separate issue. I'm totally perplexed by this. Do you get any messages during detailed_place? Are those instances in the same location they were before detailed_place? Can you run with blockages but no pdn? |
Ok, I will file a bug in a separate issue. It still does not seem to work with PDN off. I have attached the log from DPL. Here is a screen shot from right after floorplan (3_1_place_gp_skip_io). |
3_1_place_gp_skip_io is before detailed_place has been run so it is too early in the flow to evaluate. You need to look at 3_5_place_dp |
build.sh updates the OR submodule but does not update ORFS itself. |
Yea, I see that now. I tried to run the flow with updated ORFS and nothing works so I will need some time to untangle this knot. My apologies. |
@maliberty , I was able to get a fresh build of ORFS working with the latest OR and unfortunately I am having the same issue. Something is happening during DRT with the obstructions that is breaking it. Have you run this fix with ORFS or just OR under the test directory? |
I suppose you meant dpl not drt. Is this something where you could make an equivalent test case on a public PDK? Its getting hard to make much progress without data. |
Yes, my apologies, I meant DPL.
|
I dont mean to add to the thread too much here but I had a hunch that I wanted to test. I drastically reduced the size of the blockage and it reduced the number of misplaced gates down to one but still produced the same error as before. However, and this might be very off so bear with me, I realized that since the blockage is being inserted into the core area after floor planning, is there a chance that the core utilization calculation is not calculating properly because its calculating the core area without the blockage? Would that be effecting the DPL script? |
Thanks I am able to reproduce it and will take a look. |
Which file are you loading in the GUI? |
Since it fails no file is written. I just ran that step in the GUI. |
Oh, then I definitely loading the input I suppose. I don't know how to run that step in the GUI unfortunately. |
#2023 should simplify it by writing 3_5_place_dp-failed.odb |
The problem is not in detailed_placement but in improve_placement. Short term you can comment that out in your flow while I work on fixing it. |
The improve_placement problem should be fixed with The-OpenROAD-Project/OpenROAD#5143 |
@maliberty , unfortunately I am getting the same result as before. |
I just merged it - please update/rebuild and try again. |
How are you building OR? The output of |
I follow the flow build instructions:
My openroad version is: v2.0-13842-geef07d637 |
I am making an assumption that the flow build also builds openroad. |
Try |
Subject
[Stage]: Detail Placement.
Describe the bug
I am working with a less mature process that has only three metal layers. The standard cell pins use both Metal-1 and Metal-2 for escapement to routing. I am using Metal-2 for the vertical power strapping to the standard cell horizontal rows. Detail placement is placing standard cells under the Metal-2 power straps which is resulting in the Metal-2 standard cell pins to short to power or ground as well as being obstructed during detailed route.
Expected Behavior
Shouldn't the detailed placement tool know that the standard cell pins contain Metal-2 and not to short them to the Metal-2 power and ground straps during placement? If not, how do I tell the detail placement tool to not place any standard cells under the Metal-2 power and ground straps?
Environment
To Reproduce
I am implementing a proprietary technology so unfortunately, this is not reproduceable by the community.
Relevant log output
No response
Screenshots
As seen in this image, Metal-2 vertical straps (RED) are running over Metal-2 standard cell pins (RED). This results in a pin short to either power or ground and also obstructs the detailed router and will not complete the flow. Unobstructed standard cells can be seen on the left side of the image.
Additional Context
My plan is to leave large columns of unobstructed area for routing of M1-M3 over standard cells. Vertical straps of Metal-2 will interrupt placement cells allowing only Metal-3 to route east/west to hop over Metal-2 power/ground straps. Floorplan can be seen in the attached image.
The text was updated successfully, but these errors were encountered: