diff --git a/.Changelog-dev.md b/.Changelog-dev.md deleted file mode 100644 index 244dee2e..00000000 --- a/.Changelog-dev.md +++ /dev/null @@ -1,7 +0,0 @@ -# Dev - -## Steps - -* `OpenROAD.CTS` - * Added flags `CTS_OBSTRUCTION_AWARE` and `CTS_BALANCE_LEVELS` - * Added `CTS_SINK_BUFFER_MAX_CAP_DERATE_PCT` diff --git a/Changelog.md b/Changelog.md index 5e494448..0095f786 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,15 @@ ## Documentation --> +# Dev + +## Steps + +* `OpenROAD.CTS` + * Added flags `CTS_OBSTRUCTION_AWARE` and `CTS_BALANCE_LEVELS` + * Added `CTS_SINK_BUFFER_MAX_CAP_DERATE_PCT` + * Added `CTS_DELAY_BUFFER_DERATE_PCT` + # 2.2.9 ## Steps diff --git a/openlane/scripts/openroad/cts.tcl b/openlane/scripts/openroad/cts.tcl index 38226c23..81fcf05d 100755 --- a/openlane/scripts/openroad/cts.tcl +++ b/openlane/scripts/openroad/cts.tcl @@ -59,6 +59,9 @@ if { [info exists ::env(CTS_OBSTRUCTION_AWARE)] && $::env(CTS_OBSTRUCTION_AWARE) if { [info exists ::env(CTS_SINK_BUFFER_MAX_CAP_DERATE_PCT)] } { lappend arg_list -sink_buffer_max_cap_derate [expr $::env(CTS_SINK_BUFFER_MAX_CAP_DERATE_PCT) / 100.0] } +if { [info exists ::env(CTS_DELAY_BUFFER_DERATE_PCT)] } { + lappend arg_list -delay_buffer_derate [expr $::env(CTS_DELAY_BUFFER_DERATE_PCT) / 100] +} if { [info exists ::env(CTS_BALANCE_LEVELS)] && $::env(CTS_BALANCE_LEVELS) } { lappend arg_list -balance_levels } diff --git a/openlane/steps/openroad.py b/openlane/steps/openroad.py index b2fc7fea..d78a0483 100644 --- a/openlane/steps/openroad.py +++ b/openlane/steps/openroad.py @@ -2025,6 +2025,13 @@ class CTS(ResizerStep): + "The value of 100 means no derating of max cap limit", units="%", ), + Variable( + "CTS_DELAY_BUFFER_DERATE_PCT", + Optional[Decimal], + "This option balances latencies between macro cells and registers by inserting delay buffers" + + "The value of 100 means all needed delay buffers are inserted", + units="%", + ), Variable( "CTS_OBSTRUCTION_AWARE", Optional[bool],