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
```
2019-03-25 03:41:05 +01:00
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
```
2019-03-25 03:41:05 +01:00
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.
2019-03-25 03:41:05 +01:00
Some changes to CMakeLists.txt are required to support older versions.
2019-01-23 05:41:32 +01:00
2019-03-25 03:41:05 +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
```
2019-03-25 03:41:05 +01:00
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.
```
git clone https://xp-dev.com/git/opensta
cd opensta
mkdir build
cd build
2019-03-25 03:41:05 +01:00
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
2019-03-25 03:41:05 +01:00
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.
### Installing on Windoz
Use a .bat file to start a cygwin shell that has its path set to
support the Microcruft cl compiler by calling the vsvars32.bat script
from the Visual C++ installation.
```
tcsh-startup.bat
@echo off
call "c:\Microsoft Visual Studio 9.0\Common7\Tools\vsvars.bat"
set path=c:\cygwin\bin;%PATH%
c:\cygwin\bin\tcsh
```
CMake is supposedly more compatible with the windoz environment
so you may have better luck wih it.
2019-02-16 21:07:59 +01:00
Cmake and build from the shell. Note that tcl and zlib must be
2019-01-23 05:41:32 +01:00
built with the Visual C++ compiler to link to the sta libraries.
2019-02-16 21:07:59 +01:00
mkdir build
cd build
cmakd ..
make
2019-01-23 05:41:32 +01:00
...
2019-02-16 21:07:59 +01:00
2019-01-23 05:41:32 +01:00
Good luck and don't bother me with windoz specific issues.
I am happy to say I haven't owned a windoz machine in 20 years.
## 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
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 / > .