OpenSTA/README.md

231 lines
7.3 KiB
Markdown
Raw Normal View History

2019-01-23 05:41:32 +01:00
# Parallax Static Timing Analyzer
2019-01-17 23:22:45 +01:00
2019-01-23 05:41:32 +01: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 23:22:45 +01:00
2019-01-23 05:41:32 +01:00
* Verilog netlist
* Liberty library
* SDC timing constraints
* SDF delay annotation
* SPEF parasitics
2019-01-17 23:22:45 +01:00
2019-01-23 05:41:32 +01:00
OpenSTA uses a TCL command interpreter to read the design, specify
timing constraints and print timing reports.
2019-01-17 23:22:45 +01:00
2019-01-23 05:41:32 +01:00
##### Clocks
2019-01-17 23:22:45 +01:00
* Generated
* Latency
* Source latency (insertion delay)
* Uncertainty
* Propagated/Ideal
* Gated clock checks
* Multiple frequency clocks
2019-01-23 05:41:32 +01: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 23:22:45 +01:00
* Integrated Dartu/Menezes/Pileggi RC effective capacitance algorithm
* External delay calculator API
2019-01-23 05:41:32 +01:00
##### Analysis
2019-01-17 23:22:45 +01:00
* Report timing checks -from, -through, -to, multiple paths to endpoint
* Report delay calculation
* Check timing setup
2019-01-23 05:41:32 +01: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 23:22:45 +01:00
* Query based incremental update of delays, arrival and required times
* Simulator to propagate constants from constraints and netlist tie high/low
2019-01-23 05:41:32 +01:00
See doc/OpenSTA.pdf for complete documentiaton.
## Getting Started
OpenSTA can be run as a [Docker](https://www.docker.com/) container
2019-02-16 21:07:59 +01:00
or built as local executable with CMake.
2019-01-23 05:41:32 +01:00
### Run using Docker
* Install Docker on [Windows](https://docs.docker.com/docker-for-windows/), [Mac](https://docs.docker.com/docker-for-mac/) or [Linux](https://docs.docker.com/install/).
* Navigate to the directory where you have the input files.
* Run OpenSTA as a binary using
````
docker run -it -v $(pwd):/data openroad/opensta
````
4. From the interactive terminal, use OpenSTA commands. You can read input files from `/data` directory inside the docker container (e.g. `read_liberty /data/liberty.lib`). You can use OpenSTA in non-interactive mode by passing a command file using the `-f` flag as follows.
```
docker run -it -v $(pwd):/data openroad/opensta -f /data/cmd_file
```
Note that the path after `-f` is the path inside container, not on the guest machine.
### Prerequisites
The build dependency versions are show below. Other versions may
work, but these are the versions used for development.
```
from Ubuntu Xcode
18.04.1 10.1
cmake 3.9
clang 9.1.0 10.0.0
gcc 3.3.2 7.3.0
tcl 8.2 8.6 8.6.6
swig 1.3.28 3.0.12 3.0.12
bison 1.35 3.0.4 2.3
flex 2.5.4 2.6.4 2.5.35
```
These packages are **optional**:
2019-01-23 05:41:32 +01:00
```
libz 1.1.4 1.2.5 1.2.8
cudd 2.4.1 3.0.0
```
CUDD is a binary decision diageram (BDD) package that is used to improve conditional timing arc handling. OpenSTA does not require it to be installed. It is available [here](https://www.davidkebo.com/source/cudd_versions/cudd-3.0.0.tar.gz) or [here](https://sourceforge.net/projects/cudd-mirror/).
2019-01-23 05:41:32 +01:00
Note that the file hierarchy of the CUDD installation changed with version 3.0.
Some changes to CMakeLists.txt are required to support older versions.
2019-01-23 05:41:32 +01:00
When building CUDD you may use the `--prefix ` option to `configure` to
install in a location other than the default (`/usr/local/lib`).
2019-01-23 05:41:32 +01:00
```
cd $HOME/cudd-3.0.0
mkdir $HOME/cudd
./configure --prefix $HOME/cudd
make
make install
```
To not use CUDD specify `CUDD=0`.
Cmake looks for the CUDD library in `CUDD/lib, CUDD/cudd/lib`
and for the header in `CUDD/include, CUDD/cudd/include`.
```
# equivalent to -DCUDD=0
cmake ..
or
cmake .. -DCUDD=0
or
# look in ~/cudd/lib, ~/cudd/include
cmake .. -DCUDD=$HOME/cudd
or
# look in /usr/local/lib/cudd, /usr/local/include/cudd
cmake .. -DCUDD=/usr/local
```
2019-01-23 05:41:32 +01:00
2019-03-13 01:25:53 +01:00
The Zlib library is an optional. If CMake finds libz, OpenSTA can
read Verilog, SDF, SPF, and SPEF files compressed with gzip.
2019-01-23 05:41:32 +01:00
### Installing with CMake
Use the following commands to checkout the git repository and build the
OpenSTA library and excutable.
```
2019-07-19 16:17:03 +02:00
git clone https://github.com/The-OpenROAD-Project/OpenSTA.git
cd OpenSTA
2019-01-23 05:41:32 +01:00
mkdir build
cd build
cmake ..
2019-01-23 05:41:32 +01:00
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<var>=<value> arguments to CMake are show below.
```
CMAKE_BUILD_TYPE DEBUG|RELEASE
CMAKE_CXX_FLAGS - additional compiler flags
TCL_LIB - path to tcl library
TCL_HEADER - path to tcl.h
CUDD - path to cudd installation
2019-01-23 05:41:32 +01:00
ZLIB_ROOT - path to zlib
CMAKE_INSTALL_PREFIX
```
If `TCL_LIB` 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:
```
cmake .. -DCMAKE_INSTALL_PREFIX=<prefix_path>
```
Alternatively, you can use the `DESTDIR` variable with make.
```
make DESTDIR=<prefix_path> install
```
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.
2019-04-16 01:30:30 +02:00
## Authors
2019-01-23 05:41:32 +01:00
2019-04-16 01:30:30 +02:00
* 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-23 05:41:32 +01:00
2019-04-16 01:30:30 +02:00
## Bug Reports
2019-02-16 21:07:59 +01:00
2019-04-16 01:30:30 +02:00
Use the Issues tab on the github repository to report bugs.
2019-02-16 21:07:59 +01:00
2019-04-16 01:30:30 +02: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-23 05:41:32 +01:00
2019-04-16 01:30:30 +02:00
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.
2019-01-23 05:41:32 +01:00
2019-04-16 01:30:30 +02:00
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.
2019-01-23 05:41:32 +01:00
2019-04-16 01:30:30 +02:00
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.
2019-01-23 05:41:32 +01:00
## License
2019-04-16 01:30:30 +02: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.
2019-03-23 23:56:23 +01:00
OpenSTA, Static Timing Analyzer
2019-01-23 05:41:32 +01:00
Copyright (c) 2019, Parallax Software, Inc.
2019-03-23 23:56:23 +01: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
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/>.