{"id":19290947,"url":"https://github.com/the-openroad-project/opensta","last_synced_at":"2025-04-05T04:08:20.686Z","repository":{"id":40005397,"uuid":"150762409","full_name":"The-OpenROAD-Project/OpenSTA","owner":"The-OpenROAD-Project","description":"OpenSTA engine","archived":false,"fork":false,"pushed_at":"2024-06-12T16:52:21.000Z","size":29296,"stargazers_count":383,"open_issues_count":47,"forks_count":163,"subscribers_count":30,"default_branch":"master","last_synced_at":"2024-06-13T08:47:00.953Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/The-OpenROAD-Project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-28T15:45:57.000Z","updated_at":"2024-06-13T08:47:06.940Z","dependencies_parsed_at":"2023-02-12T06:01:39.843Z","dependency_job_id":"79a08ebf-bea2-42c8-80ed-6d60bdd83b83","html_url":"https://github.com/The-OpenROAD-Project/OpenSTA","commit_stats":null,"previous_names":["abk-openroad/opensta"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FOpenSTA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FOpenSTA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FOpenSTA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/The-OpenROAD-Project%2FOpenSTA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/The-OpenROAD-Project","download_url":"https://codeload.github.com/The-OpenROAD-Project/OpenSTA/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247284941,"owners_count":20913704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T22:23:07.956Z","updated_at":"2025-04-05T04:08:20.678Z","avatar_url":"https://github.com/The-OpenROAD-Project.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Static Timing Analysis\n\nThis is effectively a fork of [parallaxsw/OpenSTA](https://github.com/parallaxsw/OpenSTA).  All issues and PRs should be filed there.\n\n# Parallax Static Timing Analyzer\n\nOpenSTA is a gate level static timing verifier. As a stand-alone\nexecutable it can be used to verify the timing of a design using\nstandard file formats.\n\n* Verilog netlist\n* Liberty library\n* SDC timing constraints\n* SDF delay annotation\n* SPEF parasitics\n* VCD power acitivies\n* SAIF power acitivies\n\nOpenSTA uses a TCL command interpreter to read the design, specify\ntiming constraints and print timing reports.\n\n##### Clocks\n* Generated\n* Latency\n* Source latency (insertion delay)\n* Uncertainty\n* Propagated/Ideal\n* Gated clock checks\n* Multiple frequency clocks\n\n##### Exception paths\n* False path\n* Multicycle path\n* Min/Max path delay\n* Exception points\n*  -from clock/pin/instance -through pin/net -to clock/pin/instance\n*  Edge specific exception points\n*   -rise_from/-fall_from, -rise_through/-fall_through, -rise_to/-fall_to\n\n##### Delay calculation\n* Integrated Dartu/Menezes/Pileggi RC effective capacitance algorithm\n* External delay calculator API\n\n##### Analysis\n* Report timing checks -from, -through, -to, multiple paths to endpoint\n* Report delay calculation\n* Check timing setup\n\n##### Timing Engine\nOpenSTA is architected to be easily bolted on to other tools as a\ntiming engine.  By using a network adapter, OpenSTA can access the host\nnetlist data structures without duplicating them.\n\n* Query based incremental update of delays, arrival and required times\n* Simulator to propagate constants from constraints and netlist tie high/low\n\nSee doc/OpenSTA.pdf for command documentation.\nSee doc/ChangeLog.txt for changes to commands.\nSee doc/StaApi.txt for timing engine API documentation.\n\nOpenSTA is dual licensed. It is released under GPL v3 as OpenSTA and\nis also licensed for commerical applications by Parallax Software without\nthe GPL's requirements.\n\nOpenSTA is open source, meaning the sources are published and can be\ncompiled locally.  Derivative works are supported as long as they\nadhere to the GPL license requirements.  However, OpenSTA is not\nsupported by a public community of developers as many other open\nsource projects are. The copyright and development are exclusive to\nParallax Software.\n\nRemoving copyright and license notices from OpenSTA sources (or any\nother open source project for that matter) is illegal. This should be\nobvious, but the author of OpenSTA has discovered two different cases\nwhere the copyright and license were removed from source files that\nwere copied.\n\nThe official git repository is located at\nhttps://github.com/parallaxsw/OpenSTA.git. Any forks from this code\nbase have not passed extensive regression testing which is not\npublicly available.\n\n## Build from source\n\nOpenSTA is built with CMake.\n\n### Prerequisites\n\nThe build dependency versions are shown below.  Other versions may\nwork, but these are the versions used for development.\n\n```\n         Ubuntu   Macos\n        22.04.2   14.5\ncmake    3.24.2    3.29.2\nclang             15.0.0\ngcc      11.4.0\ntcl       8.6      8.6.16\nswig      4.1.0    4.1.1\nbison     3.8.2    3.8.2\nflex      2.6.4    2.6.4\n```\n\nExternal library dependencies:\n```\n           Ubuntu   Darwin  License\neigen       3.4.0   3.4.0   MPL2  required\ncudd        3.0.0   3.0.0   BSD   required\ntclreadline 2.3.8   2.3.8   BSD   optional\nzLib        1.2.5   1.2.8   zlib  optional\n```\n\nThe [TCL readline library](https://tclreadline.sourceforge.net/tclreadline.html)\nlinks the GNU readline library to the TCL interpreter for command line\nediting To enable TCL readline support use the following Cmake option:\nSee (https://tclreadline.sourceforge.net/) for TCL readline\ndocumentation. To change the overly verbose default prompt, add\nsomething this to your ~/.sta init file:\n\n```\nif { ![catch {package require tclreadline}] } {\n  proc tclreadline::prompt1 {} {\n    return \"\u003e \"\n  }\n}\n```\n\nThe Zlib library is an optional.  If CMake finds libz, OpenSTA can\nread Liberty, Verilog, SDF, SPF, and SPEF files compressed with gzip.\n\nCUDD is a binary decision diageram (BDD) package that is used to\nimprove conditional timing arc handling, constant propagation, power\nactivity propagation and spice netlist generation.\n\nCUDD is available\n[here](https://github.com/davidkebo/cudd/blob/main/cudd_versions/cudd-3.0.0.tar.gz).\n\nUnpack and build CUDD.\n\n```\ntar xvfz cudd-3.0.0.tar.gz\ncd cudd-3.0.0\n./configure\nmake\n```\n\nYou can use the \"configure --prefix\" option and \"make install\" to install CUDD\nin a different directory.\n\n### Building with CMake\n\nUse the following commands to checkout the git repository and build the\nOpenSTA library and excutable.\n\n```\ngit clone https://github.com/parallaxsw/OpenSTA.git\ncd OpenSTA\nmkdir build\ncd build\ncmake -DCUDD_DIR=\u003cCUDD_INSTALL_DIR\u003e ,.\nmake\n```\nThe default build type is release to compile optimized code.\nThe resulting executable is in `app/sta`.\nThe library without a `main()` procedure is `app/libSTA.a`.\n\nOptional CMake variables passed as -D\u003cvar\u003e=\u003cvalue\u003e arguments to CMake are show below.\n\n```\nCMAKE_BUILD_TYPE DEBUG|RELEASE\nCMAKE_CXX_FLAGS - additional compiler flags\nTCL_LIBRARY - path to tcl library\nTCL_HEADER - path to tcl.h\nCUDD_DIR - path to cudd installation\nZLIB_ROOT - path to zlib\nCMAKE_INSTALL_PREFIX\n```\n\nIf `TCL_LIBRARY` is specified the CMake script will attempt to locate\nthe header from the library path.\n\nThe default install directory is `/usr/local`.\nTo install in a different directory with CMake use the CMAKE_INSTALL_PREFIX option.\n\nIf you make changes to `CMakeLists.txt` you may need to clean out\nexisting CMake cached variable values by deleting all of the\nfiles in the build directory.\n\n## Build with Docker\n\nAn alternative way to build and run OpenSTA is with\n[Docker](https://www.docker.com).  After installing Docker, the\nfollowing command builds a Docker image.\n\n```\ncd OpenSTA\ndocker build --file Dockerfile.ubuntu22.04 --tag OpenSTA .\n```\n\nTo run a docker container using the OpenSTA image, use the -v option\nto docker to mount direcories with data to use and -i to run\ninteractively.\n\n```\ndocker run -i -v $HOME:/data OpenSTA\n```\n\n## Build on Macos/Darwin\n\nThe XCode versions of Tcl, Flex and Bison cannot be used to build OpenSTA.\nUse Homebrew to install them. The following command installs the tools\nrequired to build OpenSTA in the Brewfile.\n\n```\nbrew bundle install\n```\n\nSet these variables before using cmake to cirumvent the Xcode versions.\n\n```\n  # flex/bison override apple version\n  export PATH=\"$(brew --prefix bison)/bin:${PATH}\"\n  export PATH=\"$(brew --prefix flex)/bin:${PATH}\"\n  export CMAKE_INCLUDE_PATH=\"$(brew --prefix flex)/include\"\n  export CMAKE_LIBRARY_PATH=\"$(brew --prefix flex)/lib;$(brew --prefix bison)/lib\"\n```\n\nHomebrew does not support tclreadline, but the macports system does\n(see https://www.macports.org). \n\n## Bug Reports\n\nUse the Issues tab on the github repository to report bugs.\n\nEach issue/bug should be a separate issue. The subject of the issue\nshould be a short description of the problem. Attach a test case to\nreproduce the issue as described below. Issues without test cases are\nunlikely to get a response.\n\nThe files in the test case should be collected into a directory named\nYYYYMMDD where YYYY is the year, MM is the month, and DD is the\nday (this format allows \"ls\" to report them in chronological order).\nThe contents of the directory should be collected into a compressed\ntarfile named YYYYMMDD.tgz.\n\nThe test case should have a tcl command file recreates the issue named\nrun.tcl. If there are more than one command file using the same data\nfiles, there should be separate command files, run1.tcl, run2.tcl\netc. The bug report can refer to these command files by name.\n\nCommand files should not have absolute filenames like\n\"/home/cho/OpenSTA_Request/write_path_spice/dump_spice\" in them.\nThese obviously are not portable. Use filenames relative to the test\ncase directory.\n\n## Contributions\n\nContributors must sign the Contributor License Agreement (doc/CLA.txt)\nwhen submitting pull requests.\n\nAll contributors should read doc/CodingGuidelines.txt for notes on\nmaking code that adheres to the existing naming and formatting style.\n\nContributions that claim 4% performance improvements in OpenROAD flow\nscripts will largely be ignored. Small performance improvements\nsimply do not justify the time required to audit and verify the changes.\n\nContributions that add dependencies on external libraries like boost,\nabseil and Intel TBB will not be accepted.\n\nAs the author of OpenSTA I vastly prefer writing code to reviewing\ncode.  I don't have the patience to go round after round to correct\ncode formatting that is not consistent with the rest of the code.\n\n## Authors\n\n* James Cherry\n\n* William Scott authored the arnoldi delay calculator at Blaze, Inc\n  which was subsequently licensed to Nefelus, Inc that has graciously\n  contributed it to OpenSTA.\n\n## License\n\nOpenSTA, Static Timing Analyzer\nCopyright (c) 2023, Parallax Software, Inc.\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthe-openroad-project%2Fopensta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthe-openroad-project%2Fopensta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthe-openroad-project%2Fopensta/lists"}