Files
OpenSTA/README.md
T

318 lines
9.9 KiB
Markdown
Raw Normal View History

2019-01-22 20:41:32 -08:00
# Parallax Static Timing Analyzer
2019-01-17 17:22:45 -05:00
2019-01-22 20:41:32 -08:00
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.
2019-01-17 17:22:45 -05:00
2019-01-22 20:41:32 -08:00
* Verilog netlist
* Liberty library
* SDC timing constraints
* SDF delay annotation
* SPEF parasitics
2024-10-08 15:31:43 -07:00
* VCD power acitivies
* SAIF power acitivies
2019-01-17 17:22:45 -05:00
2019-01-22 20:41:32 -08:00
OpenSTA uses a TCL command interpreter to read the design, specify
timing constraints and print timing reports.
2019-01-17 17:22:45 -05:00
2019-01-22 20:41:32 -08:00
##### Clocks
2019-01-17 17:22:45 -05:00
* Generated
* Latency
* Source latency (insertion delay)
* Uncertainty
* Propagated/Ideal
* Gated clock checks
* Multiple frequency clocks
2019-01-22 20:41:32 -08:00
##### 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
2019-01-17 17:22:45 -05:00
* Integrated Dartu/Menezes/Pileggi RC effective capacitance algorithm
* External delay calculator API
2019-01-22 20:41:32 -08:00
##### Analysis
2019-01-17 17:22:45 -05:00
* Report timing checks -from, -through, -to, multiple paths to endpoint
* Report delay calculation
* Check timing setup
2019-01-22 20:41:32 -08:00
##### 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.
2019-01-17 17:22:45 -05:00
* Query based incremental update of delays, arrival and required times
* Simulator to propagate constants from constraints and netlist tie high/low
2023-07-13 07:30:30 -07:00
See doc/OpenSTA.pdf for command documentation.
2019-10-25 08:51:59 -07:00
See doc/ChangeLog.txt for changes to commands.
2024-10-08 15:31:43 -07:00
See doc/StaApi.txt for timing engine API documentation.
2019-01-22 20:41:32 -08:00
2023-03-22 08:23:07 -07:00
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
2025-02-10 17:31:45 -07:00
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
2023-10-10 16:01:02 -07:00
were copied.
2023-03-22 08:23:07 -07:00
The official git repository is located at
2023-06-04 12:38:45 -07:00
https://github.com/parallaxsw/OpenSTA.git. Any forks from this code
2023-03-22 08:23:07 -07:00
base have not passed extensive regression testing which is not
publicly available.
2023-03-21 21:02:59 -07:00
2024-10-24 11:37:07 -07:00
## Build from source
2019-01-22 20:41:32 -08:00
2019-11-08 08:45:03 -07:00
OpenSTA is built with CMake.
2019-01-22 20:41:32 -08:00
### Prerequisites
The build dependency versions are shown below. Other versions may
2019-01-22 20:41:32 -08:00
work, but these are the versions used for development.
```
2024-06-27 13:57:58 -07:00
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
2024-06-27 13:57:58 -07:00
swig 4.1.0 4.1.1
bison 3.8.2 3.8.2
flex 2.6.4 2.6.4
2019-01-22 20:41:32 -08:00
```
2024-04-19 17:27:21 -07:00
External library dependencies:
2019-01-22 20:41:32 -08:00
```
Ubuntu Darwin License
2024-06-27 20:22:29 -07:00
eigen 3.4.0 3.4.0 MPL2 required
2024-07-17 14:19:49 -07:00
cudd 3.0.0 3.0.0 BSD required
2024-06-27 20:22:29 -07:00
tclreadline 2.3.8 2.3.8 BSD optional
zLib 1.2.5 1.2.8 zlib optional
libfmt 8.1.1 N/A MIT required if std::format not available
2019-01-22 20:41:32 -08:00
```
2022-10-24 09:18:01 -07:00
The [TCL readline library](https://tclreadline.sourceforge.net/tclreadline.html)
2025-01-25 10:01:09 -07:00
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:
2022-10-24 09:18:01 -07:00
```
2024-06-27 13:57:58 -07:00
if { ![catch {package require tclreadline}] } {
proc tclreadline::prompt1 {} {
return "> "
}
}
2022-10-24 09:18:01 -07:00
```
The Zlib library is an optional. If CMake finds libz, OpenSTA can
2024-06-27 13:57:58 -07:00
read Liberty, Verilog, SDF, SPF, and SPEF files compressed with gzip.
2022-10-24 09:18:01 -07:00
2026-05-27 03:43:49 +09:00
[CUDD](https://github.com/cuddorg/cudd) is a binary decision diagram (BDD)
package that is used to improve conditional timing arc handling, constant
propagation, power activity propagation and spice netlist generation.
2024-06-27 13:57:58 -07:00
2026-05-27 03:43:49 +09:00
Download and build CUDD:
2024-09-17 12:44:50 -07:00
2019-01-22 20:41:32 -08:00
```
2026-05-27 03:43:49 +09:00
git clone https://github.com/cuddorg/cudd.git
cd cudd
git checkout 3.0.0
2024-09-17 12:44:50 -07:00
./configure
2019-01-22 20:41:32 -08:00
make
2019-03-24 19:41:05 -07:00
```
2019-01-22 20:41:32 -08:00
2024-09-17 12:44:50 -07:00
You can use the "configure --prefix" option and "make install" to install CUDD
in a different directory.
Modern c++ compilers that support c++20 include support for std::format.
With older compilers like gcc 11 on Ubuntu 22.04 and Centos7 the fmt library
is used instead. If it is not installed locally, the github repository is
downloaded and compiled in the build directory.
2025-01-25 10:01:09 -07:00
### Building with CMake
2019-01-22 20:41:32 -08:00
Use the following commands to checkout the git repository and build the
OpenSTA library and excutable.
```
2024-03-20 17:14:43 -07:00
git clone https://github.com/parallaxsw/OpenSTA.git
2019-07-19 07:17:03 -07:00
cd OpenSTA
2019-01-22 20:41:32 -08:00
mkdir build
cd build
2025-06-20 10:24:06 -07:00
cmake -DCUDD_DIR=<CUDD_INSTALL_DIR> ..
2019-01-22 20:41:32 -08:00
make
```
The default build type is release to compile optimized code.
2025-05-19 15:04:49 -07:00
The resulting executable is in `build/sta`.
The library without a `main()` procedure is `build/libOpenSTA.a`.
2019-01-22 20:41:32 -08:00
Optional CMake variables passed as -D<var>=<value> arguments to CMake are show below.
```
CMAKE_BUILD_TYPE DEBUG|RELEASE
CMAKE_CXX_FLAGS - additional compiler flags
2020-01-15 17:19:19 -07:00
TCL_LIBRARY - path to tcl library
2019-01-22 20:41:32 -08:00
TCL_HEADER - path to tcl.h
2024-09-17 12:44:50 -07:00
CUDD_DIR - path to cudd installation
2019-01-22 20:41:32 -08:00
ZLIB_ROOT - path to zlib
CMAKE_INSTALL_PREFIX
```
2020-01-15 17:19:19 -07:00
If `TCL_LIBRARY` is specified the CMake script will attempt to locate
the header from the library path.
2019-01-22 20:41:32 -08:00
The default install directory is `/usr/local`.
2024-09-17 12:44:50 -07:00
To install in a different directory with CMake use the CMAKE_INSTALL_PREFIX option.
2019-01-22 20:41:32 -08:00
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.
2024-10-24 11:37:07 -07:00
## Build with Docker
2026-03-11 08:22:26 -07:00
AN alternative way to build and run OpenSTA is with
2024-10-24 11:37:07 -07:00
[Docker](https://www.docker.com). After installing Docker, the
following command builds a Docker image.
```
cd OpenSTA
2026-05-28 09:31:24 -07:00
docker build --file Dockerfile.ubuntu24.04 --tag opensta_ubuntu24.04 .
2026-03-11 08:22:26 -07:00
or
docker build --file Dockerfile.centos7 --tag opensta_centos7 .
```
The centos7 build on mac/OsX with ARM processorts requires the platform
to be specified.
```
docker build --file Dockerfile.centos7 --platform=linux/amd64 --tag opensta_centos7 .
2024-10-24 11:37:07 -07:00
```
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.
```
2025-05-05 19:10:10 -07:00
docker run -i -v $HOME:/data opensta
2024-10-24 11:37:07 -07:00
```
2025-01-25 10:01:09 -07:00
## 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.
2025-01-25 10:01:09 -07:00
```
brew bundle install
```
2025-01-25 10:01:09 -07:00
Set these variables before using cmake to cirumvent the Xcode versions.
2025-02-12 10:40:43 -08:00
```
2025-01-25 10:01:09 -07:00
# 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"
2025-02-12 10:40:43 -08:00
```
2025-01-25 10:01:09 -07:00
Homebrew does not support tclreadline, but the macports system does
(see https://www.macports.org).
## Install using a package manager
### Guix
OpenSTA is available in the [default repositories](https://hpc.guix.info/package/opensta):
```
guix install opensta
```
2019-04-15 16:30:30 -07:00
## Bug Reports
2019-02-16 12:07:59 -08:00
2019-04-15 16:30:30 -07:00
Use the Issues tab on the github repository to report bugs.
2019-02-16 12:07:59 -08:00
2019-04-15 16:30:30 -07:00
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.
2019-01-22 20:41:32 -08:00
2019-04-15 16:30:30 -07:00
The test case should have a tcl command file recreates the issue named
2025-12-07 10:00:28 -07:00
run.tcl. If is are more than one command file using the same data
2019-04-15 16:30:30 -07:00
files, there should be separate command files, run1.tcl, run2.tcl
etc. The bug report can refer to these command files by name.
2019-01-22 20:41:32 -08:00
2019-04-15 16:30:30 -07:00
Command files should not have absolute filenames like
2025-12-07 10:00:28 -07:00
"/home/john/OpenSTA_bug/write_path_spice/dump_spice" in them.
2019-04-15 16:30:30 -07:00
These obviously are not portable. Use filenames relative to the test
case directory.
2019-01-22 20:41:32 -08:00
2025-12-07 10:00:28 -07:00
The files in the test case should be collected into a directory.
The contents of the directory should be collected into a compressed
tarfile.
2025-01-20 19:42:25 -07:00
## 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
2025-01-20 19:42:25 -07:00
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.
2019-11-08 08:45:03 -07:00
2025-02-10 17:31:45 -07:00
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.
2025-01-27 08:37:48 -07:00
## 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.
2019-01-22 20:41:32 -08:00
## License
2019-03-23 15:56:23 -07:00
OpenSTA, Static Timing Analyzer
2023-02-18 17:55:40 -07:00
Copyright (c) 2023, Parallax Software, Inc.
2019-01-22 20:41:32 -08:00
2019-03-23 15:56:23 -07:00
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
2022-01-04 10:17:08 -07:00
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2019-03-23 15:56:23 -07:00
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
2022-01-04 10:17:08 -07:00
along with this program. If not, see <https://www.gnu.org/licenses/>.