commit 6fac3fee87a3309132b5bdbb731292ecd6410a86
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Jan 21 18:24:18 2025 -0700
Sta use VerilogReader class
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 05d4bce4bcfcfaa07392b237a596a82315b895b3
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Jan 21 15:14:29 2025 -0700
vparse
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit e977e89b62191688db5c815131fc389d9ce401c5
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Jan 21 11:30:46 2025 -0700
write_verilog missing port ddcl
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 1742d5d92533559235ea4c42d9ea4bf2d47fb943
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Jan 21 11:23:48 2025 -0700
verilog escape constexpr
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 226a23092312a37503100d49ab74d4fb1e5856ef
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Jan 20 09:34:32 2025 -0700
comment
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 63ca4ac5855710427e1ddfc5c2cba8998452d1f0
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Jan 19 19:45:48 2025 -0700
leaks
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit c1d38aa0cc983204b1bb3f49944709e74c831be7
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Jan 19 13:26:07 2025 -0700
verilog std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 22607b41b9eb9fc71d53214893150afb757a8a56
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Jan 19 11:36:23 2025 -0700
verilog std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit dba2bc939fc58d465229cc2d474705151cd50d05
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Jan 19 10:01:14 2025 -0700
verilog std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 7d449041a2b75b874038af377d46130b45195a00
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Jan 19 09:18:55 2025 -0700
verilog std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit d02495222838f037f25d131ce1b270a6121cf16f
Author: James Cherry <cherry@parallaxsw.com>
Date: Sun Jan 19 08:53:47 2025 -0700
verilog std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 10c5c1040f26c8ebe295d245a641fc913e0ec9f5
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 21:50:12 2025 -0700
verlog constant use std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 21943c1b63fd36d12de1e5986905e14fe73ce7be
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 17:41:43 2025 -0700
verilog std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit c0232b71ea5137b37d055d83f3da194341aed7a0
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 17:12:47 2025 -0700
verilog std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit c68fd0329ee35b4877763bcdc82e8fe03a3b16de
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 16:54:10 2025 -0700
verilog std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 3e2dca2140db42acce390ec1a18f29ee4de3c631
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 16:07:19 2025 -0700
vparse const
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 210196f9e5a63dfdd5ed45a418388b7ec74ade07
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 12:31:13 2025 -0700
verilog parse centos7
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit b8e1882121ac1763e767d299fd929bdfb07c5ffb
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 10:21:48 2025 -0700
verilog names string*
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit c455723c5801d2d7386e7d1d53a0f9fb501c0c03
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 09:51:47 2025 -0700
verilog reader names
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 47307b1d8a61abab91195969be8708a7646bbfe3
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 18 09:21:30 2025 -0700
valgrind
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 0de49ba76cb0d1e06f93868676b73b4cd2ee609e
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Jan 15 16:50:56 2025 -0700
suppress yynerrs_ warning
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit dbe2ba18d99d850ba5ebb1c75a4165bfff2df96d
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Jan 15 16:37:14 2025 -0700
cmake bison target names
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 388be6c2aa69b839a53be78bafab420216554944
Author: James Cherry <cherry@parallaxsw.com>
Date: Tue Jan 14 08:57:02 2025 -0700
network link func rm repor, network args
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit f50d5b23aff126e7d396a555f06eae5597ec1354
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Jan 13 19:48:44 2025 -0700
verilog reader use gzstream
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 8a0c8ce09087cceef36824de3656b5c7cea9f0f0
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Jan 13 18:02:40 2025 -0700
VerilogScanner::error
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 413093e46e523d90e45a4c56ecaa25e4457998aa
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Jan 10 18:27:53 2025 -0700
rm verilog_network
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit aef8358a8f44e556a3814e9ddd205e179bf2b3d7
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Jan 10 18:01:09 2025 -0700
rm verilog_reader except link
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit cfc34aa41a5fe1942867c73061ae483e36c74f54
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Jan 10 17:04:33 2025 -0700
verilog reader rm line_
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 62dd98b7cb800acc61192b0f326d4a3278e1a72d
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Jan 10 16:26:09 2025 -0700
verilog parse use location
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit ad6c26984526312134d03c0f39d3fcd63617efa4
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 4 11:04:16 2025 -0800
verilog parse error
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 1bff12c8c49c847de015dd32042cccf7952a2060
Author: James Cherry <cherry@parallaxsw.com>
Date: Sat Jan 4 08:00:40 2025 -0800
attribute -> Attr
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit e8372df18a5374b2c9ca8f094a244d06c59a9f4e
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Jan 3 17:57:21 2025 -0800
verilog rm string_buf
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 785818f10108f689b4ea978a13d0131546f1a4e5
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Jan 3 16:10:10 2025 -0800
verilog parse use std::string
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 95265fc4ad30325f115eb69d10c77afe3f265701
Author: James Cherry <cherry@parallaxsw.com>
Date: Fri Jan 3 15:44:31 2025 -0800
verilog parser const char * -> string*
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit b80db6d98057363f90a9497b10073f84c2e7cc3d
Author: James Cherry <cherry@parallaxsw.com>
Date: Thu Jan 2 08:31:06 2025 -0800
bison warning
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit df3b61bf7d590c241ee513eacfb1c7dff2a450d8
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Jan 1 17:04:17 2025 -0800
verilog parse works
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 8b5a8fbb7042ceb58fbb24b836664a1da6028c45
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Jan 1 16:15:44 2025 -0800
rm VerilogParser.hh
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 07bc0cc9c160e9dbe705f4c359973cc35342e05e
Author: James Cherry <cherry@parallaxsw.com>
Date: Wed Jan 1 15:59:57 2025 -0800
verlog parse compiles
Signed-off-by: James Cherry <cherry@parallaxsw.com>
commit 8d32f5f3d5e6a252cdb2020c62742f01b1c66f63
Author: James Cherry <cherry@parallaxsw.com>
Date: Mon Dec 30 09:14:13 2024 -0800
verilog parser
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 | ||
| 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 develpment are exclusive to Parallax Software. Contributors must signing the Contributor License Agreement (doc/CLA.txt) when submitting pull requests.
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 show 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
Note that flex versions before 2.6.4 contain 'register' declarations that are illegal in c++17.
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 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: 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.
Installing 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
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.
Contributions
Contributors must sign the Contributor License Agreement (doc/CLA.txt) when submitting pull requests.
All contributors should read doc/CodingGuidelines.txt for nodes 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 requied to audit and verify the changes.
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/.