* Implement set_path_margin command
Adds a new set_path_margin SDC command that applies a signed slack
adjustment to the capture-clock side of timing paths. A positive
margin tightens the path (harder to meet) and a negative margin
loosens it. Supports -setup/-hold/-from/-through/-to scoping,
priority/override semantics matching other exceptions, text and
JSON report output, and write_sdc serialisation.
Adapted from Silimate PR #57; uses upstream/master Mode/Scene and
string_view APIs. Test uses unset_path_exceptions in place of the
Silimate-only reset_path alias.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix nested delaySum call indentation to match project style.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Address review: store PathMargin on PathEnd, split tests
Keep the path margin exception on PathEndClkConstrained, add
PathEnd::hasPathMargin for report gating, and split the monolithic
regression into set_path_margin1–6. Rebased onto upstream/master and
document the command in ChangeLog.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Document set_path_margin in OpenSTA.fodt/pdf
Add the command reference, index entry, and note that
unset_path_exceptions also clears path margin exceptions.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Drop [[nodiscard]] from PathEnd::hasPathMargin.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* Implement set_max_dynamic_power and set_max_leakage_power.
Store max dynamic/leakage power like max area, expose getters through Sta,
write them in write_sdc, and document that they are ignored during timing.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Drop get_max_* Tcl wrappers; use SWIG accessors in tests.
James pointed out the get_max_* commands duplicate existing SWIG
accessors; remove them and call sta::max_* from the regression.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* support for filter in get_scene/mode
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* extend user defined property to all 10 objects
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* address reviews
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
---------
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* support for filter in get_scene/mode
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* defineProperty overload
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* define and set user property
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* address review comments to generalize- current support for mode and scene
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* address second round comments- removed user from cmd names
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* remove defaults, check property vals against type defined
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* address reviews, indent
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* indent fix
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
---------
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
* Use DynamicLatch in DispatchQueue to avoid main thread spinning
Replace the busy-yielding pending_task_count_ loop in DispatchQueue::finishTasks
with a blocking DynamicLatch. This avoids having the main thread consume CPU
cycles while waiting for dispatched tasks to complete.
The DynamicLatch implementation uses C++20 std::atomic::wait/notify_all for
efficient blocking and wakeup, with proper release-acquire semantics to ensure
task results are visible to the waiting thread.
* Reformat DynamicLatch to match DispatchQueue style
* Update attribution headers in DispatchQueue files to note modifications