diff --git a/.github/workflow-documentation.md b/.github/workflow-documentation.md index c920176e6..f3ab80fbb 100644 --- a/.github/workflow-documentation.md +++ b/.github/workflow-documentation.md @@ -1,4 +1,4 @@ -# Openlane CI/CD +# For developers: CI/CD There are two primary flows: the pull request flow and the deployment flow. The deployment flow occurs on a daily basis. The PR flow happens whenever someone creates a new Pull Request. PRs can be created by contributors or by an automated tool updater that runs on a schedule. @@ -6,16 +6,16 @@ The deployment flow occurs on a daily basis. The PR flow happens whenever someon ![A Diagram Of The Flow](./diagrams/flow.png) * A maintainer cannot review their own code, but they can merge it after a review by another maintainer. -# Required Secrets +## Required Secrets Repository secrets are used to protect certain credentials, but also as repository-dependent parameters for the CI. -## Common +### Common | Secret | Description | |---------------|---------------------------------------------------------------| | `MAIN_BRANCH` | The main branch for OpenLane. Format: `main`|`master`|`etc` | | `MY_TOKEN` | A token for a bot account that: 1. owns the fork for the tool update. 2. has write access to the volare repo to push newly-built PDKs to. | -## CI +### CI | Secret | Description | |---------------|---------------------------------------------------------------| @@ -25,7 +25,7 @@ Repository secrets are used to protect certain credentials, but also as reposito | `DOCKERHUB_PASSWORD` | The password/token for the given username that has push access to the organization that owns `DOCKER_IMAGE` on Docker Hub. | | `VOLARE_OWNER`/`VOLARE_REPO` | (optional) A volare repo to cache builds in. In our case, `VOLARE_OWNER` would be `efabless` and `VOLARE_REPO` would be `volare`. | -## Tool Updater +### Tool Updater | Secret | Description | |---------------|---------------------------------------------------------------| diff --git a/AUTHORS.md b/AUTHORS.md index 7191ba538..3e0dc4c1e 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,3 +1,4 @@ +# Authors Efabless Corporation is the principal author of this software for the purpose of copyright. All binaries provided are also distributed by Efabless Corporation. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 543dc879e..e46632588 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,10 +1,10 @@ # How to Contribute We'd love to accept your patches and contributions to this project. There are just a few small guidelines you need to follow. -# Branching +## Branching For various reasons, it's recommended to call working branches, even in your forks, something else other than `master` or `main`, as those two branch names do have some special behavior associated with them. -# Testing and Code Standards +## Testing and Code Standards Before you submit your changes, it's prudent to perform some kind of smoke test. `make test` tests a simple spm design to ensure nothing has gone horribly wrong. ## Choice of Language @@ -35,18 +35,18 @@ There are some special guidelines for scripts in `scripts/yosys`, `scripts/openr * $DESIGN_DIR -# Submissions +## Submissions Make your changes and then submit them as a pull requests to the `master` branch. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests. -## The Approval Process +### The Approval Process For a PR to be merged, there are two requirements: - There are two automated checks, one for linting and the other for functionality. Both must pass. - An OpenLane team member must inspect and approve the PR. -# Licensing and Copyright +## Licensing and Copyright Please add you (or your employer's) copyright headers to any files to which you have made major edits. Please note all code contributions must have the same license as OpenLane, i.e., the Apache License, version 2.0. \ No newline at end of file diff --git a/conf.py b/conf.py index ddd50f18b..91b21c9ad 100644 --- a/conf.py +++ b/conf.py @@ -41,12 +41,9 @@ "markdown_cross_doc_section_links", # CUSTOM "sphinx.ext.autosectionlabel", "image_links", # CUSTOM - "toc_from_markdown", # CUSTOM "myst_parser", ] -# Expand source suffixes - source_suffix = { ".rst": "restructuredtext", ".md": "markdown", @@ -111,6 +108,4 @@ myst_heading_anchors = 3 -def setup(app): - app.emit("create_index_softlink", "README.md", True) - app.emit("toc_from_markdown", "README.md", ".autotoc.rst", True) +root_doc = "index" diff --git a/docker/README.md b/docker/README.md index 693d24827..d0a1e5f97 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,4 +1,4 @@ -# The OpenLane Docker Image +# For developers: Building the Docker Image Note: You probably shouldn't be here. ## Structure diff --git a/docs/Makefile b/docs/Makefile index bbe623235..1798e84f5 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -16,10 +16,12 @@ # Minimal makefile for Sphinx documentation # +export SHELL=/bin/bash + # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build +SPHINXBUILD ?= source ../venv/bin/activate && sphinx-build SOURCEDIR = .. BUILDDIR = _build @@ -27,7 +29,10 @@ BUILDDIR = _build help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -.PHONY: help Makefile +.PHONY: help Makefile install + +install: + source ../venv/bin/activate && python -m pip install -r requirements.txt # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). diff --git a/docs/_ext/toc_from_markdown.py b/docs/_ext/toc_from_markdown.py deleted file mode 100644 index f92892721..000000000 --- a/docs/_ext/toc_from_markdown.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 - -import re -import os -import os.path as path -from util import debug - -cleanup_on_finish_files = [] - - -def setup(app): - app.add_event("create_index_softlink") - app.connect("create_index_softlink", index_softlink) - app.add_event("toc_from_markdown") - app.connect("toc_from_markdown", auto_generate_toc) - app.connect("build-finished", after_build_cleanup) - return {"version": "1.0", "parallel_read_safe": True} - - -def after_build_cleanup(app, exception): - for f in cleanup_on_finish_files: - os.remove(path.join(app.srcdir, f)) - debug(f"[TOC] Deleted {f}.") - - -def extract_markdown_links(file): - """Extracts list of local markdown links from markdown file""" - # two formats for local markdown file links - linknameexp1 = r"\[[\/\.\w]*\]" - linktargetexp1 = r"\(\.[\/\.\w]*{fileext}\)" - linkexp1 = linknameexp1 + linktargetexp1.format(fileext=r"\.md") - - # case 2 [tag] link - linknameexp2 = r"\[[0-9]*\]\:\s*" - linktargetexp2 = r"\.[\/\.\w]*{fileext}\s*\n" - linkexp2 = linknameexp2 + linktargetexp2.format(fileext=r"\.md") - - links = [] - try: - with open(file, "r") as f: - block = f.read() - for m in re.finditer(linkexp1, block): - link = m.group(0).partition("(")[2].rpartition(")")[0].strip() - links.append(link) - for m in re.finditer(linkexp2, block): - link = m.group(0).rpartition(":")[2].strip() - links.append(link) - except Exception as e: - debug(f"[TOC] Warning: Failed to process {file}.") - debug(e) - - return links - - -def auto_generate_toc(app, master, tocname, cleanup=False, hidden=True, maxdepth=3): - """ - Automaticaly generate rst file with hidden toc' - """ - global cleanup_on_finish_files - - if cleanup: - cleanup_on_finish_files.append(tocname) - - master = path.join(app.srcdir, master) - tocname = path.join(app.srcdir, path.basename(tocname)) - links = [master] - - while maxdepth: - newlinks = [] - for file in links: - fromfile = extract_markdown_links(file) - newlinks += [ - path.normpath(path.join(os.path.dirname(file), file_link)) - for file_link in fromfile - ] - newlinks = [newlink for newlink in set(newlinks) if newlink not in links] - if not len(newlinks): - break - links += newlinks - maxdepth -= 1 - - links = [os.path.relpath(abslink, os.path.dirname(tocname)) for abslink in links] - links.sort() - - with open(tocname, "w") as f: - indent = " " - f.write(":orphan:\n\n") - f.write(".. toctree::\n") - if hidden: - f.write(indent + ":hidden:\n") - f.write("\n") - for link in links: - f.write(indent + link + "\n") - - -def index_softlink(app, master, cleanup=False): - global cleanup_on_finish_files - - softlink = "index." + master.rpartition(".")[2] - if cleanup: - cleanup_on_finish_files.append(softlink) - - master = path.join(app.srcdir, master) - softlink = path.join(app.srcdir, softlink) - - try: - os.symlink(master, softlink) - except FileExistsError: - os.remove(softlink) - os.symlink(master, softlink) diff --git a/docs/_static/docs_contribution/code_block_issue.png b/docs/_static/docs_contribution/code_block_issue.png new file mode 100755 index 000000000..f7488918d Binary files /dev/null and b/docs/_static/docs_contribution/code_block_issue.png differ diff --git a/docs/_static/docs_contribution/code_block_spaces_around_the_code.png b/docs/_static/docs_contribution/code_block_spaces_around_the_code.png new file mode 100755 index 000000000..ff2ae6323 Binary files /dev/null and b/docs/_static/docs_contribution/code_block_spaces_around_the_code.png differ diff --git a/docs/_static/docs_contribution/code_block_supposed_look.png b/docs/_static/docs_contribution/code_block_supposed_look.png new file mode 100755 index 000000000..d99d4a715 Binary files /dev/null and b/docs/_static/docs_contribution/code_block_supposed_look.png differ diff --git a/docs/_static/installation/spm.png b/docs/_static/installation/spm.png new file mode 100755 index 000000000..400842a6e Binary files /dev/null and b/docs/_static/installation/spm.png differ diff --git a/docs/source/chip_integration.md b/docs/source/chip_integration.md index a109ea2bc..c866be0cc 100644 --- a/docs/source/chip_integration.md +++ b/docs/source/chip_integration.md @@ -1,7 +1,7 @@ **THIS PAGE IS STILL UNDER DEVELOPMENT.** **THE INFORMATION HERE MIGHT BE PARTIALLY INCORRECT OR OUTDATED.** -# Chip Integration +# Chip Level Integration Using openlane, you can produce a GDSII from a chip RTL. @@ -131,7 +131,7 @@ When you use the `power_routing` command in the chip interactive script, the pow [This][1] has a description for all OpenLane commands. -[0]: ./../../configuration/README.md +[0]: ./configuration.md [1]: ./openlane_commands.md [2]: ./advanced_readme.md [3]: https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/src/pdn/doc/PDN.md @@ -140,6 +140,6 @@ When you use the `power_routing` command in the chip interactive script, the pow [6]: https://github.com/efabless/caravel/blob/mpw-one-b/openlane/chip_io/padframe.cfg [7]: ./../../scripts/topModuleGen/README.md [8]: ./hardening_macros.md -[9]: https://github.com/efabless/openlane/tree/master/designs/manual_macro_placement_test +[9]: https://github.com/The-OpenROAD-Project/openlane/tree/master/designs/manual_macro_placement_test [10]: ./advanced_power_grid_control.md [11]: https://github.com/efabless/caravel/blob/mpw-one-b/openlane/caravel/interactive.lvs.tcl diff --git a/configuration/README.md b/docs/source/configuration.md similarity index 99% rename from configuration/README.md rename to docs/source/configuration.md index 9aa91228c..5875a0c98 100644 --- a/configuration/README.md +++ b/docs/source/configuration.md @@ -287,4 +287,4 @@ These variables worked initially, but they were too sky130 specific and will be | `QUIT_ON_LVS_ERROR` | Checks for LVS errors after netgen LVS is executed and exits the flow if any was found. 1 = Enabled, 0 = Disabled
(Default: `1`)| -[0]: ./../designs/spm/pin_order.cfg +[0]: ./../../../designs/spm/pin_order.cfg diff --git a/docs/source/contributing_to_docs.rst b/docs/source/contributing_to_docs.rst new file mode 100644 index 000000000..b1154059e --- /dev/null +++ b/docs/source/contributing_to_docs.rst @@ -0,0 +1,209 @@ +Documentation Contributors guide +================================================================================ + +.. note:: This page is for documentation contributors. For prospecting OpenLane contributors, please see `CONTRIBUTING.md <../../CONTRIBUTING.html>`_ + +Introduction +-------------------------------------------------------------------------------- +Documentation plays an important role in OpenLane. +Good documentation should cover as much information as possible, +while staying readable, up-to-date and clean. +This page covers installation of required tools +and outlines simple principles to be followed when writing documentation. + +.. note:: To simply fix typos, you do not need to install anything. +Pull requests can be created from the relevant ReadTheDocs page, +using GitHub's editor. + +For more complex documentation, it is recommended to follow these steps: + +1. Read this guide +2. Either create a new page in ``docs/source/``. Then you need to add your page to the Table of Contents in ``index.rst`` +3. ... or open an existing one in the same folder. +4. Follow these guidelines: + * Begin with the general structure of the documentation. This step ensures continuity with the rest of the documentation and allows the writer to better organize their thoughts. + * Use reStructuredText and existing plugins to write the documentation. + * Create as much visual documentation as possible. More is better. + * Pictures, figures, tables significantly improve the quality of documentation and make the documentation available for beginners. + * Add links to references, guide and pointers to other available documentation or books. +5. Use :ref:`building_docs_locally` to preview and visualize the documentation. +6. Copy the text from preview into an editor that highlights the mistakes and fix them. +7. Rebuild documentation and repeat. +8. Once satisfied, commit the changes to your repository using git. +9. Create a pull request to the main repository, so the maintainers can review your changes. +13. Maintainers may request some tweaks (or do the tweaks themselves.) Execute them and then push the changes again. +14. Once changes are approved they will be merged and then you can delete your branch or repository. + +.. _building_docs_locally: + +Building documentation locally +-------------------------------------------------------------------------------- + +Assuming you have OpenLane installed, a Python virtual environment will be created in ``/venv``. You can the + +.. code-block:: console + + # Assuming you are inside the OpenLane folder + ## If you didn't 'make openlane' already… + make venv + + # Install required modules + make -C docs/ install + +After installation, every time you want to build the documentation proceed to enter the venv and run ``sphinx-build`` following commands: + +.. code-block:: console + + cd OpenLane/ + # assuming you are inside OpenLane folder + make -C docs/ html + +View the generated html files using your favorite web browser. Open this document in browser: + +.. code-block:: console + + # Assuming same folder as OpenLane + cd OpenLane/ + + # macOS + open docs/_build/html/docs/source/contributing_to_docs.html + + # Most GNU/Linux Distributions + xdg-open docs/_build/html/docs/source/contributing_to_docs.html + +Documentation `regarding reStructuredText can be found here: `_. + +Documentation organization +-------------------------------------------------------------------------------- +All of the documentation is concetrated in ``docs/``. +Static files for a certain document are stored in ``docs/_static`` in its respective directory: for example, screenshots for this guide are located in ``docs/_static/docs_contrbution``, +while the screenshots for the installation guide are located in ``docs/_static/installation``. + +Directory ``docs/source/`` contains all of the page's content. +You can add pages by creating the corresponding file in that folder. +Then you need to add your page to the Table of Contents in ``index.rst``. +Or if you want it to be in category, then modify the Table of Contents of said category. +If you want to create new category than take a look at the source code of existing category. + +Writing Style and Consistency +-------------------------------------------------------------------------------- + +* New documentation should be written in reStructuredText not Markdown. Take a look at existing RST documentation to get a glimpse of its syntax. +* Use ``of`` instead of ``'``, for example: ``Docker's Installation`` → ``after the installation of Docker``. +* Instead of ``don't`` and ``can't`` use full forms: ``do not`` and ``cannot`` +* The first command of the page should have `cd` in it to specify where you are running and all following commands assume the continuation of the session and don't need the cd command. +* In Markdown avoid using same header type both for the title of the document and its content. It looks awful in the table of content. + +Terms Consistency +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In order to improve the readability of the documentation, please use and capitalize trademarks properly. Some examples you can see below: + +.. code-block:: + + OpenLANE → OpenLane + OpenRoad → OpenROAD + Mac OS X → macOS + MAGIC → Magic + open source → open-source + Skywater130 → sky130 + Klayout → KLayout + Pip -> pip or PIP + +* For technical terms, use the following terms preferred by OpenROAD documentation for consistency: + +.. code-block:: + + co-ordinates → coordinates + pad ring → padring + pad cell → padcell + key value pair → key-value pair + micrometre → micron (or, micrometer) + +Taking screenshots +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The screenshots in documentation should use following prompt: + +.. code-block:: console + + export PS1="\W> " + +You can add it to your ``.bashrc`` or just run it before you run the command. + +.. note:: Please note that taking screenshots for terminal output is not recommended. You may want to use a ``code-block`` object. + +RST Headers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Use headers to make structure of the documentation better. For underline and overlines use 80 symbols. Here are the header priorities. Top is the highest priority. + +.. code-block:: + + # with overline + * with overline + = + - + ^ + " + +Wait, what's an overline? + +.. code-block:: + + ################## <- Overline + OVERLINED TITLE + ################## + +Troubleshooting +-------------------------------------------------------------------------------- + +Your ``code-block`` s do not look like they are supposed to +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. important:: + Intendation, whitespaces, newlines of the reStructuredText are really important. They all have meaning in .rst files, so take a look at the already existing code to help you figure out the issues. + +How it looks: + +.. image:: ../_static/docs_contribution/code_block_issue.png + +How it is supposed to look: + +.. image:: ../_static/docs_contribution/code_block_supposed_look.png + +This is because ``code-blocks`` need to have empty lines around code sections, like shown in the picture below: + +.. image:: ../_static/docs_contribution/code_block_spaces_around_the_code.png + +``pip`` module related errors +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +If you're running ``sphinx-build`` manually and did not source ``../venv/bin/activate`` before running ``sphinx-build`` then you may run into an error similar to the one below. + +.. code-block:: console + + Running Sphinx v5.0.1 + + Configuration error: + There is a programmable error in your configuration file: + + Traceback (most recent call last): + File "/home/armleo/.local/lib/python3.10/site-packages/sphinx/config.py", line 343, in eval_config_file + exec(code, namespace) + File "/home/armleo/Desktop/OpenLaneGSOC/conf.py", line 24, in + from recommonmark.parser import CommonMarkParser + ModuleNotFoundError: No module named 'recommonmark' + +In order to resolve this, repeat the steps above for enabling venv. + +Sphinx build complains about title underline being too short +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When running ``sphinx-build`` you may get following warning: + +.. code-block:: console + + /home/armleo/Desktop/OpenLaneGSOC/docs/source/installation.rst:3: WARNING: Title underline too short. + + Installation of OpenLane + ######## + +Try to use 80 symbol long header underlines. This makes replacing them easier and keeps the documentation consistent. diff --git a/designs/README.md b/docs/source/designs.md similarity index 100% rename from designs/README.md rename to docs/source/designs.md diff --git a/docs/source/eco_flow.md b/docs/source/eco_flow.md index 008a5b1cd..fd77646b0 100644 --- a/docs/source/eco_flow.md +++ b/docs/source/eco_flow.md @@ -3,7 +3,7 @@ The ECO flow starts from checking the report generated in the route step. A pyth ![image](../_static/eco_flow.png) -# Flow to Insert Buffer +## Flow to Insert Buffer 1. Run the OL flow 2. Hold violations will be present in the log files 3. Run gen_insert_buffer.py, using regex to get the `pinname` @@ -13,7 +13,7 @@ The ECO flow starts from checking the report generated in the route step. A pyth 7. Repeat 1-6 till all hold violations are solved. Given a routing report, we first parse the reports into several sections. Each section contains one path. Then, regular expressions are used to detect if the path is `VIOLATED`. If the path has hold time violations, we save the slack and corresponding startpoint into a vector. The type of the buffer is `sky130_fd_sc_hd__dlygate4sd3_1`, so the number of the buffer to be inserted should be the minimum slack divided by FO1 delay. Finally, we dump all the `insert_buffer `commands into a tcl file. -# Insert Buffer Command +## Insert Buffer Command 1. Find the violation’s startpoint 2. Create the buffer and nets 3. Disconnect the original nets (slightly different for reg-to-reg and pin-to-reg cases) @@ -21,7 +21,7 @@ Given a routing report, we first parse the reports into several sections. Each s 5. Connect new nets (slightly different for reg-to-reg and pin-to-reg cases) We realize all the operations with OpenDB commands. When we insert the buffer, we move the old net together with the startpoint, - the net name should be the same with the pin name and cannot be changed. In OpenDB. `connect` and `disconnect` functions are `class static` for `reg` cases and regular member methods for pin cases. For `reg ` cases, we also need to specify which port (input or output) to disconnect the line from. -# Testcase Results +## Testcase Results We tested the latest OpenLane with ECO on the LiteX Management Core [rc-8 ](https://github.com/efabless/caravel_mgmt_soc_litex/releases/tag/rc-8) release. All the timing reports are generated by OpenSTA. For the 1st iteration, the design has 131 hold violations with a -1.48 worst case slack. Our ECO inserts 219 buffers into the block, which greatly reduces the number of violations. After 10 iterations, all the violations are solved and setup time is not influenced during this process. @@ -31,7 +31,7 @@ The following table shows the timing results of the ECO flow for each ECO iterat ![image](../_static/eco_results.png) -# How to enable the ECO flow +## How to enable the ECO flow If the user would like to enable this step, they would have to set the ECO_ENABLE environment variable to 1 as follows: ```tcl diff --git a/docs/source/for_developers.rst b/docs/source/for_developers.rst new file mode 100644 index 000000000..c33a76317 --- /dev/null +++ b/docs/source/for_developers.rst @@ -0,0 +1,14 @@ +Contributing to OpenLane +################################################################################ + +.. toctree:: + :glob: + + ../../CONTRIBUTING + contributing_to_docs + pdk_structure + using_or_issue + ../../.github/workflow-documentation.md + ../../docker/README.md + issue_regression_tests + diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst new file mode 100644 index 000000000..3158de747 --- /dev/null +++ b/docs/source/getting_started.rst @@ -0,0 +1,9 @@ +Getting Started +---------------------- + +.. toctree:: + :glob: + + + installation + quickstart \ No newline at end of file diff --git a/docs/source/hardening_macros.md b/docs/source/hardening_macros.md index 6c005c56a..c6aee4834 100644 --- a/docs/source/hardening_macros.md +++ b/docs/source/hardening_macros.md @@ -212,14 +212,14 @@ To integrate that macro into a core or a chip, check this [documentation on chip If you want to create further tweaks in the flow that the abundant configurations don't allow, make sure to check [this][2] for more details about the interactive mode of the OpenLane flow. -[0]: ./../../configuration/README.md +[0]: ./../../docs/source/configuration.md [1]: ./openlane_commands.md [2]: ./advanced_readme.md [3]: https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/src/pdn/doc/PDN.md [4]: ./chip_integration.md -[5]: ./../../designs/README.md +[5]: ./../../docs/source/designs.md [6]: ./../../regression_results/README.md -[7]: https://github.com/efabless/openlane/blob/master/designs/spm/pin_order.cfg +[7]: https://github.com/The-OpenROAD-Project/openlane/blob/master/designs/spm/pin_order.cfg [8]: ./pdk_structure.md [9]: ./advanced_power_grid_control.md [10]: ./../../regression_results/datapoint_definitions.md diff --git a/docs/source/installation.rst b/docs/source/installation.rst new file mode 100644 index 000000000..f6efb84a1 --- /dev/null +++ b/docs/source/installation.rst @@ -0,0 +1,339 @@ + +Installation +================================================================================ +OpenLane uses `Docker `_ images that contain binaries, libraries and packages all ready-to-use. +All of the flow tools are encapsulated inside the container image. + +Open source projects typically have to address the challenge of various user environments, +operating systems, virtual machines, cloud-based distribution etc. +Docker images alleviate this problem. + +Installation steps +-------------------------------------------------------------------------------- + +Step 1. Installation of Required Packages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For OpenLane you need a couple of tools installed: + + - Linux (or the `Windows Subsystem for Linux `_) or macOS + - Docker 19.03.12+ + - Git 2.35+ + - Python 3.6+ + - pip + - venv + - GNU Make + +After installing all of the above, proceed to :ref:`step2`. + + +Installing Dependencies under Ubuntu +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +Only Ubuntu 20.04 and above are supported. Most complex utilities are included in the Docker image, so the installation list is quite slim: + +.. code-block:: bash + + sudo apt install -y build-essential python3 python3-venv python3-pip git + +Next, you'll need install Docker. Follow the as steps provided below may be out of date. + +.. warning:: The following steps may become out of date. You may want to follow the official Docker documentation `here `_. + +.. code-block:: console + + # Remove old installations + sudo apt-get remove docker docker-engine docker.io containerd runc + # Installation of requirements + sudo apt-get update + sudo apt-get install \ + ca-certificates \ + curl \ + gnupg \ + lsb-release + # Add the keyrings of docker + sudo mkdir -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + # Add the package repository + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + # Update the package repository + sudo apt-get update + + # Install Docker + sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin + + # Check for installation + sudo docker run hello-world + + +A successful installation of Docker would print out something like this: + +.. code-block:: console + + After installation you will get Hello World of Docker: + + Hello from Docker! + This message shows that your installation appears to be working correctly. + + To generate this message, Docker took the following steps: + 1. The Docker client contacted the Docker daemon. + 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) + 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. + 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. + + To try something more ambitious, you can run an Ubuntu container with: + $ docker run -it ubuntu bash + + Share images, automate workflows, and more with a free Docker ID: + https://hub.docker.com/ + + For more examples and ideas, visit: + https://docs.docker.com/get-started/ + +Proceed to :ref:`step2` + + +Installation of required packages under macOS +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +First install `Homebrew `_ then run script below to install the required packages: + +.. code-block:: console + + brew install python make + brew install --cask docker + +When Docker is done installing, you'll need to launch the newly installed "Docker Desktop" app from Launchpad and follow instructions in the terminal. + +.. _step2: + +Step 2. Making Docker available without root +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. warning:: The following steps may become out of date. You may want to follow the official Docker documentation `here `_. + +If you're using the Windows Subsystem for Linux or macOS you may skip this step, but if you're running native Linux, this is a **mandatory step** without which all OpenLane scripts would fail. + +.. important:: + This is a MANDATORY step. Without this, most OpenLane scripts will be confused and error out with permission issues. This step caused a lot of confusion because a lot of users tend to assume just installing Docker is file. IF YOU ARE USING LINUX, DO NOT SKIP! + + +.. code-block:: console + + sudo groupadd docker + sudo usermod -aG docker $USER + sudo reboot # REBOOT! + +You **must restart your operating system** for the group permissions to apply. + +You can verify that the group has been added as follows: + +.. code-block:: console + + id | grep -c docker + +If you see an output of ``1``, you've added yourself to the ``docker`` group successfully. + +.. _step3: + +Step 3. Checking the Docker Installation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If every thing has been set up correctly, you can run the Docker ``hello-world`` image without root. To test, it use following command: + +.. code-block:: shell + docker run hello-world + +You will get a happy little "Hello, world!" message, once again, but this time without root. + +.. code-block:: + + Hello from Docker! + This message shows that your installation appears to be working correctly. + + To generate this message, Docker took the following steps: + 1. The Docker client contacted the Docker daemon. + 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. + (amd64) + 3. The Docker daemon created a new container from that image which runs the + executable that produces the output you are currently reading. + 4. The Docker daemon streamed that output to the Docker client, which sent it + to your terminal. + + To try something more ambitious, you can run an Ubuntu container with: + $ docker run -it ubuntu bash + + Share images, automate workflows, and more with a free Docker ID: + https://hub.docker.com/ + + For more examples and ideas, visit: + https://docs.docker.com/get-started/ + + +Troubleshooting Step 3. +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +If you get Docker permission error when running any Docker images: + +.. code-block:: console + + OpenLane> docker run hello-world + docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied. + See 'docker run --help'. + OpenLane> + +Then you skipped a step or two. You forgot to follow :ref:`step2` or `restart your Operating System`. + +Step 4. Checking Installation Requirements +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In order to check your installation, you can run the following commands: + +.. code-block:: console + + git --version + docker --version + python3 --version + python3 -m pip --version + make --version + python -m venv -h + +Successful outputs look something like this: + +.. code-block:: console + + $ git --version + git version 2.36.1 + $ docker --version + Docker version 20.10.16, build aa7e414fdc + $ python3 --version + Python 3.10.5 + $ python3 -m pip --version + pip 21.0 from /usr/lib/python3.10/site-packages/pip (python 3.10) + $ make --version + GNU Make 4.3 + Copyright (C) 1988-2020 Free Software Foundation, Inc. + License GPLv3+: GNU GPL version 3 or later + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + $ python3 -m venv -h + Built for x86_64-pc-linux-gnu + usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] + [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-deps] + ENV_DIR [ENV_DIR ...] + + Creates virtual Python environments in one or more target directories. + + positional arguments: + ENV_DIR A directory to create the environment in. + + options: + -h, --help show this help message and exit + --system-site-packages + Give the virtual environment access to the system + site-packages dir. + --symlinks Try to use symlinks rather than copies, when symlinks + are not the default for the platform. + --copies Try to use copies rather than symlinks, even when + symlinks are the default for the platform. + --clear Delete the contents of the environment directory if it + already exists, before environment creation. + --upgrade Upgrade the environment directory to use this version + of Python, assuming Python has been upgraded in-place. + --without-pip Skips installing or upgrading pip in the virtual + environment (pip is bootstrapped by default) + --prompt PROMPT Provides an alternative prompt prefix for this + environment. + --upgrade-deps Upgrade core dependencies: pip setuptools to the + latest version in PyPI + + Once an environment has been created, you may wish to activate it, e.g. by + sourcing an activate script in its bin directory. + +Step 5. Download OpenLane +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Download OpenLane from GitHub: + +.. code-block:: console + + git clone --depth 1 https://github.com/The-OpenROAD-Project/OpenLane.git + cd OpenLane/ + +Successful download will look like this: + +.. code-block:: console + + git clone --depth 1 https://github.com/The-OpenROAD-Project/OpenLane.git + cd OpenLane/ + Cloning into 'OpenLane'... + remote: Enumerating objects: 471, done. + remote: Counting objects: 100% (471/471), done. + remote: Compressing objects: 100% (393/393), done. + remote: Total 471 (delta 66), reused 279 (delta 35), pack-reused 0 + Receiving objects: 100% (471/471), 2.78 MiB | 4.91 MiB/s, done. + Resolving deltas: 100% (66/66), done. + +Step 6. Download the Docker Image and Install sky130 PDK +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Download the Docker image of OpenLane and install sky130 PDK: + +.. code-block:: console + + make + +If you are planning to use other PDK, then you need to follow the PDK installation guide for that specific PDK. + +Step 7. Validating your OpenLane Installation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Test the installed PDK and OpenLane: + +.. code-block:: console + + make test # This a ~5 minute test that verifies that the flow and the pdk were properly installed + +Sucessful test looks like this: + +.. code-block:: console + + Basic test passed + +Step 8. Optional: Viewing Test Design Outputs +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +On Linux, you can open the final layout of the test design using KLayout. This will open the window of KLayout in editing mode ``-e`` with the sky130A process. + + +.. code-block:: console + + # Enter a Docker session: + make mount + + # Open the spm.gds using KLayout with sky130 PDK + klayout -e -nn $PDK_ROOT/sky130A/libs.tech/klayout/sky130A.lyt \ + -l $PDK_ROOT/sky130A/libs.tech/klayout/sky130A.lyp \ + ./designs/spm/runs/openlane_test/results/final/gds/spm.gds + + # Leave the Docker + exit + +.. image:: ../_static/installation/spm.png + + +Updating OpenLane +-------------------------------------------------------------------------------- + +Run following commands to update the OpenLane: + +.. code-block:: console + + cd OpenLane/ + git pull --depth 1 https://github.com/The-OpenROAD-Project/OpenLane.git master + make + make test # This is to test that the flow and the pdk were properly updated + +It is very similar to installation, one difference is +that we pull the changes instead of creating a new workspace. +Git pull, by default, will not remove any files in your workspace. diff --git a/docs/source/issue_regression_tests.md b/docs/source/issue_regression_tests.md index 36a3b4b39..c79595605 100644 --- a/docs/source/issue_regression_tests.md +++ b/docs/source/issue_regression_tests.md @@ -1,7 +1,7 @@ # Issue regression tests Issue regression tests are used to test issues that happened in the past, that might return by changes introduced in the future. Regression testing also allows to extend the options/configs that is not covered currently. To run issue regression flow execute `make issue_regression_all` outside of docker image. -# Issue regression tests flow +## Issue regression tests flow Another type of checks is intentionally broken test cases which test the OpenLane's ability to warn user about possible issues. Example issue is: `issue_912_def_test_missaligned`. Entry point is `run_issue_regressions.py` which will run all designs matching `designs/issue_*` pattern. After the run was compeleted with or without errors or fails, then for that design `issue_regression.py` is ran in OpenROAD Python environment. If flow failed and `issue_regression.py` does not exist, then issue regression failed. As `-run_hooks` will run only after successful flow, but the `issue_regression.py` will be ran in both failed and successful case. OpenLane users may want to use `-run_hooks`, while issue_regression is designed to be used only by regression flow. diff --git a/docs/source/local_installs.md b/docs/source/local_installs.md deleted file mode 100644 index d43657a34..000000000 --- a/docs/source/local_installs.md +++ /dev/null @@ -1,27 +0,0 @@ -**NOTE: It is more complex to set up OpenLane without a Docker container. If you are a novice user, it is recommended to use the Docker container.** - -# Using OpenLane without Docker -At its core, OpenLane is a set of scripts working with a set of tools. If you'd like to avoid using a Docker container, you can, but you will have to set up all of the tools required by OpenLane on your computer. We do provide a script to assist you with that. - -# Base Requirements -* Python 3.6+ with PIP -* pyyaml, venv: `python3 -m pip install pyyaml venv` - -# Tool Library -You can run `python3 ./env.py tool-list` for a list. There are at least a dozen tools to install here. Luckily, you don't have to install them all one-by-one: There is an installation script that installs most of them. - -You can invoke `python3 ./env.py local-install`. This tool copies the skeleton and installs all the tools to `$OPENLANE_ROOT_DIR/install`. Furthermore, if you are on CentOS 7, macOS or Ubuntu 20.04, the installer will offer to install all the required apt, yum or brew packages for you. - -The tools will all be installed with `./install` as a prefix. You'll find all the repos in `./install/build/repos` and a list of versions in `./install/build/versions`. - -**DO NOTE:** We expect you to get some tools on your own, because said tools are too complex to build in an automated fashion. Namely: -* OpenROAD -* Klayout -* Git 2.34+ - -After the installer is done, you can simply invoke `./flow.tcl` outside of Docker and it should work okay. - -# More about how this works -`flow.tcl` looks for a file called `./install/env.tcl` before it does anything. If it finds it, it sources it. The `./install` directory is aliased in Docker environments, which already have the proper tools installed. - -`./install/env.tcl` contains the necessary environment variables to add the installed tools to PATH and activate the Python virtual environment. \ No newline at end of file diff --git a/docs/source/openlane_commands.md b/docs/source/openlane_commands.md index f0a00b2bb..3279c2cee 100644 --- a/docs/source/openlane_commands.md +++ b/docs/source/openlane_commands.md @@ -356,8 +356,8 @@ Most of the following commands' implementation exists in these files: [deflef][1 [10]: ./../../scripts/utils/deflef_utils.tcl [11]: ./../../scripts/utils/fake_display_buffer.tcl [12]: ./../../scripts/utils/utils.tcl -[13]: ./../../configuration/README.md -[14]: https://github.com/efabless/openlane/blob/master/designs/spm/pin_order.cfg +[13]: ./../../docs/source/configuration.md +[14]: https://github.com/The-OpenROAD-Project/openlane/blob/master/designs/spm/pin_order.cfg [15]: ./chip_integration.md [16]: ./advanced_power_grid_control.md [17]: ./../../scripts/tcl_commands/klayout.tcl diff --git a/docs/source/quickstart.rst b/docs/source/quickstart.rst new file mode 100644 index 000000000..89c56b691 --- /dev/null +++ b/docs/source/quickstart.rst @@ -0,0 +1,126 @@ +Quick start +======================= +Overview +------------------------------------ +OpenLane is an automated RTL-to-GDSII flow that uses open-source tools like OpenROAD, +Yosys, Magic, Netgen, CVC and KLayout. +It also provides a number of custom scripts for design exploration, optimization and ECO. + +The flow performs a complete synthesis, floorplanning, placement and routing of your designs. +Currently, it supports both A and B variants of the sky130 PDK, but there are instructions on porting more PDKs. + +The tool encapsulates the underlying tools to allow users to configure them all in one place: ``config.json/tcl``. This file contains assignments to the variables that the flow uses. + +The rest of the tutorial assumes `OpenLane installation `_ is done. +This guide covers running the flow on existing desings, adding new designs and quick overview of the design directory strucutre. + +Starting the OpenLane Environment +------------------------------------------------------------------------ +.. note:: If you installed OpenLane following `local installation `_ steps, these instructions will not entirely apply. We no longer actively support local installation. + +OpenLane uses Docker to create a reproducible environment for your projects. You don't need any extra steps to run the Docker image, as the Makefile already takes care of it. Just run the following commands to enter the OpenLane environment: + +.. code-block:: console + + cd OpenLane/ + make mount + + +Running the flow +------------------------------------------------------------------------ + +The entry point for OpenLane is the ``./flow.tcl`` script. + +This script is used to run the flow, start interactive sessions, +select the configuration and create OpenLane design files. + +In order to run the flow, you need to execute the following command: + +.. code-block:: console + + ./flow.tcl -design + +For a design named ``gcd``, the invocation would look something like this: + +.. code-block:: console + + ./flow.tcl -design gcd + + +Creating new designs +------------------------------------------------------------------------ +The following command creates a new configuration file for your design: + +.. code-block:: console + + ./flow.tcl -design -init_design_config -add_to_designs + +This will create the following directory structure: + +.. code-block:: console + + designs/ + ├── config.json + +``config.json`` is a global configuration for all PDKs. For more information about design `configuration files please visit this page `_. In the configuration file, you should edit the required variables and the optional variables, if needed. + +The ``design_name`` could be replaced by the ``design_directory``, which will allow you to run designs from any folder in your machine. + +It is recommended to place the design's Verilog files in a ``src`` directory inside the design's folder as following: + +.. code-block:: console + + designs/ + ├── config.json + ├── src + │ ├── design.v + +However, you can also point to the source files while initializing the design and they will be pointed to automatically in the configuration file and will also be automatically copied to the src directory creating the same structure shown above. + +.. code-block:: console + + ./flow.tcl -design -init_design_config -src + + +This is a typical structure for a design folder: + +.. code-block:: console + + . + ├── config.json + ├── runs + │   └── RUN_2022.06.24_16.52.13 + │   ├── cmds.log + │   ├── config.json + │   ├── logs + │   ├── openlane.log + │   ├── OPENLANE_VERSION + │   ├── PDK_SOURCES + │   ├── reports + │   ├── results + │   ├── runtime.yaml + │   ├── tmp + │   └── warnings.log + └── src + └── mem_1r1w.v + +The main files are a configuration file and a ``src/`` folder that contains source code, as well as a ``runs`` folder that creates designs. + +You can find more information `regarding the ./flow.tcl in the documentation here `_. And here is the `reference documentation regarding the configuration valirables `_. + +Advanced: Using custom PDK locations and OpenLane Docker images +----------------------------------------------------------- +.. warning:: + If you accidently use the wrong version of a PDK or the OpenLane Docker image, then you may have *significant issues* down the line. If you don't know what you're doing, this section is not for you. + +While this is not recommended, if you need to override the location of PDK, then set the environment variable ``PDK_ROOT`` before running ``make mount``. + +Another environment variable is ``OPENLANE_IMAGE_NAME``. It can be used to override the Docker image that will be used but by default it's dynamically obtained using your current git version. Both ``PDK_ROOT`` and ``OPENLANE_IMAGE_NAME`` can be set independently. + +Here is an example for setting both variables: + +.. code-block:: console + + export PDK_ROOT=$HOME/pdks + export OPENLANE_IMAGE_NAME=efabless/openlane:ebad315d1def25d9d253eb2ec1c56d7b4e59d7ca + make mount diff --git a/docs/source/reference.rst b/docs/source/reference.rst new file mode 100644 index 000000000..a50e4d9f8 --- /dev/null +++ b/docs/source/reference.rst @@ -0,0 +1,11 @@ +Reference documentation +-------------------------------------------------------------------------------- +.. toctree:: + :glob: + + configuration + designs + eco_flow + openlane_commands + advanced_readme + manual_pdk_installation \ No newline at end of file diff --git a/docs/source/usage.rst b/docs/source/usage.rst new file mode 100644 index 000000000..606138300 --- /dev/null +++ b/docs/source/usage.rst @@ -0,0 +1,9 @@ +Using OpenLane +--------------- +.. toctree:: + :glob: + + hardening_macros + chip_integration + advanced_power_grid_control + \ No newline at end of file diff --git a/docs/source/using_or_issue.md b/docs/source/using_or_issue.md index 79603e3f9..b15914d90 100644 --- a/docs/source/using_or_issue.md +++ b/docs/source/using_or_issue.md @@ -3,7 +3,7 @@ This script creates a reproducible, self-contained package of files to demonstra It creates a folder with all the needed files that you can inspect, then zip or tarball and pass on to https://github.com/RTimothyEdwards/magic or https://github.com/The-OpenROAD-Project/OpenROAD. -# Warning about proprietary files +## Warning about proprietary files When working with a proprietary PDK, also inspect the folder and ensure no proprietary data resulting ends up in there. This is *critical*, if something leaks, this scripts' authors take no responsibility and you are very much on your own. We will try our best to output warnings for your own good if something looks like a part of a proprietary PDK, but the absence of this message does not necessarily indicate that your folder is free of confidential material. # Usage diff --git a/index.rst b/index.rst new file mode 100644 index 000000000..749e6157f --- /dev/null +++ b/index.rst @@ -0,0 +1,14 @@ +OpenLane +########### + +OpenLane is an automated RTL to GDSII flow based on several components including OpenROAD, Yosys, Magic, Netgen, CVC, SPEF-Extractor, CU-GR, Klayout and a number of custom scripts for design exploration and optimization. The flow performs full ASIC implementation steps from RTL all the way down to GDSII. + +.. toctree:: + :glob: + + docs/source/getting_started + docs/source/usage + docs/source/for_developers + docs/source/reference + AUTHORS + diff --git a/regression_results/README.md b/regression_results/README.md index 7473f4715..52fadfa5e 100644 --- a/regression_results/README.md +++ b/regression_results/README.md @@ -14,11 +14,11 @@ python3 run_designs.py --tag test --threads 3 spm xtea des aes256 You can view the results of the run against some designs (more [here](#usage)) against any of the 5 sky130 standard cell libraries through these sheets: -- [sky130_fd_sc_hd](https://github.com/efabless/openlane/blob/master/regression_results/benchmark_results/SW_HD.csv) -- [sky130_fd_sc_hs](https://github.com/efabless/openlane/blob/master/regression_results/benchmark_results/SW_HS.csv) -- [sky130_fd_sc_ms](https://github.com/efabless/openlane/blob/master/regression_results/benchmark_results/SW_MS.csv) -- [sky130_fd_sc_ls](https://github.com/efabless/openlane/blob/master/regression_results/benchmark_results/SW_LS.csv) -- [sky130_fd_sc_hdll](https://github.com/efabless/openlane/blob/master/regression_results/benchmark_results/SW_HDLL.csv) +- [sky130_fd_sc_hd](https://github.com/The-OpenROAD-Project/openlane/blob/master/regression_results/benchmark_results/SW_HD.csv) +- [sky130_fd_sc_hs](https://github.com/The-OpenROAD-Project/openlane/blob/master/regression_results/benchmark_results/SW_HS.csv) +- [sky130_fd_sc_ms](https://github.com/The-OpenROAD-Project/openlane/blob/master/regression_results/benchmark_results/SW_MS.csv) +- [sky130_fd_sc_ls](https://github.com/The-OpenROAD-Project/openlane/blob/master/regression_results/benchmark_results/SW_LS.csv) +- [sky130_fd_sc_hdll](https://github.com/The-OpenROAD-Project/openlane/blob/master/regression_results/benchmark_results/SW_HDLL.csv) **Note**: `flow_failed` under `flow_status` implies that the run had failed. diff --git a/regression_results/datapoint_definitions.md b/regression_results/datapoint_definitions.md index 0348d6ef7..907f25aa0 100644 --- a/regression_results/datapoint_definitions.md +++ b/regression_results/datapoint_definitions.md @@ -100,4 +100,4 @@ ## Optional variables -These variables are optional that can be specified in the configuration parameters file. Please refere to this [file](../configuration/README.md) for the full list of configurations. +These variables are optional that can be specified in the configuration parameters file. Please refere to this [file](../docs/source/configuration.md) for the full list of configurations.