OpenSTA Timing Analyzer Release Notes
-------------------------------------

This file summarizes user visible changes for each release.
See ApiChangeLog.txt for changes to the STA api.

2026/05/01
----------

The write_sdc command supports a -mode argument.

  write_sdc [-mode mode]

2026/03/23
----------

The write_path_spice command -spice_directory has been changed to
-spice_file, which is a prefix for the spice filenames. Successive
paths are written in files name <spice_file>_<path_number>.sp.

Release 3.0.1 2026/03/12
------------------------

Statistical timing (SSTA) with Liberty LVF (Liberty Variation Format)
models is now supported. Statistical timing uses a probability
distribution to represent a delay or slew rather than a single
number.

Normal and skew normal probability distributions are supported.

SSTA is enabled with the sta_pocv_mode variable.

  set sta_pocv_mode scalar|normal|skew_normal

scalar mode is for non-SSTA analysis
normal mode uses gaussian normal distributions
skew_normal'mode is for skew normal LVF moment based distributions

The target quantile of a delay probability distribution (confidence level) is
set with the sta_pocv_quantile variable.

  sta_pocv_quantile <float>

The default value is 3 standard deviations, or sigma.

Use the variation field with report_checks or report_check_types to see
distribution parameters in timing reports.

A command file for analyzing a design with statistical timing with an
LVF library is shown below.

read_liberty lvf_library.lib.gz
read_verilog design.v
link_design top
create_clock -period 50 clk
set_input_delay -clock clk 1 {in1 in2}
set sta_pocv_mode skew_normal
report_checks -fields {slew variation input_pin variation} -digits 3

Startpoint: r2 (rising edge-triggered flip-flop clocked by clk)
Endpoint: r3 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max

    Slew    Delay Variation     Time   Description
---------------------------------------------------------------------------
   0.000    0.000             0.000   clock clk (rise edge)
            0.000             0.000   clock network delay (ideal)
   0.000    0.000             0.000 ^ r2/CK (FDPQ1)
                    12.026            mean
                     0.017            mean_shift
                     0.366            std_dev
                     0.000            skewness
   4.648   12.409            12.409 v r2/Q (FFQ1)
   4.648    0.000            12.409 v u1/A (BUF1)
                     6.084            mean
                     0.007            mean_shift
                     0.188            std_dev
                     0.000            skewness
   2.513    6.137            18.546 v u1/X (BUF1)
   2.513    0.000            18.546 v u2/A2 (AN21)
                     6.447            mean
                     0.008            mean_shift
                     0.191            std_dev
                     0.000            skewness
   2.565    6.497            25.043 v u2/X (AN21)
   2.565    0.000            25.043 v r3/D (FFQ1)
                             25.043   data arrival time

   0.000   50.000            50.000   clock clk (rise edge)
            0.000            50.000   clock network delay (ideal)
            0.000            50.000   clock reconvergence pessimism
                             50.000 ^ r3/CK (FFQ1)
           -9.376            40.624   library setup time
                             40.624   data required time
---------------------------------------------------------------------------
                             40.624   data required time
                            -25.043   data arrival time
---------------------------------------------------------------------------
                             15.581   slack (MET)


The following commands now support a -report_variance arggument.

  report_arrival [-report_variance]
  report_required [-report_variance]
  report_slack [-report_variance]
  report_slews [-report_variance]
  report_edges [-report_variance]

The following commands now support a -digits option.

  report_edges [-digits digits]
  report_slews [-digits digits]

The standard deviation for normal distributions is specified with the
following liberty timing groups.

  ocv_sigma_cell_rise
  ocv_sigma_cell_fall
  ocv_sigma_rise_transition
  ocv_sigma_fall_transition
  ocv_sigma_rise_constraint
  ocv_sigma_fall_constraint

LVF skew normal distributions are specified with liberty groups below.

  ocv_std_dev_cell_rise
  ocv_std_dev_cell_fall
  ocv_mean_shift_cell_rise
  ocv_mean_shift_cell_fall
  ocv_skewness_cell_rise
  ocv_skewness_cell_fall

  ocv_std_dev_rise_transition
  ocv_std_dev_fall_transition
  ocv_skewness_rise_transition
  ocv_skewness_fall_transition
  ocv_mean_shift_rise_transition
  ocv_mean_shift_fall_transition

  ocv_std_dev_rise_constraint
  ocv_std_dev_fall_constraint
  ocv_skewness_rise_constraint
  ocv_skewness_fall_constraint
  ocv_mean_shift_rise_constraint
  ocv_mean_shift_fall_constraint

