OpenSTA engine
Go to file
James Cherry e7eebc98a3 read_vcd, report_activity_annotation resolves #162 resolves $158
commit 02be8357f8ba158292faab0e8d8b8d220e69c842
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 15 15:59:20 2025 -0700

    sort regressions

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit b0e1d863d34853b70d342c6bb0baa400a08db207
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 15 15:44:07 2025 -0700

    PowerResult::incf*

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 23ed0ed05d8bbf83cc5b6fa7598f1253cbe2b222
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Jan 12 17:49:24 2025 -0700

    gzip vcd/saif

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit a5a1a7b80e00b2deb51505b2e60312e3c29284fe
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Jan 12 17:12:09 2025 -0700

    report_activity_annotation sort pins

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 6c149cc6d66addda4eee5f56dbe4731876f1efa9
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Jan 12 16:47:02 2025 -0700

    vcd/saif do not annotate internal pins

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit fe8c7c7fc7b2878cb16c7d2a57e1161555f9a36f
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sat Jan 11 17:09:22 2025 -0700

    report_activity_annotation

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 8a8f87ba05c6c6f31017288d573c23e92cac4f9e
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 10 11:57:22 2025 -0700

    ReadVcdActivies factor VcdCountReader

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit aa70ae987c4a749e53ae2f93c8ff04a3c28b0b08
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 10 09:06:09 2025 -0700

    vcd high time

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 242493e992949ee72493f4f15a0fe92630ad2f03
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 9 17:14:02 2025 -0700

    comment

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 8621a83d7abf5efcf54c24a1a16bba0c8eb5e441
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 9 17:11:22 2025 -0700

    ReadVcdActivities rm sta_

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit fc0327c39c5aef6d09580795f6a13abf9b9f8266
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 9 09:36:30 2025 -0700

    var name

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit a5b6e2ac66cef9355a9a87edcc185b483f5781ce
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 9 08:23:50 2025 -0700

    vcd passes

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit c0f6d268542b3dd431882cfa4e3d131d6d2fb933
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 20:19:27 2025 -0700

    vcd

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 8181e206ee39e4c3fdd69ef1d3463092763c3d2b
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 19:41:59 2025 -0700

    vcd debug

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 652736654b853d1f7fb64545c6a48500e1e3b83f
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 19:17:06 2025 -0700

    vcd bus support

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 03c877512d92b0148fd62cbc636da58ef6fb25ff
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 19:11:21 2025 -0700

    vcd

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 53bbd97a28d619ca87a546f34a3643c227b9df78
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 16:02:47 2025 -0700

    rm Vcd structs, ReadVcdActivities -> VcdReader

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 745efff41221c3b06ba19931e4f8a58e5b0758ae
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 15:46:49 2025 -0700

    vcd skip hpins

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit a9a6177e8b671f0619809611984ed16f2d1a5b7a
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 15:39:41 2025 -0700

    ReadVcdActivies rm vcd_

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 8b51b13b02c257d10385312d246e0da1f11b72f2
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 15:28:31 2025 -0700

    power_vcd1 passes

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 744669797d1a4189c417d9d2f359cbd1f5bc7113
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 8 10:16:35 2025 -0700

    vcd

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 0f0aeac1cd8349302b758ce4b79fd753063565f2
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Jan 6 16:20:13 2025 -0800

    vcd reader

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 01d296ce9b3ad8ac7e6dddf28a41a718b4138869
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Jan 5 16:08:41 2025 -0800

    vcd rm max_var_width

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 9ffdb19074e5c38464b88ead0ec751ae7d3c506c
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Jan 5 16:03:06 2025 -0800

    vcd rm max_var_name_length_

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 5c577143d4a166bd133a9d97d1761b52b8e122dd
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Jan 5 15:58:29 2025 -0800

    ReadVcdActivities isa VcdReader

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 6914405d0799b967a92634fe1aa251aaea4cdfbc
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sat Jan 4 17:24:57 2025 -0800

    vcd parse rm StaState dependence

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit a0bd7aa5eee2e87c883776bf4840d117335e4a8b
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sat Jan 4 16:41:55 2025 -0800

    vcd headers

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

commit 4842d19d7a5c47d6ee46f297cb9404ab77fe2662
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sat Jan 4 15:59:46 2025 -0800

    refactor vcd parser

    Signed-off-by: James Cherry <cherry@parallaxsw.com>

