OpenSTA engine
Go to file
James Cherry 400c473fe3 Levelize rewrite
commit 34f392b19f13b8a55371f0149de8fec3e76aeffa
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Apr 17 13:21:45 2025 -0700

    in_degree itr

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

commit 745e11326d109dddf798843cbbefc4aac79a8bc8
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Apr 17 11:00:52 2025 -0700

    levelize invalid cleanup

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

commit 501cfc7ebbc601db7f87c4c1fe70224fca904ce7
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Apr 17 10:15:16 2025 -0700

    refactor

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

commit b1f0245f9ad7c7c140580e46a0e9c14742b6b448
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Apr 17 09:47:05 2025 -0700

    Levelize use bit field for on_path

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

commit 1ecb617bf0894a290d6240a6150f1d31653e56fb
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Apr 16 19:17:56 2025 -0700

    levelize static alloc

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

commit 100c7c5a10581f52f6b5c7c2d4b5614d19549e23
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Apr 16 18:15:39 2025 -0700

    levelize use visited flag

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

commit a72bdc4322c3ea9f34d0144fdf1f74acfbed39fb
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Apr 16 15:59:25 2025 -0700

    findCycleBackEdges

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

commit 21f5e9737cfd7c41a5444592920320cfe0de559c
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Apr 16 15:51:17 2025 -0700

    Levels find back edges from roots with fanout

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

commit ca2fe71e506c61f05401a52f3b6df3153c2e2393
Author: James Cherry <cherry@parallaxsw.com>
Date:   Tue Apr 15 19:26:50 2025 -0700

    rm Vertex::color

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

commit 628a973c69eab99929d32a2f5b1810dce71cbab1
Author: James Cherry <cherry@parallaxsw.com>
Date:   Tue Apr 15 18:45:19 2025 -0700

    set max_level in Levelize::setLevel

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

commit 874c8e10691a47fff06a89c66d66dbb63def9682
Author: James Cherry <cherry@parallaxsw.com>
Date:   Tue Apr 15 17:29:22 2025 -0700

    levelize passes all regressions

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

commit 790eae362a7423aa7e18432faaae7459a56976d7
Author: James Cherry <cherry@parallaxsw.com>
Date:   Tue Apr 15 08:45:27 2025 -0700

    levelize stats

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

commit 26067a99a4fbc81d94dbc1022ea5d9ddd64780a0
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 22:20:56 2025 -0700

    pass fast

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

commit 635bf478117014dd22d27c4f6bd65b260e51ec35
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 18:00:03 2025 -0700

    comment

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

commit 5fd2e9d1dd3a00494d56d967d21251f20e3a1f2c
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 17:59:00 2025 -0700

    rm levelizeFrom()

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

commit 078205723e2ce1f9be2e1360be80e5f9d25e978b
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 14:46:48 2025 -0700

    leak

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

commit 412c9a8ead792ee01e46a545c065c174e8342abc
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 13:41:07 2025 -0700

    levelize level init

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

commit 7883e3b1bac990f33cf7fce24fe43a0614f43daa
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 12:59:45 2025 -0700

    relevelize insert only after levelized

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

commit 263da8dc56469f0408d1cfbc7c40a079bc90dc9f
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 11:58:55 2025 -0700

    topo level init

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

commit 9de2ae3128a9ae427653c13152aa796f76277419
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 11:21:14 2025 -0700

    levelize pass fast

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

commit 8ba8310850ed1cdaf718b93bf44966043ab2042d
Author: James Cherry <cherry@parallaxsw.com>
Date:   Mon Apr 14 10:04:42 2025 -0700

    constant latch en

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

commit 8f543c3d5b261373d9b8f2da000322e529da7fb4
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Apr 13 19:36:23 2025 -0700

    levelize topological sort

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

commit 4c2ae84839edd9f6797b834d7fd4f644e77855f8
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Apr 13 16:14:36 2025 -0700

    levelize bfs cleanup

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

commit 186f50e8255fcae814f98cc7f253cfd3ba9a6c1d
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Apr 13 15:25:00 2025 -0700

    levelize bfs

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

commit 1cefb185caaea64fc568c5d1ba4e7f5a961b0ba3
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sun Apr 13 12:16:49 2025 -0700

    levelize with bfs

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

