Giter VIP home page Giter VIP logo

opensta's Introduction

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 documentiaton. See doc/StaApi.txt for timing engine API documentiaton. See doc/ChangeLog.txt for changes to commands.

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
                18.04.1  11.3
cmake    3.10.2 3.10.2   3.16.2
clang    9.1.0           11.0.0
gcc      3.3.2   7.3.0   
tcl      8.4     8.6     8.6.6
swig     1.3.28  3.0.12  4.0.1
bison    1.35    3.0.4   3.5
flex     2.5.4   2.6.4   2.5.35

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.

Contributions

External code contributions are not supported.

https://en.wikipedia.org/wiki/Contributor_License_Agreement https://opensource.google/docs/cla/

License

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, Static Timing Analyzer Copyright (c) 2022, 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/.

opensta's People

Contributors

abdelrahmanhosny avatar jjcherry56 avatar maliberty avatar

Watchers

 avatar

opensta's Issues

Warning logs of `link_design` has indistinguishable character

We met a problem while using link_design to analyze design top module. Which is that we input the top module name with a space by mistake. And the string compare failed, which cannot find this module.

For example, the top module is xxx, and we input xxx .

It is hard to identify these additional space.
Cuz in warning log. It is going to report as:

[STA-00162] xxx   is not a verilog module.
                ^ here has 3 space

It is difficult to be aware of the extra whitespace through the existing log.

Maybe it is better to report this warning as:

[STA-00162] "xxx  " is not a verilog module.
                 ^ Here it is easy to aware these space

Iterative Optimization with MMMC (run opt for each mode)

This issue is for demo or discussion or any small progress in MMMC-sta iterative optimization project.

Anyway, my short-term target at this moment is going to update dbSTA and allowed it to iterate each SDC mode to run any opt funcitons.

And I'm going to achieve this testcase feature:

read_sdc -mode func1 function1.sdc
read_sdc -mode func2 function2.sdc
estimate_parasitics -placement
repair_timing -setup

wish it is able to repar timing for every SDC.

Multi-Thread task hangs up.

Some testcase while repeating the STA calculations, met a problem that the multi-thread task hangs up.
The procedure didn't crash and can be terminated immediately.

The pstack show the final mirror is as:

Thread 1 (process 60192):
#0  0x00007f3c01a6071b in ?? ()
#1  0x0000556e3a7aae65 in sta::DispatchQueue::finishTasks() ()
...

We guess the mutex lock in multi-thread pool has some problem.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.