OpenSTA engine
Go to file
James Cherry c9a8726707 c++ sdf reader
commit da9f267cbb3ed711bff3d2e2c1470fa12f7de26c
Author: James Cherry <cherry@parallaxsw.com>
Date:   Sat Jan 25 11:31:41 2025 -0700

    zlib optional

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

commit dfbe36202ef77f77e1a7c42163db9f6a5d9a8380
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 19:24:05 2025 -0700

    sdf use option for prefix

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

commit bd7fc399ddfa472e25606c92421c123a725181da
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 18:57:46 2025 -0700

    mv sdf error to reader

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

commit 088d43b0e5c90b0bc24c64384164f1bcc50c5165
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 18:48:28 2025 -0700

    sdf lex use option for previs

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

commit 6ccf8c33bd8c44fdd914d9a36fa703a7594353e2
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 17:10:07 2025 -0700

    sdf error

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

commit 43794955a9f79a2900bb8e4cef030a907347627a
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 16:13:00 2025 -0700

    SdfParse reorg sections

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

commit 666062124f5718a512092fcdd295827cfb2b6c51
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 16:07:51 2025 -0700

    sdf lex previs

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

commit 83e9925e09817f39d60ae0292fd9eed5e6c40f43
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 16:05:11 2025 -0700

    sdf clenup directives

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

commit dd71619af605abdaaaa9feb0800eb78e225828d6
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 11:41:47 2025 -0700

    sdf parse valgrind pass

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

commit c068e6512824ac27a99fdaa6dcd9a908ee991857
Author: James Cherry <cherry@parallaxsw.com>
Date:   Fri Jan 24 08:45:39 2025 -0700

    sdf parse

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

commit 454602fbd464387442cd1e296f3f0e3b5c366e52
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 23 21:50:24 2025 -0700

    sdf parse passes

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

commit a352451c163f95f82446f2a25d39706f68ae98d6
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 23 19:15:09 2025 -0700

    sdf parse pass all but 1

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

commit 87d537582134a767a13ec4596957b7d7a8e1edfd
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 23 12:53:15 2025 -0700

    sdf parse report_checks4

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

commit c2ee81a51d4fba1281bf452055c9113af7a0de1f
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 23 12:30:25 2025 -0700

    sdf link

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

commit d71e4b0c8f95256ab3ec9e53e26218baaa3c9f8c
Author: James Cherry <cherry@parallaxsw.com>
Date:   Thu Jan 23 12:02:45 2025 -0700

    sdf parse compiles

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

commit 6ca6800d5cd52640e275bf7eb77a8b1db85e2957
Author: James Cherry <cherry@parallaxsw.com>
Date:   Wed Jan 22 18:19:27 2025 -0700

    sdf reader c++

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

Signed-off-by: James Cherry <cherry@parallaxsw.com>
2025-01-25 11:34:04 -07:00
app update copyright 2025-01-21 18:54:33 -07:00
cmake survive tcl9 damage infliced by homebrew/OpenROAD DependencyInstaller 2025-01-02 15:20:41 -08:00
dcalc update copyright 2025-01-21 18:54:33 -07:00
doc update copyright 2025-01-21 18:54:33 -07:00
etc comments 2025-01-22 11:16:14 -07:00
examples read_vcd, report_activity_annotation resolves #162 resolves $158 2025-01-15 16:20:21 -07:00
graph update copyright 2025-01-21 18:54:33 -07:00
include/sta verilog parser 2025-01-25 11:21:40 -07:00
jenkins dockerfile cleanup 2020-11-02 18:15:35 -08:00
liberty update copyright 2025-01-21 18:54:33 -07:00
network update copyright 2025-01-21 18:54:33 -07:00
parasitics update copyright 2025-01-21 18:54:33 -07:00
power update copyright 2025-01-21 18:54:33 -07:00
sdc update copyright 2025-01-21 18:54:33 -07:00
sdf c++ sdf reader 2025-01-25 11:34:04 -07:00
search update copyright 2025-01-21 18:54:33 -07:00
spice update copyright 2025-01-21 18:54:33 -07:00
tcl update copyright 2025-01-21 18:54:33 -07:00
test update copyright 2025-01-21 18:54:33 -07:00
util update copyright 2025-01-21 18:54:33 -07:00
verilog verilog parser 2025-01-25 11:21:40 -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 Initial Pass at Attribute parsing 2024-03-09 22:02:19 +00:00
CMakeLists.txt c++ sdf reader 2025-01-25 11:34:04 -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 readme 2025-01-25 10:01:09 -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

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.

brew install cmake swig flex bison tcl-tk zlib

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.

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.

Contributions

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

All contributors should read doc/CodingGuidelines.txt for nodes 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 requied to audit and verify the changes.

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