Repository navigation
place: add GPL_PLACE_IOS for global_placement -place_ios - #4685
minjukim55 wants to merge 2 commits into
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces the GPL_PLACE_IOS configuration variable, enabling concurrent cell and IO pin placement in a single global placement step (global_placement -place_ios) and skipping the separate IO-less global placement and pin placement steps. It also introduces SET_PLACE_CONFIG_ARGS to pass configuration arguments to set_place_config. Feedback on the changes suggests moving the warning about ignored PLACE_PINS_ARGS outside of the $place_ios conditional block in global_place.tcl to ensure users are always warned when GPL_PLACE_IOS is enabled but PLACE_PINS_ARGS is still defined.
22e68ef to
d764e4b
Compare
Signed-off-by: Minju Kim <mkim@precisioninno.com>
d764e4b to
8fa22a4
Compare
🔍 QoR checkMetrics reflect the PR merge build — i.e. what will land on the target branch. Commit 62 design(s) checked — 14 with regression(s), 0 without a comparable baseline. ❌ asap7/riscv32i base — 1 failing metric(s)
❌ asap7/swerv_wrapper base — 1 failing metric(s)
❌ gf180/jpeg base — 1 failing metric(s)
❌ ihp-sg13g2/ibex base — 1 failing metric(s)
❌ ihp-sg13g2/jpeg base — 1 failing metric(s)
❌ ihp-sg13g2/spi base — 1 failing metric(s)
❌ nangate45/ariane133 base — 3 failing metric(s)
❌ nangate45/bp_be_top base — 1 failing metric(s)
❌ nangate45/ibex base — 1 failing metric(s)
❌ sky130hd/aes base — 1 failing metric(s)
❌ sky130hd/chameleon base — 3 failing metric(s)
❌ sky130hd/microwatt base — 3 failing metric(s)
❌ sky130hd/riscv32i base — 1 failing metric(s)
❌ sky130hs/aes base — 1 failing metric(s)
|
|
The QoR failures come from the OpenROAD bump, not this change |
|
|
||
| # place_pins and global_placement -place_ios both read these settings. | ||
| proc set_io_place_config { } { | ||
| set_place_config \ |
There was a problem hiding this comment.
I am stumped by this... This information goes in here, but where is it used on the other end?
I think it might be used by global route too?
If it is used only by global placement, why does it go into the .odb? Or is this a global variable that is not persisted?
@maliberty is working on a proposal for persisted configuration settings, and as I recall his last proposal log_cmd for a command shows everything that goes into that command, so there's a separation of storage of persisted configuration settings and consumption. Consumption is explicit and visible in logs.
| && ![env_var_exists_and_non_empty FLOORPLAN_DEF] | ||
| && ![env_var_exists_and_non_empty FOOTPRINT] | ||
| && ![env_var_exists_and_non_empty FOOTPRINT_TCL] | ||
| }] |
There was a problem hiding this comment.
DRY? I think we have this if statement elsewhere in the code...
| && ![env_var_exists_and_non_empty FOOTPRINT] | ||
| && ![env_var_exists_and_non_empty FOOTPRINT_TCL] | ||
| }] | ||
| if { [env_var_equals GPL_PLACE_IOS 1] } { |
There was a problem hiding this comment.
use a default value for GPL_PLACE_IOS 0 in variables.yaml and $::env(GPL_PLACEIOS) => hard early loud error if something is wrong, the above can create confusion by continuing execution when the root problem is some sort of propoagation of variables
|
|
||
| .PHONY: do-place | ||
| do-place: | ||
| ifeq ($(GPL_PLACE_IOS),1) |
There was a problem hiding this comment.
to make this consistent with ORFS flow today, we don't add if statements to make code, we copy the .odb/.sdc file in the step when there's nothing to do and always execute the step, so iffy code stays in .tcl and make has a static graph. Presumably the end state of this feature is that io placement always happens in gpl and there's no ORFS option to do it as a separate step, so I'd rather avoid iffy make code.
|
🥳 Very nice feature to be able to do pin placement as part of the regular gpl! I tried it on my designs, but waiting for it to work together with timing/routing driven gpl. |
|
I'd like to see Proposal
Why
Context, for anyone who hasn't followed the OpenROAD threads
|
With GPL_PLACE_IOS=1, steps 3_1 and 3_2 copy their input through and 3_3 runs global_placement -place_ios. The pin settings come from IO_PLACER_H/V and PLACE_PINS_ARGS, set with set_place_config right before the call and reset right after. Default 0 leaves the flow as is. Signed-off-by: Minju Kim <mkim@precisioninno.com>
oharboe
left a comment
There was a problem hiding this comment.
The second commit covers all of my inline comments: set_place_config/reset_place_config scoped to the call, pins_fixed_in_floorplan, GPL_PLACE_IOS defaulting to 0 and read through $::env, and the copy-through in place of Makefile conditionals.
The PR title and description still describe the SET_PLACE_CONFIG_ARGS version; the second commit's message describes what the PR does now.
|
@minjukim55 I'm not a maintainer, so I can't approve PRs, but I approve of it. 💯 |
|
The checkmark is grey if I comment and green if I approve, so you get a grey checkmark since I'm not a maintainer and it is still marked as "review required", so we're good... |
Adds GPL_PLACE_IOS (default 0). When set, steps 3_1 and 3_2 copy their input through and 3_3 runs global_placement -place_ios, with the pin settings from IO_PLACER_H/V and PLACE_PINS_ARGS passed through set_place_config right before the call and reset right after.