2026/02/24
----------

The define_scene -library argument now takes a the library name or a
library filename. If a filename is used, it must be the same as the
filename used to read the library with read_liberty.

Release 3.0.0 2025/11/26
------------------------

This release adds multi-corner multi-mode (mcmm) support. The SDC
constraints in each mode describe a different operating mode, such as
mission mode or scan mode.

A "scene" is the combination of a mode and corner. Each scene can have
separate min/max liberty and spef files.

THe basic structure of a multi-corner/multi-mode command file is
 read_liberty
 read_verilog
 link_design
 read_sdc -mode... or set_mode followed by sdc commands
 read_spef -name...
 define_scene...
 report_checks [-scenes]

This is an example script with 2 corners, 2 modes and 3 scenes.

read_liberty bc.lib
read_liberty wc.lib

read_verilog design.v
link_design top

read_sdc -mode run design.sdc
read_sdc -mode scan design_scan.sdc

read_spef -name bc bc.spef
read_spef -name wc wc.spef

define_scene bc \
  -mode run \
  -liberty bc \
  -spef bc
define_scene wc \
  -mode run \
  -liberty wc \
  -spef wc
define_scene scan \
  -mode scan \
  -liberty wc \
  -spef wc

report_checks
report_checks -scenes bc
report_checks -scenes wc
report_checks -scenes scan

................

Alternatively, the set_mode command can be used to define commands
for each mode at the command level instead of using SDC files.

set_mode run
create_clock -period 10 clock
set_input_delay 0 -clock clock [all_inputs -no_clocks]
set_output_delay 0 -clock clock [all_outputs]

set_mode scan
create_clock -period 100 scan_clock
set_input_delay 0 -clock scan_clock scan_in
set_output_delay 0 -clock scan_clock scan_out

................

The define_corners command is supported for compatiblity but should
not be used with mcmm flows. Similarly, the -min/-max arguemnts to
read_liberty and read_spaf are supported for compabibility but should
not be used with mcmm flows.

................

An initial mode and scene named "default" are defined for single mode,
single corner analysis. SDC commands defined interactively and read
with read_sdc without a -mode argument are defined in the "default"
mode.

Use the set_mode command to define a mode or set the command
interpreter to add following commands to mode mode_name.

  set_mode mode_name

If mode_name does not exist it is created. When modes are created the
default mode is deleted.

The read_sdc command has a -mode argument to assign the commands in the file
to a mode.

  read_sdc [-mode mode_name]

If the mode does not exist it is created. Multiple SDC files can
append commands to a mode by using the -mode_name argument for each
one. If no -mode arguement is is used the commands are added to the
current  mode.

................

The define_scene command defines a scene for a mode (SDC), liberty files
and spef parasitics.

  define_scene -mode mode_name
    -liberty liberty_files | -liberty_min liberty_min_files -liberty_max liberty_max_files
    [-spef spef_file | -spef_min spef_min_file -spef_max spef_max_file]

Use get_scenes to find defined scenes.

  get_scenes [-modes mode_names] scene_name

................

Use the read_spef -name argument to append multiple parasitics files
to annotate hierarchical blocks. Scene definitions use the spef_name
to specify which parasitices to use for each scene.

  read_spef -name spef_name
  report_parasitic_annotation [-name spef_name]

If -name is omitted the base name of the file name is used.

The read_spef -corner/-min/-max arguments are supported for comppatibility
but will be removed in a future release.

The read_spef -reduce options don't work because sdc, liberty ap isn't known

................

The report_checks and report_check_typescommands support a -scenes
argument to report timing checks/paths from multiple scenes.

  report_checks -scenes
  report_check_types -scenes
  report_slews -scenes
  report_clock_latency -scenes

................

To annotate delays with SDF when there are multiple scenes, use
the -scene argument. 

  read_sdf -scene
  report_annotated_delay -scene
  report_annotated_check -scene

SDF annotation for mcmm analysis must follow the scene definitions.

................

