OpenROAD Documentation

repository·master·Indexed 25 days ago

https://github.com/the-openroad-project/openroad

OpenROAD is an open-source digital physical design toolset for automated RTL-to-GDSII flows. It provides a suite of tools for synthesis, floorplanning, placement, clock tree synthesis (CTS), routing, and timing analysis. The toolset features a No-Human-In-Loop (NHIL) flow, a GUI for visualization and debugging, and APIs with Tcl and Python bindings. It is PDK-independent, supporting various open-source PDKs like SKY130 and GF180, as well as proprietary PDKs.

Tokens
84.8K
Snippets
236
Records
544
Agent score
83%

What's inside OpenROAD

  1. Overview of the Global Placement (gpl) module

    master

    The gpl module in OpenROAD provides global placement capabilities based on the open-source RePlAce tool. It uses an analytic and nonlinear placement algorithm that solves electrostatic force equations via Nesterov's method.

    Key features include:

    • Mixed-size placement mode: Supports placement of cells with varying sizes.
    • Technology Verification: Verified across multiple process nodes (7/14/16/28/45/55/65nm) using OpenDB.
    • Determinism: Guaranteed deterministic solution generation across different compilers and operating systems.
  2. Overview of FastRoute global routing tool

    master

    FastRoute is a global routing tool designed for VLSI back-end design. It utilizes a sequential rip-up and re-route (RRR) methodology combined with several advanced techniques to manage congestion and via counts.

    Key evolutionary features include:

    • Steiner Tree Construction: Uses FLUTE to construct congestion-driven Steiner trees, followed by edge shifting to optimize tree structure.
    • Congestion Management: Employs pattern routing, maze routing with logistic function-based cost functions, and monotonic routing.
    • Virtual Capacity: Uses a virtual capacity technique to adaptively adjust edge capacities, diverting wire usage from congested to less congested regions.
    • Via Minimization: Features via-aware Steiner trees, 3-bend routing, and layer assignment algorithms to reduce via counts.
  3. Overview of Gate Resizer

    master
    The Gate Resizer is a tool within OpenROAD used to manage design area and utilization. The resizer commands operate until the design area reaches a specified -max_utilization util percent of the core area, where util is a value between 0 and 100. If the design exceeds this maximum utilization, the resizer will stop and report an error.
  4. Overview of OpenROAD RTL-to-GDSII Flow

    master

    OpenROAD provides an autonomous, No-Human-In-Loop (NHIL) flow that converts Verilog RTL, libraries, and constraints into a final GDSII layout. The flow consists of the following stages:

    1. Synthesis: Converts Verilog to a netlist.
    2. Floorplan: Initializes chip area, performs IO placement, tapcell/welltie insertion, and PDN generation.
    3. Placement: Includes global placement (macro and standard cell) and detailed placement (legalization and timing analysis).
    4. Clock Tree Synthesis (CTS): Inserts buffers and resizes nets for timing optimization.
    5. Routing: Performs global and detailed routing (DRC-correct).
    6. Finishing: Includes parasitic extraction (OpenRCX), final timing/physical verification, and dummy metal fill.
  5. Overview of Flute3 wirelength calculation

    master
    Flute3 is an open-source rectilinear Steiner minimum tree (RSMT) heuristic used for calculating wirelength. In the OpenROAD project, it is specifically utilized by the grt (Global Route) and rsz (Resize) tools. This implementation supports nets of any degree and uses CMake, C++ namespaces, and dynamic memory allocation.
  6. Overview of the Pin Placer

    master

    The Pin Placer is a tool used to place pins on the die boundary along the track grid. Its primary goals are to minimize net wirelengths and create metal shapes for each pin based on min-area rules.

    For designs containing unplaced cells, the tool calculates net wirelength by assuming the unplaced cells are positioned at the center of the die area.

  7. Overview of Parasitics Extraction (rcx)

    master

    The rcx module in OpenROAD is based on OpenRCX, an open-source Parasitic Extraction (PEX) tool that utilizes OpenDB design APIs. It extracts both Resistance and Capacitance for routed designs based on the LEF/DEF layout model.

    Key features include:

    • Extraction Scope: Extracts resistance and capacitance for wires based on coupling distance, track density context, and cell abstracts.
    • Accuracy: Uses an Extraction Rules file (RC technology file) containing equations and calibration measurements for a specific process node and corner.
    • Data Storage: Stores resistance, coupling capacitance, and ground capacitance directly on OpenDB objects with pointers to the associated wire and via db objects.
    • Output: Supports generating .spef files.
  8. Overview of the Power Distribution Network (PDN) Generator

    master
    The pdn module in OpenROAD is based on the PDNGEN tool. It simplifies adding a power grid to a floorplan by allowing users to specify high-level power grid policies (such as metal layers, stripe width, and spacing) rather than manually creating every metal strap. These policies can be applied globally, specifically over the standard cell area, or over areas occupied by macros.
  9. Overview of the ODB Code Generation Pipeline

    master

    The gen.py script orchestrates the code generation process through four distinct stages:

    1. load_schema(): Reads the top-level schema.json and all individual class files located in schema/**/*.json.
    2. process_schema(): Performs derivation logic, including expanding relations, classifying field types, resolving accessor names/includes, packing bitfields, and computing comparison operators.
    3. generate(): Renders the derived data into C++ and CMake files using Jinja2 templates located in the templates/ directory.
    4. _merge_files(): Splicing stage. It inserts the generated code into the actual source files while preserving hand-written User Code blocks, followed by a clang-format pass.