Signed-off-by: James Cherry <cherry@parallaxsw.com>
2025-01-15 16:20:21 -07:00
app Update `Dockerfile.ubuntu_18.04` and remove `filesystem` dependence completely in `Main.cc` 2024-08-12 05:21:53 -07:00
cmake survive tcl9 damage infliced by homebrew/OpenROAD DependencyInstaller 2025-01-02 15:20:41 -08:00
dcalc issue 149, 150, cmdNetwork->Sta::ensureLinked check libs 2024-12-19 16:03:39 -07:00
doc read_vcd, report_activity_annotation resolves #162 resolves $158 2025-01-15 16:20:21 -07:00
etc FindMessages.tcl 2024-08-12 20:10:31 -07:00
examples read_vcd, report_activity_annotation resolves #162 resolves $158 2025-01-15 16:20:21 -07:00
graph get_* do not require liberty resolves #161 2024-12-31 15:49:51 -08:00
include/sta read_vcd, report_activity_annotation resolves #162 resolves $158 2025-01-15 16:20:21 -07:00
jenkins dockerfile cleanup 2020-11-02 18:15:35 -08:00
liberty liberty reader rm static_casts 2025-01-15 12:21:57 -07:00
network get_* do not require liberty resolves #161 2024-12-31 15:49:51 -08:00
parasitics read_vcd, report_activity_annotation resolves #162 resolves $158 2025-01-15 16:20:21 -07:00
power read_vcd, report_activity_annotation resolves #162 resolves $158 2025-01-15 16:20:21 -07:00
sdc docker valgrind 2025-01-11 10:04:11 -07:00
sdf get_* do not require liberty resolves #161 2024-12-31 15:49:51 -08:00
search report_checks -endpoint_path_count -slack_min 2025-01-15 09:17:14 -07:00
spice issue 149, 150, cmdNetwork->Sta::ensureLinked check libs 2024-12-19 16:03:39 -07:00
tcl Add {`instance`, `cell`, `verilog_src`, `pin`, `net`, `hier_pins`, `capacitance`} fields to `report_checks -format json` for paths (#135) 2025-01-13 19:28:04 -08:00
test read_vcd, report_activity_annotation resolves #162 resolves $158 2025-01-15 16:20:21 -07:00
util ReportTcl const resolves #166 2025-01-08 11:38:29 -07:00
verilog verilog reader cleanups 2024-12-28 15:48:18 -08:00
.clang-format clang-format 2020-05-14 18:05:34 -07:00
.dockerignore polishing OpenSTA Docker image 2019-01-17 17:21:33 -05:00
.gitignore Initial Pass at Attribute parsing 2024-03-09 22:02:19 +00:00
CMakeLists.txt read_vcd, report_activity_annotation resolves #162 resolves $158 2025-01-15 16:20:21 -07:00
Dockerfile.centos7 docker valgrind 2025-01-11 10:04:11 -07:00
Dockerfile.ubuntu22.04 docker valgrind 2025-01-11 10:04:11 -07:00
Jenkinsfile jenkins support 2020-01-27 10:59:14 -07:00
LICENSE LICENSE 2019-06-09 22:33:42 -07:00
README.md rename Dockerfile.ubuntu_22.04 -> Dockerfile.ubuntu22.04 2025-01-08 12:12:44 -07:00

README.md

Parallax Static Timing Analyzer

OpenSTA is a gate level static timing verifier. As a stand-alone executable it can be used to verify the timing of a design using standard file formats.

  • Verilog netlist
  • Liberty library
  • SDC timing constraints
  • SDF delay annotation
  • SPEF parasitics
  • VCD power acitivies
  • SAIF power acitivies

OpenSTA uses a TCL command interpreter to read the design, specify timing constraints and print timing reports.

Clocks
  • Generated
  • Latency
  • Source latency (insertion delay)
  • Uncertainty
  • Propagated/Ideal
  • Gated clock checks
  • Multiple frequency clocks
Exception paths
  • False path
  • Multicycle path
  • Min/Max path delay
  • Exception points
  • -from clock/pin/instance -through pin/net -to clock/pin/instance
  • Edge specific exception points
  • -rise_from/-fall_from, -rise_through/-fall_through, -rise_to/-fall_to
Delay calculation
  • Integrated Dartu/Menezes/Pileggi RC effective capacitance algorithm
  • External delay calculator API
Analysis
  • Report timing checks -from, -through, -to, multiple paths to endpoint
  • Report delay calculation
  • Check timing setup
Timing Engine

OpenSTA is architected to be easily bolted on to other tools as a timing engine. By using a network adapter, OpenSTA can access the host netlist data structures without duplicating them.

  • Query based incremental update of delays, arrival and required times
  • Simulator to propagate constants from constraints and netlist tie high/low

See doc/OpenSTA.pdf for command documentation. See doc/ChangeLog.txt for changes to commands. See doc/StaApi.txt for timing engine API documentation.

OpenSTA is dual licensed. It is released under GPL v3 as OpenSTA and is also licensed for commerical applications by Parallax Software without the GPL's requirements.

OpenSTA is open source, meaning the sources are published and can be compiled locally. Derivative works are supported as long as they adhere to the GPL license requirements. However, OpenSTA is not supported by a public community of developers as many other open source projects are. The copyright and develpment are exclusive to Parallax Software. Contributors must signing the Contributor License Agreement (doc/CLA.txt) when submitting pull requests.

Removing copyright and license notices from OpenSTA sources (or any other open source project for that matter) is illegal. This should be obvious, but the author of OpenSTA has discovered two different cases where the copyright and license were removed from source files that were copied.

The official git repository is located at https://github.com/parallaxsw/OpenSTA.git. Any forks from this code base have not passed extensive regression testing which is not publicly available.

Build from source

OpenSTA is built with CMake.

Prerequisites

The build dependency versions are show below. Other versions may work, but these are the versions used for development.

         Ubuntu   Macos
        22.04.2   14.5
cmake    3.24.2    3.29.2
clang             15.0.0
gcc      11.4.0
tcl       8.6      8.6.16
swig      4.1.0    4.1.1
bison     3.8.2    3.8.2
flex      2.6.4    2.6.4

Note that flex versions before 2.6.4 contain 'register' declarations that are illegal in c++17.

External library dependencies:

           Ubuntu   Darwin  License
eigen       3.4.0   3.4.0   MPL2  required
cudd        3.0.0   3.0.0   BSD   required
tclreadline 2.3.8   2.3.8   BSD   optional
zLib        1.2.5   1.2.8   zlib  optional

On Darwin/MacOS the Xcode supplied versions of Tcl, Flex and Bison are problematic. Use homebrew to install them instead.

brew install cmake bison flex swig tcl-tk@8 eigen zlib

Note that the most recent versions of homebrew install Tcl9, which is not supported because swig does not support it yet. Install tcl8 as shown above.

The TCL readline library links the GNU readline library to the TCL interpreter for command line editing On OSX, Homebrew does not support tclreadline, but the macports system does (see https://www.macports.org). To enable TCL readline support use the following Cmake option: See (https://tclreadline.sourceforge.net/) for TCL readline documentation. To change the overly verbose default prompt, add something this to your ~/.sta init file:

if { ![catch {package require tclreadline}] } {
  proc tclreadline::prompt1 {} {
    return "> "
  }
}

The Zlib library is an optional. If CMake finds libz, OpenSTA can read Liberty, Verilog, SDF, SPF, and SPEF files compressed with gzip.

CUDD is a binary decision diageram (BDD) package that is used to improve conditional timing arc handling, constant propagation, power activity propagation and spice netlist generation.

CUDD is available here.

Unpack and build CUDD.

tar xvfz cudd-3.0.0.tar.gz
cd cudd-3.0.0
./configure
make

You can use the "configure --prefix" option and "make install" to install CUDD in a different directory.

Installing with CMake

Use the following commands to checkout the git repository and build the OpenSTA library and excutable.

git clone https://github.com/parallaxsw/OpenSTA.git
cd OpenSTA
mkdir build
cd build
cmake -DCUDD_DIR=<CUDD_INSTALL_DIR> ,.
make

The default build type is release to compile optimized code. The resulting executable is in app/sta. The library without a main() procedure is app/libSTA.a.

Optional CMake variables passed as -D= arguments to CMake are show below.

CMAKE_BUILD_TYPE DEBUG|RELEASE
CMAKE_CXX_FLAGS - additional compiler flags
TCL_LIBRARY - path to tcl library
TCL_HEADER - path to tcl.h
CUDD_DIR - path to cudd installation
ZLIB_ROOT - path to zlib
CMAKE_INSTALL_PREFIX

If TCL_LIBRARY is specified the CMake script will attempt to locate the header from the library path.

The default install directory is /usr/local. To install in a different directory with CMake use the CMAKE_INSTALL_PREFIX option.

If you make changes to CMakeLists.txt you may need to clean out existing CMake cached variable values by deleting all of the files in the build directory.

Build with Docker

An alternative way to build and run OpenSTA is with Docker. After installing Docker, the following command builds a Docker image.

cd OpenSTA
docker build --file Dockerfile.ubuntu22.04 --tag OpenSTA .

To run a docker container using the OpenSTA image, use the -v option to docker to mount direcories with data to use and -i to run interactively.

docker run -i -v $HOME:/data OpenSTA

Bug Reports

Use the Issues tab on the github repository to report bugs.

Each issue/bug should be a separate issue. The subject of the issue should be a short description of the problem. Attach a test case to reproduce the issue as described below. Issues without test cases are unlikely to get a response.

The files in the test case should be collected into a directory named YYYYMMDD where YYYY is the year, MM is the month, and DD is the day (this format allows "ls" to report them in chronological order). The contents of the directory should be collected into a compressed tarfile named YYYYMMDD.tgz.

The test case should have a tcl command file recreates the issue named run.tcl. If there are more than one command file using the same data files, there should be separate command files, run1.tcl, run2.tcl etc. The bug report can refer to these command files by name.

Command files should not have absolute filenames like "/home/cho/OpenSTA_Request/write_path_spice/dump_spice" in them. These obviously are not portable. Use filenames relative to the test case directory.

Authors

  • James Cherry

  • William Scott authored the arnoldi delay calculator at Blaze, Inc which was subsequently licensed to Nefelus, Inc that has graciously contributed it to OpenSTA.

License

OpenSTA, Static Timing Analyzer Copyright (c) 2023, Parallax Software, Inc.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.