VCD annotation with read_vcd now supports a -mode arguement.

  read_vcd [-mode mode_name]

................

The -corner args has been removed from the following commands because they are no
longer necessary.
  set_load -corner
  set_port_fanout_number -corner

................

The report_pulse_width_checks command is no longer supported. Use
report_check_types -min_pulse_width.

................

Delay calculation slew values now propagate through set_case_analysis
and set_logic_zero, set_logic_one, set_logic_dc constraints.

Power analysis now ignores set_case_analysis and set_logic_zero,
set_logic_one, set_logic_dc.

Release 2.7.0 2025/05/19
-------------------------

The OpenSTA library `libOpenSTA` and `sta` executable are now built in the
build directory instead of `app/`.

The set_max_delay and set_min_delay commands now support the -probe option.
With -probe these commands do not break paths at internal (non-startpoint) pins.

The report_checks command now supports a -unique_edges_to_endpoint option
to remove paths through identical pins and rise/fall edges.

  report_checks [-unique_edges_to_endpoint]

Instances now have pins for verilog netlist power/ground connections,

Sta::findPathEnds group_paths arg has been changed from PathGroupNameSet*
to StringSeq&.

Release 2.6.1 2025/03/30
-------------------------

The -list_annotated and -list_not_annotated arguments to the
report_annotated_delay and report_annotated_check commands have been renamed to
-report_annotated and -report_unannotated.

The Tcl "source" command is no longer redefined to support "-echo" and
"-verbose" arguments and redirecton. Use the "include" command instead.

 include [-echo] [-verbose] filename [> filename] [>> filename]
  -echo echos commands as they are read
  -verbose prints command results as they are evaluated
  
Unlike the Tcl source command, "include" expands filenames with tilda '~'
and respects sta_continue_on_error.

Release 2.6.0 2024/07/22
-------------------------

The version of c++ used by OpenSTA is now 17.
The Cudd BBD packager is now required.

The USE_TCL_READLINE option defaults to ON.

The variable link_make_black_boxes has been removed.
Use the -no_black_boxes option to the link_design command.

  link_design [-no_black_blocks] [top_cell_name]

The all_inputs command now supports -no_clocks to remove clocks
inputs from the returned list.

  all_inputs [-no_clocks]

The read_power_activities command has been deprecated. Use read_vcd instead.

  read_vcd [-scope scope] filename

The Switching Activity Interchange Format (SAIF) for reading power activities
is now supported by the the read_saif command.

  read_saif [-scope scope] filename   

The report_checks -group_count option has been renamed to -group_path_count.
The report_checks -endpoint_count option has been renamed to -endpoint_path_count.

The report_checks -field hierarchical_pins field reports hierarchical pins between
a driver and a load in the path report.

The suppress_msg and unsuppress_msg commands allow suppression/unsuppression of
warnings/errors by ID. Message IDs can be found in doc/messages.txt.

Release 2.5.0 2024/01/17
-------------------------

The report_net -connections, -verbose and -hier_pins flags are deprecated.
The report_instance -connections and -verbose flags are deprecated.
The options are now enabled in all cases.

The read_spef parasitic reduction arguments have changed. The
-reduce_to and -delete_after_reduce arguments are deprecated and
replaced with the -reduce flag. With the -reduce flag, the current
delay calculator reduces the parastic network to the appropriate type
and deletes the parasitic network.

The report_clock_skew and report_clock_latency commands now supports
the -include_internal_latency flag to control inclusion of macro
internal clock delays from the cell liberty min/max_clock_tree_path
timing groups.

  report_clock_skew -include_internal_latency
  report_clock_latency -include_internal_latency

The report_clock_skew requires a -scene argument if multiple scenes are defined.

The all_inputs command now supports the -no_clocks argument to exclude
clocks from the list.

  all_inputs [-no_clocks]

The report_activity_annotation command reports power activity annotaton
from vcd, saif or the set_input_activity command.

  report_activity_annotation [-report_unannotated] [-report_annotated]

Release 2.4.0 2023/01/19
-------------------------

The report_parasitics_annotation command reports SPEF annotation completeness.

  report_parasitics_annotation [-report_unannotated]

The read_power_activities command reads a verilog vcd file and extracts
pin activities for power analysis.

  read_power_activities -vcd filename

The report_cell command has been removed; use report_instance.

