OpenROAD icon indicating copy to clipboard operation
OpenROAD copied to clipboard

GPL:: Global placement reaches out of bounds error when working with Region

Open Innally opened this issue 1 month ago • 7 comments

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:

  1. Is the support for region-related global placement still limited?
  2. Can someone help fix the issue
  3. 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.

  1. Add region, box of the region, associate a group to region, add instances into the group
  2. Then do "make synth", "make floorplan", and "make place". "make place" should trigger the bug.

Relevant log output

Refer to the screenshot

Screenshots

Image

Additional Context

No response

Innally avatar Oct 30 '25 22:10 Innally

Can you provide a test case? The directions are not sufficient to reproduce the problem.

maliberty avatar Oct 30 '25 22:10 maliberty

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

  1. within Makefile under dir /flow, modify variable: DESIGN_CONFIG=./designs/nangate45/fpga_top/config.mk
  2. execute the following under /flow: make place

test.zip

Innally avatar Nov 05 '25 17:11 Innally

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

gudeh avatar Nov 07 '25 16:11 gudeh

Thank you so much for the clarification, this is very helpful info!

Innally avatar Nov 07 '25 17:11 Innally

I believe the source of the issue is here: https://github.com/The-OpenROAD-Project/OpenROAD/blob/94ab17621aa8150675eee8703607482eab396dac/src/gpl/src/nesterovPlace.cpp#L1217

gudeh avatar Nov 13 '25 12:11 gudeh

Good catch, thank you for your diligent work, and it's super helpful for the community.

Innally avatar Nov 13 '25 16:11 Innally

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.

gudeh avatar Dec 08 '25 18:12 gudeh