GPL:: Global placement reaches out of bounds error when working with Region
Describe the bug
I've been trying ORFS to do region-involving design. Set region and bind a box to it using db api, also added groups with Insts in the regions. Everything works fine until do-3_3_place_gp.
I got:
[ERROR GPL-0316] getGCell: index 13602 out of bounds (gCellStor_.size() = 13602)
I am sure this is region-related because once I remove the region configs, it works.
I dig a little more into the src code, and I can identify the issue happens when excuting "fullyrebuffer" function called by "Resizer::findResizeSlacks" in source file resizer.cc.
I wanted to try to fix the code but I am relatively new to this project, so I am sharing this for potential assistance.
Expected Behavior
Expected answers to:
- Is the support for region-related global placement still limited?
- Can someone help fix the issue
- Is it possible it's a problem stemming from ORFS' default global placement configs?
Environment
latest openroad and ORFS
To Reproduce
To reproduce the issue, use the latest openroad and ORFS, any type of design would do.
- Add region, box of the region, associate a group to region, add instances into the group
- Then do "make synth", "make floorplan", and "make place". "make place" should trigger the bug.
Relevant log output
Refer to the screenshot
Screenshots
Additional Context
No response
Can you provide a test case? The directions are not sufficient to reproduce the problem.
Sorry for the delay, I am not too sure what would be sufficient since I'm new. but I will provide the odb after floorplanning and the design config.mk. The way I run it is
- within Makefile under dir /flow, modify variable:
DESIGN_CONFIG=./designs/nangate45/fpga_top/config.mk - execute the following under /flow:
make place
Hi! We currently do not support timing-driven neither routability mode with regions. Timing-driven should work if you run only virtual iterations, you can use -keep_resize_below_overflow 0, or disable timing-driven. Routability should not work in any way with regions (I suspect you might not get an error and routability make changes only on top-level, ignoring regions, but I am not sure).
We are currently working for supporting routability with regions, and timing-driven should come next.
FYI @LucasYuki
Thank you so much for the clarification, this is very helpful info!
I believe the source of the issue is here: https://github.com/The-OpenROAD-Project/OpenROAD/blob/94ab17621aa8150675eee8703607482eab396dac/src/gpl/src/nesterovPlace.cpp#L1217
Good catch, thank you for your diligent work, and it's super helpful for the community.
Hi @Innally, I fixed the code I previously mentioned here (https://github.com/The-OpenROAD-Project/OpenROAD/pull/8965), would you like to retry to run your design with the latest OR version? I assume it will fail somewhere else, but the fatal you sent here should not happen anymore.
We had also a recent change where routability mode should be working fine on a design with regions https://github.com/The-OpenROAD-Project/OpenROAD/pull/8224 (you created the issue on the right moment, we are actually working on this haha).
I was not able to run with the zip provided, you may want to run make DESIGN_CONFIG=[your_config.mk] global_place_issue and share the tar.gz created.