diff --git a/docs/user/FlowVariables.md b/docs/user/FlowVariables.md
index c2c630e4e4..e06ea1f9c1 100644
--- a/docs/user/FlowVariables.md
+++ b/docs/user/FlowVariables.md
@@ -319,6 +319,7 @@ configuration file.
| TNS_END_PERCENT| Default TNS_END_PERCENT value for post CTS timing repair. Try fixing all violating endpoints by default (reduce to 5% for runtime). Specifies how many percent of violating paths to fix [0-100]. Worst path will always be fixed.| 100|
| UNSET_ABC9_BOX_CELLS| List of cells to unset the abc9_box attribute on| |
| USE_FILL| Whether to perform metal density filling.| 0|
+| USE_NEGOTIATION| Enable using negotiation legalizer for detailed placement.| 0|
| VERILOG_DEFINES| Preprocessor defines passed to the language frontend. Example: `-D HPDCACHE_ASSERT_OFF`| |
| VERILOG_FILES| The path to the design Verilog/SystemVerilog files providing a description of modules.| |
| VERILOG_INCLUDE_DIRS| Specifies the include directories for the Verilog input files.| |
@@ -655,4 +656,5 @@ configuration file.
- [TAP_CELL_NAME](#TAP_CELL_NAME)
- [TECH_LEF](#TECH_LEF)
- [USE_FILL](#USE_FILL)
+- [USE_NEGOTIATION](#USE_NEGOTIATION)
diff --git a/flow/scripts/cts.tcl b/flow/scripts/cts.tcl
index fd544a332e..f079bb5f10 100644
--- a/flow/scripts/cts.tcl
+++ b/flow/scripts/cts.tcl
@@ -46,7 +46,9 @@ set_placement_padding -global \
-left $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) \
-right $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT)
-set result [catch { log_cmd detailed_placement } msg]
+set dpl_args {}
+append_env_var dpl_args USE_NEGOTIATION -use_negotiation 0
+set result [catch { log_cmd detailed_placement {*}$dpl_args } msg]
if { $result != 0 } {
save_progress 4_1_error
error "Detailed placement failed in CTS: $msg"
@@ -70,7 +72,7 @@ if { !$::env(SKIP_CTS_REPAIR_TIMING) } {
run_lec_test 4_rsz 4_before_rsz_lec.v 4_after_rsz_lec.v
}
- set result [catch { log_cmd detailed_placement } msg]
+ set result [catch { log_cmd detailed_placement {*}$dpl_args } msg]
if { $result != 0 } {
save_progress 4_1_error
error "Detailed placement failed in CTS: $msg"
diff --git a/flow/scripts/detail_place.tcl b/flow/scripts/detail_place.tcl
index 17c4285ea8..5fb802f7e7 100644
--- a/flow/scripts/detail_place.tcl
+++ b/flow/scripts/detail_place.tcl
@@ -15,7 +15,9 @@ proc do_dpl { } {
set_placement_padding -global \
-left $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) \
-right $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT)
- log_cmd detailed_placement {*}[env_var_or_empty DETAIL_PLACEMENT_ARGS]
+ set dpl_args [env_var_or_empty DETAIL_PLACEMENT_ARGS]
+ append_env_var dpl_args USE_NEGOTIATION -use_negotiation 0
+ log_cmd detailed_placement {*}$dpl_args
if { $::env(ENABLE_DPO) } {
if { [env_var_exists_and_non_empty DPO_MAX_DISPLACEMENT] } {
diff --git a/flow/scripts/global_route.tcl b/flow/scripts/global_route.tcl
index 5be588d088..3534fde65f 100644
--- a/flow/scripts/global_route.tcl
+++ b/flow/scripts/global_route.tcl
@@ -61,8 +61,10 @@ proc global_route_helper { } {
# Running DPL to fix overlapped instances
# Run to get modified net by DPL
+ set dpl_args {}
+ append_env_var dpl_args USE_NEGOTIATION -use_negotiation 0
log_cmd global_route -start_incremental
- log_cmd detailed_placement
+ log_cmd detailed_placement {*}$dpl_args
# Route only the modified net by DPL
log_cmd global_route -end_incremental {*}$res_aware \
-congestion_report_file $::env(REPORTS_DIR)/congestion_post_repair_design.rpt
@@ -80,7 +82,7 @@ proc global_route_helper { } {
# Running DPL to fix overlapped instances
# Run to get modified net by DPL
log_cmd global_route -start_incremental
- log_cmd detailed_placement
+ log_cmd detailed_placement {*}$dpl_args
check_placement -verbose
# Route only the modified net by DPL
log_cmd global_route -end_incremental {*}$res_aware \
diff --git a/flow/scripts/variables.json b/flow/scripts/variables.json
index 5d28243d6b..85ddc5accf 100644
--- a/flow/scripts/variables.json
+++ b/flow/scripts/variables.json
@@ -1417,6 +1417,10 @@
"default": 0,
"description": "Whether to perform metal density filling.\n"
},
+ "USE_NEGOTIATION": {
+ "default": 0,
+ "description": "Enable using negotiation legalizer for detailed placement.\n"
+ },
"VERILOG_DEFINES": {
"description": "Preprocessor defines passed to the language frontend. Example: `-D HPDCACHE_ASSERT_OFF`\n",
"stages": [
diff --git a/flow/scripts/variables.yaml b/flow/scripts/variables.yaml
index a7e9234448..afcab989d4 100644
--- a/flow/scripts/variables.yaml
+++ b/flow/scripts/variables.yaml
@@ -600,6 +600,10 @@ DPO_MAX_DISPLACEMENT:
description: |
Specifies how far an instance can be moved when optimizing.
default: 5 1
+USE_NEGOTIATION:
+ description: |
+ Enable using negotiation legalizer for detailed placement.
+ default: 0
GPL_TIMING_DRIVEN:
description: |
Specifies whether the placer should use timing driven placement.