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.