The read_liberty command latch inference (see OpenSTA.pdf) is now disabled by default.
The -no_latch_infer flag is deprecated.
To enable latch inference, use the -infer_latches flag.

The report fanout and capacitance fields are now shown on output pin lines rather
than net lines.

Release 2.3.3 2022/09/24
-------------------------

TCL readline support added. See README.md for build instructions.

Release 2.3.2 2022/07/03
-------------------------

The liberty default_wire_load is now ignored. You must explicitly set the wire load
model with the set_wire_load_model command to apply wire load model based parasitics.

Release 2.3.1 2020/11/08
-------------------------

The read_sdf command no longer supports the -analysis_type, -type, -min_type,
and -max_type arguments. Use the set_operating_conditions -analysis_type
command to set the analysis type before read_sdf.

Release 2.2.0 2020/07/18
-------------------------

The report_units reports the current units used by commands.

  report_units

The report_check_types -min_fanout -max_fanout -max_capacitance -min_capacitance

  report_check_types [-min_fanout] [-max_fanout] [-max_capacitance] [-min_capacitance]


The insert_buffer command is no longer supported.

Release 2.0.0 2018/09/28
-------------------------

The command line options have changed to the following:

  -help              show help and exit
  -version           show version and exit
  -no_init           do not read .sta init file
  -threads count|max use count threads
  -no_splash         do not show the license splash at startup
  -exit              exit after reading cmd_file
  cmd_file           source cmd_file


....

Builds using Autotools/configure are no longer supported.
Use CMake as documented in README.md.

....

The check_timing command -no_output_delay checks output ports for
set_output_delay.

....

The report_power command reports the power consumption of the design
or a specific instance.

  report_power [-instances inst] [-digits digits] [> filename] [>> filename]

The internal, switching, leakage and total power are reported. Design
power is reported separately for combinational, sequential, macro and
pad groups.

Use -instances to report power for a specific instance.

Use the set_power_activity command to specify activity/duty
globally using -global, the input port default using -input,
or for input ports using -input_ports, or pins using -pins.

 set_power_activity [-global]
                    [-input]
                    [-input_ports ports]
		    [-pins pins]
		    [-activiity activity]
		    [-duty duty]

....

The write_path_spice command writes a spice netlist for a timing path.

  write_path_spice -path_args path_args
    -spice_directory spice_directory
    -subckt_file subckt_file
    -lib_subckt_file lib_subckts_file\
    -model_file model_file
    -power power
    -ground ground
    
Use path_args to specify -from/-through/-to as arguments to the
find_timing_paths command. For each path, a spice netlist and the
subckts referenced by the path are written in spice_directory.  The
spice netlist is written in path_<id>.sp and subckt file is
path_<id>.subckt.

Spice netlists for liberty library cells are read from
lib_subckts_file.  The spice netlists used by the path are written to
subckt_file, which spice_file .includes. The device models used by the
spice subckt netlists in model_file are .included in spice_file. Power
and ground names are specified with the -power and -ground arguments.
The spice netlist includes a piecewise linear voltage source at the
input and .measure statement for each gate delay and pin slew.

....

The report_checks and report_check_types commands now support an
-unconstrained flag.

  report_checks -unconstrained
  report_check_types -unconstrained

The sta_report_unconstrained_paths variable will be supported for
for compatibility in the current release.

....

The transition_time path reporting field has been renamed to slew.

  report_checks -fields {slew}
  report_check_types -fields {slew}

...

The read_parasitics command has been renamed read_spef and no longer
supports the SPF format.

....

The make_instance command now takes a single instance name argument
and returns the instance.

  make_instance instance_name

The make_net command now takes a single net name argument and returns
the net.

  make_net net_name

The delete_instance command deletes a single instance instead of a list
of instances.

  delete_instance instance

The delete_net command deletes a single net instead of a list
of nets.

  delete_net net

The disconnect_pins command is renamed disconnect_pin and disconnects a
single pin.

  disconnect_pin net pin

The report_tns and report_wns commands print the value returned by
total_negative_slack and worst_negative_slack respectively.

  report_tns
  report_wns
  report_worst_slack

The set_clock_sense command was deprecated by SDC 2.1.
Use set_sense -type clock instead.

# Local Variables:
# mode:text
# End:
