commit 87130be63ddbf1a7fb65986b02839eb4c0b13168 Author: James Cherry <[email protected]> Date: Tue Feb 27 09:49:02 2024 -0700 ccs ceff delay calc Signed-off-by: James Cherry <[email protected]> commit de0dd38dabda2f7ef51b49c196c2787a0d3c5784 Author: James Cherry <[email protected]> Date: Tue Feb 27 07:40:11 2024 -0700 dcalc public funcs Signed-off-by: James Cherry <[email protected]> commit dd7fcb12f929b9b0a391653cad42e617f9cbdd3b Author: James Cherry <[email protected]> Date: Mon Feb 26 09:08:37 2024 -0700 mv CircuitSim.hh to include Signed-off-by: James Cherry <[email protected]> commit 9663e46d28ece544ee1453f229990c9db9e0efec Author: James Cherry <[email protected]> Date: Sun Feb 25 17:58:57 2024 -0700 ArcDcalcArg Signed-off-by: James Cherry <[email protected]> commit 76b0588034faaefd2302c865c441975f76386d3f Author: James Cherry <[email protected]> Date: Sun Feb 25 15:36:46 2024 -0700 ensureVoltageWaveforms Signed-off-by: James Cherry <[email protected]> commit f88e67b861c56752e5b36efe2b552ba0077a7180 Author: James Cherry <[email protected]> Date: Sun Feb 25 15:00:02 2024 -0700 const Signed-off-by: James Cherry <[email protected]> commit 8f32cc571dcadee0185b08f951a1f79d46e7984d Author: James Cherry <[email protected]> Date: Sun Feb 25 14:57:51 2024 -0700 Graph::gateEdgeArc Signed-off-by: James Cherry <[email protected]> commit ac3cb35cb6732d7ecbf0532d7351a3ff2a917fc9 Author: James Cherry <[email protected]> Date: Sun Feb 25 14:31:30 2024 -0700 ConcreteParasiticSubNodeMap, ConcreteParasiticPinNodeMap use id cmp Signed-off-by: James Cherry <[email protected]> commit cbfe4eac463036c26a64701239d7651d91a09778 Author: James Cherry <[email protected]> Date: Sun Feb 25 14:08:41 2024 -0700 WriteSpice Signed-off-by: James Cherry <[email protected]> commit 8b5d30f1a8b1ccb8c9cbd9d7ba93418907c41b2a Author: James Cherry <[email protected]> Date: Sat Feb 24 09:45:46 2024 -0700 emplace_push Signed-off-by: James Cherry <[email protected]> commit 5335a2eaaf737ed7c7a8cff30654a68c4ac4c8e4 Author: James Cherry <[email protected]> Date: Fri Feb 23 16:19:30 2024 -0700 Parasitics::findParasiticNode Signed-off-by: James Cherry <[email protected]> commit ce92f3caf28afb0e0384799f08166cfb0aecfea0 Author: James Cherry <[email protected]> Date: Fri Feb 23 15:53:28 2024 -0700 Parasitics::findParasiticNode Signed-off-by: James Cherry <[email protected]> commit 0c591430c725a3ebd50d2892673dca76e023dc32 Author: James Cherry <[email protected]> Date: Fri Feb 23 09:03:18 2024 -0700 Parsitics::name(node) const Signed-off-by: James Cherry <[email protected]> commit 499c297e64d1487388f549843ff9ea05e8555cfc Author: James Cherry <[email protected]> Date: Fri Feb 23 09:03:07 2024 -0700 write_spice umr Signed-off-by: James Cherry <[email protected]> commit 6984c398dbce9e6266fab8377a844bc518481d9d Author: James Cherry <[email protected]> Date: Thu Feb 22 18:42:34 2024 -0700 gcc warning Signed-off-by: James Cherry <[email protected]> commit edec16519806013623194d8201e804dec81a51dd Author: James Cherry <[email protected]> Date: Thu Feb 22 17:54:11 2024 -0700 no cuddification Signed-off-by: James Cherry <[email protected]> commit 4a0e1070c179b2f8615b604c362359ce4b3a0e2e Author: James Cherry <[email protected]> Date: Thu Feb 22 17:29:46 2024 -0700 sim const Signed-off-by: James Cherry <[email protected]> commit 2e941fafa631f6b9bc0f82784b9146de2449e9c5 Author: James Cherry <[email protected]> Date: Thu Feb 22 17:29:39 2024 -0700 sdc comment Signed-off-by: James Cherry <[email protected]> commit 1c12f56aee7115fcb06807b5b6c626d1a419ccdc Author: James Cherry <[email protected]> Date: Wed Feb 21 13:13:29 2024 -0700 Sim use Bdd class Signed-off-by: James Cherry <[email protected]> commit b70c41d5caec56c3001b834141b6dab89bb933ed Author: James Cherry <[email protected]> Date: Tue Feb 20 12:18:27 2024 -0700 write_spice coupling caps Signed-off-by: James Cherry <[email protected]> commit 614d2cd41a1a9cf850dbe480954a5f58ee0dc21e Author: James Cherry <[email protected]> Date: Mon Feb 19 14:37:30 2024 -0700 write_spice time offset Signed-off-by: James Cherry <[email protected]> commit f0ba1fca0dfca384e6fb0be302bba9ced71ee41c Author: James Cherry <[email protected]> Date: Mon Feb 19 10:59:18 2024 -0700 class Bdd for cudd Signed-off-by: James Cherry <[email protected]> commit 24c94756334fce5e70e97ce0ee31375ae4e59b84 Author: James Cherry <[email protected]> Date: Sun Feb 18 08:58:30 2024 -0700 WriteSpice Signed-off-by: James Cherry <[email protected]> commit 47a4505d88bdfe4a85056895f8b7d842e07dce8d Author: James Cherry <[email protected]> Date: Fri Feb 16 21:34:23 2024 -0700 default sim ngspice Signed-off-by: James Cherry <[email protected]> commit 06e279555a076e218f0a9c308e8937a6fc8fdea4 Author: James Cherry <[email protected]> Date: Fri Feb 16 21:34:01 2024 -0700 WriteSpice refactor Signed-off-by: James Cherry <[email protected]> commit 06e3f0734edbbbd69ad063e97d1d8cca92a83aea Author: James Cherry <[email protected]> Date: Thu Feb 15 15:18:35 2024 -0700 mv report_dcalc to DelayCalc.tcl Signed-off-by: James Cherry <[email protected]> commit 922056471a6d380699bbd0623f95637401d23eff Author: James Cherry <[email protected]> Date: Thu Feb 15 14:27:31 2024 -0700 WriteSpice::cell_spice_port_names_ Signed-off-by: James Cherry <[email protected]> commit 732922ead68097e3f7da268ecc5ae2ca2daa4492 Author: James Cherry <[email protected]> Date: Thu Feb 15 13:35:13 2024 -0700 WritePathSpice.hh Signed-off-by: James Cherry <[email protected]> commit 8cd6e2ffc6ad66e831630273b5eacd192259191e Author: James Cherry <[email protected]> Date: Thu Feb 15 10:11:39 2024 -0700 small Signed-off-by: James Cherry <[email protected]> commit f7f6bfb49f43ddc3e45c294f89c8814d60df5220 Author: James Cherry <[email protected]> Date: Thu Feb 15 09:48:09 2024 -0700 refactor WritePathSpice Signed-off-by: James Cherry <[email protected]> commit f74db730c3e8c67a24d531266510e4376db463d3 Author: James Cherry <[email protected]> Date: Wed Feb 14 09:22:01 2024 -0700 Sta.hh Signed-off-by: James Cherry <[email protected]> commit 051532deef203cae97e32e8af7a2348bfd8912cc Author: James Cherry <[email protected]> Date: Wed Feb 14 08:14:44 2024 -0700 PowerClass.hh Signed-off-by: James Cherry <[email protected]> commit bfb8357d1093e5d3da14e708acd21fc21ba3b0dd Author: James Cherry <[email protected]> Date: Wed Feb 14 08:08:56 2024 -0700 doc Signed-off-by: James Cherry <[email protected]> commit 8fe28ec91b234d9d8210019aa46a2e8107aa497a Author: James Cherry <[email protected]> Date: Wed Feb 14 07:32:34 2024 -0700 ClkSkew use seq instead of set Signed-off-by: James Cherry <[email protected]> commit c4e3a3a0315ab4f6160a707e838423bb734f5363 Author: James Cherry <[email protected]> Date: Tue Feb 13 19:26:45 2024 -0700 report_clock_latency Signed-off-by: James Cherry <[email protected]> commit 51fb6657d9706c7443e1c269cfe63cf080b05d50 Author: James Cherry <[email protected]> Date: Tue Feb 13 11:10:11 2024 -0700 report_clock_latency Signed-off-by: James Cherry <[email protected]> commit e639ee129d13e1c11b34bca0762b8136b18563f3 Author: James Cherry <[email protected]> Date: Mon Feb 12 11:19:06 2024 -0700 ClkSkew use map Signed-off-by: James Cherry <[email protected]> commit e91d3ea8142a73b7b607dfdf53b3fce8e2f16984 Author: James Cherry <[email protected]> Date: Mon Feb 12 10:18:27 2024 -0700 report_clock_skew report format Signed-off-by: James Cherry <[email protected]> commit c650b7ec63b83382ba9cec7d187ffee8a031c2ce Author: James Cherry <[email protected]> Date: Mon Feb 12 09:22:29 2024 -0700 report_clock_skew include macro clock_tree_path_delay Signed-off-by: James Cherry <[email protected]> commit cf14b230a9944b95ba43ef7c09e553d9014990eb Author: James Cherry <[email protected]> Date: Sun Feb 11 11:03:29 2024 -0700 clk skew range iter Signed-off-by: James Cherry <[email protected]> commit e7e0342e063ac876d00d03fd1ff0eab1715cfde4 Author: James Cherry <[email protected]> Date: Sun Feb 11 08:11:29 2024 -0700 write_spice sensitize and3 Signed-off-by: James Cherry <[email protected]> commit 743ceb676c763ac5bcbf05e630a4da1b507c537d Author: James Cherry <[email protected]> Date: Sat Feb 10 18:07:04 2024 -0700 write spice Signed-off-by: James Cherry <[email protected]> Signed-off-by: James Cherry <[email protected]>
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
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/StaApi.txt for timing engine API documentation. See doc/ChangeLog.txt for changes to commands.
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. OpenSTA does not solicit or accept external code contributions.
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
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.
from Ubuntu Xcode
22.04.2 11.3
cmake 3.10.2 3.24.2 3.16.2
clang 9.1.0 14.0.3
gcc 3.3.2 11.3.0
tcl 8.4 8.6 8.6.6
swig 1.3.28 4.1.0 4.0.1
bison 1.35 3.0.2 3.8.2
flex 2.5.4 2.6.4 2.6.4
Note that flex versions before 2.6.4 contain 'register' declarations that are illegal in c++17.
These packages are optional:
tclreadline 2.3.8
libz 1.1.4 1.2.5 1.2.8
cudd 2.4.1 3.0.0
The TCL readline library links the GNU readline library to the TCL interpreter for command line editing On OSX, Homebrew does not support tclreadline, but the macports system does (see https://www.macports.org). To enable TCL readline support use the following Cmake option:
cmake .. -DUSE_TCL_READLINE=ON
The Zlib library is an optional. If CMake finds libz, OpenSTA can read 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. OpenSTA does not require it to be installed. It is available here or here.
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.
Use the USE_CUDD option to look for the cudd library. Use the CUDD_DIR option to set the install directory if it is not in one of the normal install directories.
When building CUDD you may use the --prefix option to configure to
install in a location other than the default (/usr/local/lib).
cd $HOME/cudd-3.0.0
mkdir $HOME/cudd
./configure --prefix $HOME/cudd
make
make install
cd <opensta>/build
cmake .. -DUSE_CUDD=ON -DCUDD_DIR=$HOME/cudd
Installing with CMake
Use the following commands to checkout the git repository and build the OpenSTA library and excutable.
git clone https://github.com/The-OpenROAD-Project/OpenSTA.git
cd OpenSTA
mkdir build
cd build
cmake ..
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 - 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:
cmake .. -DCMAKE_INSTALL_PREFIX=<prefix_path>
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.
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.
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/.