commit 5181e6b13ff38b52d13460e6abfee3202d4935c0
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sat Apr 12 18:33:44 2025 -0700

    findBackEdges use sorted roots

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

commit b25ac1a7d0ec2e835cddbf53930fa5f9f2a5b299
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sat Apr 12 15:32:33 2025 -0700

    find back edges

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

Signed-off-by: James Cherry <cherry@parallaxsw.com>
2025-04-17 16:53:55 -07:00
app source -> include resolves #202 2025-03-30 15:24:10 -07:00
cmake survive tcl9 damage infliced by homebrew/OpenROAD DependencyInstaller 2025-01-02 15:20:41 -08:00
dcalc remove using std from headers 2025-04-11 16:59:48 -07:00
doc Add shorthand versions of -echo and -verbose to `include`. (#236) 2025-04-17 16:50:16 -07:00
etc msg: Make tclArgError use report logger, accept msg id and be parsed by FindMessages. (#216) 2025-02-14 15:33:16 -08:00
examples gcd_sky130hd.saif 2025-04-04 15:24:40 -07:00
graph Levelize rewrite 2025-04-17 16:53:55 -07:00
include/sta Levelize rewrite 2025-04-17 16:53:55 -07:00
jenkins dockerfile cleanup 2020-11-02 18:15:35 -08:00
liberty remove using std from headers 2025-04-11 16:59:48 -07:00
network remove using std from headers 2025-04-11 16:59:48 -07:00
parasitics remove using std from headers 2025-04-11 16:59:48 -07:00
power remove using std from headers 2025-04-11 16:59:48 -07:00
sdc Levelize rewrite 2025-04-17 16:53:55 -07:00
sdf remove using std from headers 2025-04-11 16:59:48 -07:00
search Levelize rewrite 2025-04-17 16:53:55 -07:00
spice remove using std from headers 2025-04-11 16:59:48 -07:00
tcl Add shorthand versions of -echo and -verbose to `include`. (#236) 2025-04-17 16:50:16 -07:00
test prima3.ok 2025-04-10 11:17:19 -07:00
util linux compile resolves #235 2025-04-12 10:53:34 -07:00
verilog remove using std from headers 2025-04-11 16:59:48 -07: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 Put generated StaConfig.hh into build artifacts. (#230) 2025-04-17 16:43:00 -07:00
Brewfile Add `Brewfile`, recommend `brew bundle install`, small typo fixes (#226) 2025-03-29 08:48:20 -07:00
CMakeLists.txt Put generated StaConfig.hh into build artifacts. (#230) 2025-04-17 16:43:00 -07:00
Dockerfile.centos7 Update Dockerfile.centos7 (#206) 2025-02-04 16:34:50 -08: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 Add `Brewfile`, recommend `brew bundle install`, small typo fixes (#226) 2025-03-29 08:48:20 -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 development are exclusive to Parallax Software.

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 shown 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

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

The TCL readline library links the GNU readline library to the TCL interpreter for command line editing 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.

Building 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

Build on Macos/Darwin

The XCode versions of Tcl, Flex and Bison cannot be used to build OpenSTA. Use Homebrew to install them. The following command installs the tools required to build OpenSTA in the Brewfile.

brew bundle install

Set these variables before using cmake to cirumvent the Xcode versions.

  # flex/bison override apple version
  export PATH="$(brew --prefix bison)/bin:${PATH}"
  export PATH="$(brew --prefix flex)/bin:${PATH}"
  export CMAKE_INCLUDE_PATH="$(brew --prefix flex)/include"
  export CMAKE_LIBRARY_PATH="$(brew --prefix flex)/lib;$(brew --prefix bison)/lib"

Homebrew does not support tclreadline, but the macports system does (see https://www.macports.org).

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.

Contributions

Contributors must sign the Contributor License Agreement (doc/CLA.txt) when submitting pull requests.

All contributors should read doc/CodingGuidelines.txt for notes on making code that adheres to the existing naming and formatting style.

Contributions that claim 4% performance improvements in OpenROAD flow scripts will largely be ignored. Small performance improvements simply do not justify the time required to audit and verify the changes.

Contributions that add dependencies on external libraries like boost, abseil and Intel TBB will not be accepted.

As the author of OpenSTA I vastly prefer writing code to reviewing code. I don't have the patience to go round after round to correct code formatting that is not consistent with the rest of the code.

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/.