commit d122d05822e02dcc08c665ac6ec7513791dd7209
Author: James Cherry <cherry@parallaxsw.com>
Date: Thu Mar 27 08:58:22 2025 -0700
rebase
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 9c7ae9a7ddd885ebdab102d48b3f39dc5dacf948
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Mar 25 16:21:52 2025 -0700
write_spice8
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 2bd088f03bb2e414305232d9ebd76c9d1958ec81
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Mar 25 10:08:00 2025 -0700
liberty reader stringify
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 86974caf063433b37ed1378e7103db4b2e55a04c
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Mar 24 20:25:39 2025 -0700
ConcreteLiberary/Cell/Port use string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 334476e185149a90b35cdd859e0a760ec9aa242a
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Mar 24 20:16:08 2025 -0700
leak
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 5130e8d44804f483d9099d48bb413a7f3362b4e1
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Mar 24 15:57:14 2025 -0700
liberty parser stringify
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit d48eba88cbde9093e3eb12bcee8eb48ccd444434
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Mar 24 11:16:04 2025 -0700
stringify
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 6913fb198d642f6b05a94fb1852064706a748b81
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Mar 24 11:06:17 2025 -0700
stringify
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 371bca08ecf9bf816b7adcbb7ae1458c4073f5f8
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Mar 24 10:44:31 2025 -0700
TableTemplate use string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 326465920a1f4a33dbe6be35cff5ca2245b6677e
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Mar 24 09:04:55 2025 -0700
use string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit b93a542ddfbcb5c793c9b533cbe64ea20ec08f4a
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Mar 24 08:59:01 2025 -0700
timingSenseString -> to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 6c121a0ff4231b37df076a62e83832897be62ff4
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Mar 23 16:09:47 2025 -0700
Corner use string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 07b989a5a43bf5d341aa6ba2880be663997577d5
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Mar 23 16:05:43 2025 -0700
Tag::to_string()
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 0b9480cc5a3fa9ef0cb1c6e8ba0d4a29de2df816
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Mar 23 15:53:29 2025 -0700
PathAnalysisPt::to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit a028659091e99270f7501615285730681ed59523
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Mar 23 12:19:03 2025 -0700
TimingRole stati alloc
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 495be6a57bda23d82e511282f5db7c188b32971b
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Mar 22 21:36:52 2025 -0700
RiseFall/RiseFallBoth/Transition const
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 4c4b28adb383321b1172f4b774c7c4d9a1aee69f
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Mar 22 20:38:26 2025 -0700
TimingRole const
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 54ab58ec7200d420bf3b5e709e74b652af88d508
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Mar 22 14:15:07 2025 -0700
const MinMax
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit f70bb38df17b2ed758c7b6ba5647b7355366c0c0
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Mar 22 13:14:31 2025 -0700
Transition::to_string(()
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit b3f3d67328194351fb8efac2219bcfbcec331552
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Mar 22 12:33:25 2025 -0700
RiseFall::to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 4046f8a376926dfde980860c51d2c5c70cf4a867
Author: James Cherry <cherry@parallaxsw.com>
Date: Thu Mar 20 09:04:10 2025 -0700
TimingRole::name -> to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit cf4dd918eccb05d459f1804ced8365c81a5c6a50
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Mar 19 20:14:42 2025 -0700
MinMax::asString -> to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit d80118117dda25be7b2b4896f19e955645c27f73
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Mar 19 17:43:08 2025 -0700
TimingRole::name -> to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 284fa25c28aca998e8ce92e7b7bb927697494a13
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Mar 19 17:02:27 2025 -0700
comment
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 646f19749b997e03dc4cbdf165cd7637010276d3
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Mar 19 14:47:40 2025 -0700
FuncExpr::asString -> to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 4f73d8e7ad21feac6f41130b7b070f3e345b6fb5
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Mar 19 14:04:13 2025 -0700
Vertex::name -> to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 7c7ec486aaea86f6607a1ef72bb1a74dca603831
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Mar 19 13:39:24 2025 -0700
Vertex::name -> to_string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
|
||
|---|---|---|
| app | ||
| cmake | ||
| dcalc | ||
| doc | ||
| etc | ||
| examples | ||
| graph | ||
| include/sta | ||
| jenkins | ||
| liberty | ||
| network | ||
| parasitics | ||
| power | ||
| sdc | ||
| sdf | ||
| search | ||
| spice | ||
| tcl | ||
| test | ||
| util | ||
| verilog | ||
| .clang-format | ||
| .dockerignore | ||
| .gitignore | ||
| Brewfile | ||
| CMakeLists.txt | ||
| Dockerfile.centos7 | ||
| Dockerfile.ubuntu22.04 | ||
| Jenkinsfile | ||
| LICENSE | ||
| README.md | ||
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/.