Built-in Steps and their Configuration Variables¶
These steps are included with LibreLane and are used by its various built-in flows.
This page documents these steps, how to get them and their configuration variables (if applicable).
If you’re looking for documentation for the Step Python classes themselves,
check the API reference here.
Warnings
Two steps in a given Flow may share a configuration variable name if-and-only-if the variables are otherwise identical, i.e., the name, type, and default value all match. Otherwise, the flow will not compile.
Some steps have a variable prefixed with
RUN_that enables or disables said step. This is a vestige from OpenLane and it is recommended to explicitly specify your flow either by using the API or in your JSON configuration file’smetaobject.
Notes
?indicates an optional variable, i.e., a value that may hold a value ofNone. LibreLane steps are expected to understand that these values are optional and behave accordingly.Variable names denoted (PDK) are expected to be declared by the PDK.
If a PDK does not define one of the required variables, it is considered to be incompatible with this step.
Tip
For a table of contents, press the following button on the top-right corner
of the page:
Checker¶
Disconnected Pins Checker¶
Raises an immediate error if critical disconnected pins (metric: design__critical_disconnected_pin__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import DisconnectedPins
# or
from librelane.steps import Step
DisconnectedPins = Step.factory.get("Checker.DisconnectedPins")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for disconnected instance pins after detailed routing and quits immediately if so. |
|
Hold Timing Violations Checker¶
Raises a deferred error if NotImplemented (metric: timing__hold_vio__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import HoldViolations
# or
from librelane.steps import Step
HoldViolations = Step.factory.get("Checker.HoldViolations")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
List[str] |
A list of wildcards matching IPVT corners to use during checking for timing violations. |
|
|
|
List[str]? |
A list of wildcards matching IPVT corners to use during checking for hold violations. |
|
Spice Extraction-based Illegal Overlap Checker¶
Raises a deferred error if Magic Illegal Overlap errors (metric: magic__illegal_overlap__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import IllegalOverlap
# or
from librelane.steps import Step
IllegalOverlap = Step.factory.get("Checker.IllegalOverlap")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for illegal overlaps during Magic extraction. In some cases, these imply existing undetected shorts in the design. It raises an error at the end of the flow if so. |
|
KLayout Antenna Checker¶
Raises a deferred error if KLayout antenna errors (metric: klayout__antenna_error__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import KLayoutAntenna
# or
from librelane.steps import Step
KLayoutAntenna = Step.factory.get("Checker.KLayoutAntenna")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
bool |
Checks for antenna violations after KLayout antenna check is executed and exits the flow if any was found. |
|
KLayout Design Rule Checker¶
Raises a deferred error if KLayout DRC errors (metric: klayout__drc_error__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import KLayoutDRC
# or
from librelane.steps import Step
KLayoutDRC = Step.factory.get("Checker.KLayoutDRC")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for DRC violations after KLayout DRC is executed and exits the flow if any was found. |
|
KLayout Density Checker¶
Raises a deferred error if KLayout density errors (metric: klayout__density_error__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import KLayoutDensity
# or
from librelane.steps import Step
KLayoutDensity = Step.factory.get("Checker.KLayoutDensity")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
bool |
Checks for density violations after KLayout density check is executed and exits the flow if any was found. |
|
Layout vs. Schematic Error Checker¶
Raises a deferred error if LVS errors (metric: design__lvs_error__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import LVS
# or
from librelane.steps import Step
LVS = Step.factory.get("Checker.LVS")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for LVS errors after Netgen is executed. If any exist, it raises an error at the end of the flow. |
|
Lint Errors Checker¶
Raises an immediate error if Lint errors (metric: design__lint_error__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import LintErrors
# or
from librelane.steps import Step
LintErrors = Step.factory.get("Checker.LintErrors")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Quit immediately on any linter errors. |
|
Lint Timing Errors Checker¶
Raises an immediate error if Lint Timing Errors (metric: design__lint_timing_construct__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import LintTimingConstructs
# or
from librelane.steps import Step
LintTimingConstructs = Step.factory.get("Checker.LintTimingConstructs")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Quit immediately on any discovered timing constructs during linting. |
|
Lint Warnings Checker¶
Raises an immediate error if Lint warnings (metric: design__lint_warning__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import LintWarnings
# or
from librelane.steps import Step
LintWarnings = Step.factory.get("Checker.LintWarnings")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Raise an error immediately on any linter warnings. |
|
Magic Design Rule Checker¶
Raises a deferred error if Magic DRC errors (metric: magic__drc_error__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import MagicDRC
# or
from librelane.steps import Step
MagicDRC = Step.factory.get("Checker.MagicDRC")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for DRC violations after magic DRC is executed and exits the flow if any was found. |
|
Maximum Capacitance Violations Checker¶
Raises a deferred error if NotImplemented (metric: design__max_cap_violation__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import MaxCapViolations
# or
from librelane.steps import Step
MaxCapViolations = Step.factory.get("Checker.MaxCapViolations")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
List[str] |
A list of wildcards matching IPVT corners to use during checking for timing violations. |
|
|
|
List[str]? |
A list of wildcards matching IPVT corners to use during checking for max cap violations. |
|
Maximum Slew Violations Checker¶
Raises a deferred error if NotImplemented (metric: design__max_slew_violation__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import MaxSlewViolations
# or
from librelane.steps import Step
MaxSlewViolations = Step.factory.get("Checker.MaxSlewViolations")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
List[str] |
A list of wildcards matching IPVT corners to use during checking for timing violations. |
|
|
|
List[str]? |
A list of wildcards matching IPVT corners to use during checking for max slew violations. |
|
Netlist Assign Statement Checker¶
Raises a StepError if the Netlist has an assign statement in it.
assign statements are known to cause bugs in some PnR tools.
Importing
from librelane.steps.checker import NetlistAssignStatements
# or
from librelane.steps import Step
NetlistAssignStatements = Step.factory.get("Checker.NetlistAssignStatements")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
nl (.nl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
bool |
Whether to emit an error or simply warn about the existence |
|
Power Grid Violation Checker¶
Raises a deferred error if power grid violations (as reported by OpenROAD PSM- you may ignore these if LVS passes) (metric: design__power_grid_violation__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import PowerGridViolations
# or
from librelane.steps import Step
PowerGridViolations = Step.factory.get("Checker.PowerGridViolations")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for unconnected nodes in the power grid. If any exists, an error is raised at the end of the flow. |
|
Setup Timing Violations Checker¶
Raises a deferred error if NotImplemented (metric: timing__setup_vio__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import SetupViolations
# or
from librelane.steps import Step
SetupViolations = Step.factory.get("Checker.SetupViolations")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
List[str] |
A list of wildcards matching IPVT corners to use during checking for timing violations. |
|
|
|
List[str]? |
A list of wildcards matching IPVT corners to use during checking for setup violations. |
|
Routing Design Rule Checker¶
Raises a deferred error if Routing DRC errors (metric: route__drc_errors) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import TrDRC
# or
from librelane.steps import Step
TrDRC = Step.factory.get("Checker.TrDRC")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for DRC violations after routing and exits the flow if any was found. |
|
Wire Length Threshold Checker¶
Raises a deferred error if Threshold-surpassing long wires (metric: route__wirelength__max) are >= the threshold specified in the configuration file.. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import WireLength
# or
from librelane.steps import Step
WireLength = Step.factory.get("Checker.WireLength")
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
Deprecated names
|
bool |
Checks if any wire length exceeds the threshold set in the PDK. If so, an error is raised at the end of the flow. |
|
|
|
|
Decimal? |
A value above which wire lengths generate warnings. |
|
µm |
Magic vs. KLayout XOR Difference Checker¶
Raises a deferred error if XOR differences (metric: design__xor_difference__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import XOR
# or
from librelane.steps import Step
XOR = Step.factory.get("Checker.XOR")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for geometric differences between the Magic and KLayout stream-outs. If any exist, raise an error at the end of the flow. |
|
Yosys Synth Checks¶
Raises an immediate error if Yosys check errors (metric: synthesis__check_error__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import YosysSynthChecks
# or
from librelane.steps import Step
YosysSynthChecks = Step.factory.get("Checker.YosysSynthChecks")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Quits the flow immediately if one or more synthesis check errors are flagged. This checks for combinational loops and/or wires with no drivers. |
|
Unmapped Cells Checker¶
Raises an immediate error if Unmapped Yosys instances (metric: design__instance_unmapped__count) are >= 0. Doesn’t raise an error depending on error_on_var if defined.
Importing
from librelane.steps.checker import YosysUnmappedCells
# or
from librelane.steps import Step
YosysUnmappedCells = Step.factory.get("Checker.YosysUnmappedCells")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
bool |
Checks for unmapped cells after synthesis and quits immediately if so. |
|
KLayout¶
Antenna Check¶
Runs the antenna check on the GDS.
Importing
from librelane.steps.klayout import Antenna
# or
from librelane.steps import Step
Antenna = Step.factory.get("KLayout.Antenna")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
|
Path? |
A path to KLayout antenna runset. |
|
|
|
Dict[str, (bool|int|str)]? |
Options passed directly to the KLayout density runset. They vary from one PDK to another. |
|
Design Rule Check (KLayout)¶
Runs DRC using KLayout.
Unlike most steps, the KLayout scripts vary quite wildly by PDK. If a PDK is not supported by this step, it will simply be skipped.
Currently, only sky130A and sky130B are supported.
Importing
from librelane.steps.klayout import DRC
# or
from librelane.steps import Step
DRC = Step.factory.get("KLayout.DRC")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
Deprecated names
|
Path? |
A path to KLayout DRC runset. |
|
|
|
Dict[str, (bool|int|str)]? |
Options passed directly to the KLayout DRC runset. They vary from one PDK to another. |
|
|
|
int? |
Specifies the number of threads to be used in KLayout DRC.If unset, this will be equal to your machine’s thread count. |
|
Density Check¶
Runs the density check on the GDS.
Importing
from librelane.steps.klayout import Density
# or
from librelane.steps import Step
Density = Step.factory.get("KLayout.Density")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
|
Path? |
A path to KLayout density runset. |
|
|
|
Dict[str, (bool|int|str)]? |
Options passed directly to the KLayout density runset. They vary from one PDK to another. |
|
|
|
int? |
Specifies the number of threads to be used in KLayout density check.If unset, this will be equal to your machine’s thread count. |
|
Filler Generation¶
Generates the filler cells according to the design rules and adds them to the GDS.
Importing
from librelane.steps.klayout import Filler
# or
from librelane.steps import Step
Filler = Step.factory.get("KLayout.Filler")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
GDSII Stream (.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
|
Path? |
A path to KLayout filler script. |
|
|
|
Dict[str, (bool|int|str)]? |
Options passed directly to the KLayout filler script. They vary from one PDK to another. |
|
Open In GUI¶
Opens the DEF view in the KLayout GUI, with layers loaded and mapped
properly. Useful to inspect .klayout.xml database files and the like.
Importing
from librelane.steps.klayout import OpenGUI
# or
from librelane.steps import Step
OpenGUI = Step.factory.get("KLayout.OpenGUI")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
|
bool |
Whether to run the KLayout GUI in editor mode or in viewer mode. |
|
|
Deprecated names
|
bool |
Whether to prioritize GDS (if found) when running this step. |
|
Render Image (w/ KLayout)¶
Renders a PNG of the layout using KLayout.
DEF is required as an input, but if a GDS-II view exists in the input state, it will be used instead.
Importing
from librelane.steps.klayout import Render
# or
from librelane.steps import Step
Render = Step.factory.get("KLayout.Render")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
|
bool |
Render the grid in the image. |
|
|
|
bool |
Enable the ruler in the image. |
|
|
|
‘white’| |
The background color of the image. |
|
|
|
bool |
Enable text in the image. |
|
|
|
int |
The horizontal resolution of the image in pixel. |
|
|
|
int |
The oversampling factor (1..3), or 0 for disabling oversampling. |
|
Seal Ring Generation¶
Adds a seal ring in the correct size to the GDS.
Importing
from librelane.steps.klayout import SealRing
# or
from librelane.steps import Step
SealRing = Step.factory.get("KLayout.SealRing")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
GDSII Stream (.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
|
Path? |
A path to KLayout seal ring script. |
|
GDSII Stream Out (KLayout)¶
Converts DEF views into GDSII streams using KLayout.
The PDK must support KLayout for this step to work, otherwise it will be skipped.
If PRIMARY_GDSII_STREAMOUT_TOOL is set to "klayout", both GDS and KLAYOUT_GDS
will be updated, and if set to another tool, only KLAYOUT_GDS will be
updated.
Importing
from librelane.steps.klayout import StreamOut
# or
from librelane.steps import Step
StreamOut = Step.factory.get("KLayout.StreamOut")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def (.def) |
GDSII Stream (.gds) |
GDSII Stream (KLayout) (.klayout.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
|
‘AddToCell’| |
Specifies the conflict resolution if a cell name conflict arises. |
|
KLayout vs. Magic XOR¶
Performs an XOR operation on the Magic and KLayout GDS views. The idea is: if there’s any difference between the GDSII streams between the two tools, one of them have it wrong and that may lead to ambiguity.
Importing
from librelane.steps.klayout import XOR
# or
from librelane.steps import Step
XOR = Step.factory.get("KLayout.XOR")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
mag_gds (.magic.gds) |
|
klayout_gds (.klayout.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
Path |
A path to the KLayout layer technology (.lyt) file. |
|
|
|
|
Path |
A path to the KLayout layer properties (.lyp) file. |
|
|
|
|
Path |
A path to the KLayout LEF/DEF layer mapping (.map) file. |
|
|
|
|
int? |
Specifies number of threads used in the KLayout XOR check. If unset, this will be equal to your machine’s thread count. |
|
|
|
|
List[str]? |
KLayout layers to ignore during XOR operations. |
|
|
|
|
int? |
The tile size to parallelize the XOR process with. |
|
µm |
Magic¶
Design Rule Checks¶
Performs design rule checking on the GDSII stream using Magic.
This also converts the results to a KLayout database, which can be loaded.
The metrics will be updated with magic__drc_error__count. You can use
the relevant checker to quit if that number is
nonzero.
Importing
from librelane.steps.magic import DRC
# or
from librelane.steps import Step
DRC = Step.factory.get("Magic.DRC")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def? (.def) |
|
gds (.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
bool |
A flag to choose whether labels are read with DEF files or not. From magic docs: “The ‘-labels’ option to the ‘def read’ command causes each net in the NETS and SPECIALNETS sections of the DEF file to be annotated with a label having the net name as the label text.” If LVS fails, try disabling this option. |
|
|
|
bool |
A flag to enable polygon subcells in magic for gds read potentially speeding up magic. From magic docs: “Put non-Manhattan polygons. This prevents interations with other polygons on the same plane and so reduces tile splitting.” |
|
|
|
bool |
A flag to enable merging of connected tiles into polygons during gds write. From magic docs: “Depending on the tile geometry, this may make the output file up to four times smaller, at the cost of speed in generating the output file.” |
|
|
|
bool |
If set to true, blockages in DEF files are ignored. Otherwise, they are read as sheets of metal by Magic. |
|
|
|
bool |
A flag to choose whether to include GDS pointers in the generated mag files or not. |
|
|
Deprecated names
|
Path |
A path to the |
|
|
Deprecated names
|
Path |
A path to a Magic tech file which, mainly, has DRC rules. |
|
|
|
Path |
A path to a PDK-specific setup file sourced by |
|
|
|
List[Path]? |
A list of pre-processed concrete views for cells. Read as a fallback for undefined cells. |
|
|
|
List[Path]? |
A list of pre-processed abstract LEF views for cells. Read as a fallback for undefined cells in scripts where cells are black-boxed. |
|
|
|
bool |
Capture errors print by Magic and quit when a fatal error is encountered. Fatal errors are determined heuristically. It is not guaranteed that they are fatal errors. Hence this is function is gated by a variable. This function is needed because Magic does not throw errors. |
|
|
|
bool |
A flag to choose whether to run the Magic DRC checks on GDS or not. If not, then the checks will be done on the DEF view of the design, which is a bit faster, but may be less accurate as some DEF/LEF elements are abstract. |
|
|
|
List[str]? |
Flatten cells by name pattern on input. May be used to avoid false positive DRC errors. The strings may use standard shell-type glob patterns, with * for any length string match, ? for any single character match, \ for special characters, and [] for matching character sets or ranges. |
|
|
|
List[Path]? |
A list of pre-processed abstract LEF views for cells. They are read in before the design and act as blackboxes during DRC. |
|
Filler Generation¶
Generates the filler cells according to the design rules and adds them to the GDS.
Importing
from librelane.steps.magic import Filler
# or
from librelane.steps import Step
Filler = Step.factory.get("Magic.Filler")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
GDSII Stream (.gds) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
Path to the magic filler script. |
|
|
|
List[str]? |
Options passed directly to the magic filler script. |
|
Open In GUI¶
Opens the DEF view in the Magic GUI.
Importing
from librelane.steps.magic import OpenGUI
# or
from librelane.steps import Step
OpenGUI = Step.factory.get("Magic.OpenGUI")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
bool |
A flag to choose whether labels are read with DEF files or not. From magic docs: “The ‘-labels’ option to the ‘def read’ command causes each net in the NETS and SPECIALNETS sections of the DEF file to be annotated with a label having the net name as the label text.” If LVS fails, try disabling this option. |
|
|
|
bool |
A flag to enable polygon subcells in magic for gds read potentially speeding up magic. From magic docs: “Put non-Manhattan polygons. This prevents interations with other polygons on the same plane and so reduces tile splitting.” |
|
|
|
bool |
A flag to enable merging of connected tiles into polygons during gds write. From magic docs: “Depending on the tile geometry, this may make the output file up to four times smaller, at the cost of speed in generating the output file.” |
|
|
|
bool |
If set to true, blockages in DEF files are ignored. Otherwise, they are read as sheets of metal by Magic. |
|
|
|
bool |
A flag to choose whether to include GDS pointers in the generated mag files or not. |
|
|
Deprecated names
|
Path |
A path to the |
|
|
Deprecated names
|
Path |
A path to a Magic tech file which, mainly, has DRC rules. |
|
|
|
Path |
A path to a PDK-specific setup file sourced by |
|
|
|
List[Path]? |
A list of pre-processed concrete views for cells. Read as a fallback for undefined cells. |
|
|
|
List[Path]? |
A list of pre-processed abstract LEF views for cells. Read as a fallback for undefined cells in scripts where cells are black-boxed. |
|
|
|
bool |
Capture errors print by Magic and quit when a fatal error is encountered. Fatal errors are determined heuristically. It is not guaranteed that they are fatal errors. Hence this is function is gated by a variable. This function is needed because Magic does not throw errors. |
|
|
|
bool |
Whether to prioritize GDS (if found) when running this step. |
|
Full Parasitics Extraction¶
Performs a full parasitics extraction (RCX) using Magic. This step is suitable for performing full analogue post-layout simulation of your design. The SPICE netlist will be flattened, and refer to the raw n-type/p-type transistor models for your PDK.
If you want to do device level simulation without parasitics, this can be done in the Magic.SpiceExtraction step by setting MAGIC_EXT_USE_GDS to True and MAGIC_EXT_ABSTRACT to False.
Importing
from librelane.steps.magic import RCX
# or
from librelane.steps import Step
RCX = Step.factory.get("Magic.RCX")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
Simulation Program with Integrated Circuit Emphasis (with Resistance and Capacitance eXtraction) (.rcx.spice) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
bool |
A flag to choose whether labels are read with DEF files or not. From magic docs: “The ‘-labels’ option to the ‘def read’ command causes each net in the NETS and SPECIALNETS sections of the DEF file to be annotated with a label having the net name as the label text.” If LVS fails, try disabling this option. |
|
|
|
|
bool |
A flag to enable polygon subcells in magic for gds read potentially speeding up magic. From magic docs: “Put non-Manhattan polygons. This prevents interations with other polygons on the same plane and so reduces tile splitting.” |
|
|
|
|
bool |
A flag to enable merging of connected tiles into polygons during gds write. From magic docs: “Depending on the tile geometry, this may make the output file up to four times smaller, at the cost of speed in generating the output file.” |
|
|
|
|
bool |
If set to true, blockages in DEF files are ignored. Otherwise, they are read as sheets of metal by Magic. |
|
|
|
|
bool |
A flag to choose whether to include GDS pointers in the generated mag files or not. |
|
|
|
Deprecated names
|
Path |
A path to the |
|
|
|
Deprecated names
|
Path |
A path to a Magic tech file which, mainly, has DRC rules. |
|
|
|
|
Path |
A path to a PDK-specific setup file sourced by |
|
|
|
|
List[Path]? |
A list of pre-processed concrete views for cells. Read as a fallback for undefined cells. |
|
|
|
|
List[Path]? |
A list of pre-processed abstract LEF views for cells. Read as a fallback for undefined cells in scripts where cells are black-boxed. |
|
|
|
|
bool |
Capture errors print by Magic and quit when a fatal error is encountered. Fatal errors are determined heuristically. It is not guaranteed that they are fatal errors. Hence this is function is gated by a variable. This function is needed because Magic does not throw errors. |
|
|
|
|
float |
Capacitance threshold value. |
|
femtofarads |
|
|
bool |
Whether to extract local capacitance values. |
|
|
|
|
bool |
Whether to perform detailed (i.e. non-lumped) resistance extraction. |
|
|
|
|
str |
Capacitance extraction corner. For open PDKs, the options are generally: ‘ngspice(lrlc)’, low resistance, low capacitance; ‘ngspice(hrlc)’, high resistance, low capacitance; ‘ngspice(lrhc)’, low resistance, high capacitance; ‘ngspice(hrhc)’, high resistance, low capacitance. ‘ngspice(hrhc)’ is typically the slowest corner, and ‘ngspice(lrlc) is typically the fastest corner. Defaults to ‘ngspice()’, which is the default typical extraction corner. |
|
SPICE Model Extraction¶
Extracts a SPICE netlist from the GDSII stream. Used in Layout vs. Schematic checks.
Note that the resultant SPICE netlist is blackboxed, and only suitable for abstract LVS. If you want to perform a full parasitics extraction (RCX), you should use the Magic.RCX step.
Also, the metrics will be updated with magic__illegal_overlap__count. You can use
the relevant checker to quit if that number is
nonzero.
Importing
from librelane.steps.magic import SpiceExtraction
# or
from librelane.steps import Step
SpiceExtraction = Step.factory.get("Magic.SpiceExtraction")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
Simulation Program with Integrated Circuit Emphasis (.spice) |
def (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
bool |
A flag to choose whether labels are read with DEF files or not. From magic docs: “The ‘-labels’ option to the ‘def read’ command causes each net in the NETS and SPECIALNETS sections of the DEF file to be annotated with a label having the net name as the label text.” If LVS fails, try disabling this option. |
|
|
|
bool |
A flag to enable polygon subcells in magic for gds read potentially speeding up magic. From magic docs: “Put non-Manhattan polygons. This prevents interations with other polygons on the same plane and so reduces tile splitting.” |
|
|
|
bool |
A flag to enable merging of connected tiles into polygons during gds write. From magic docs: “Depending on the tile geometry, this may make the output file up to four times smaller, at the cost of speed in generating the output file.” |
|
|
|
bool |
If set to true, blockages in DEF files are ignored. Otherwise, they are read as sheets of metal by Magic. |
|
|
|
bool |
A flag to choose whether to include GDS pointers in the generated mag files or not. |
|
|
Deprecated names
|
Path |
A path to the |
|
|
Deprecated names
|
Path |
A path to a Magic tech file which, mainly, has DRC rules. |
|
|
|
Path |
A path to a PDK-specific setup file sourced by |
|
|
|
List[Path]? |
A list of pre-processed concrete views for cells. Read as a fallback for undefined cells. |
|
|
|
List[Path]? |
A list of pre-processed abstract LEF views for cells. Read as a fallback for undefined cells in scripts where cells are black-boxed. |
|
|
|
bool |
Capture errors print by Magic and quit when a fatal error is encountered. Fatal errors are determined heuristically. It is not guaranteed that they are fatal errors. Hence this is function is gated by a variable. This function is needed because Magic does not throw errors. |
|
|
|
bool |
A flag to choose whether to use GDS for spice extraction or not. If not, then the extraction will be done using the DEF/LEF, which is faster. |
|
|
|
List[str]? |
A list of regular expressions which are matched against the cells of a the design. Matches are abstracted (black-boxed) during SPICE extraction. |
|
|
Deprecated names
|
‘all’| |
Runs |
|
|
|
bool |
Enables adding resistors to shorts- resolves LVS issues if more than one top-level pin is connected to the same net, but may increase runtime and break some designs. Proceed with caution. |
|
|
|
bool |
Extracts a SPICE netlist based on black-boxed standard cells and macros (basically, anything with a LEF) rather than transistors. An error will be thrown if both this and |
|
|
|
int |
If Magic provides more feedback items than this threshold, conversion to KLayout databases is skipped (as something has gone horribly wrong.) |
|
GDSII Stream Out (Magic)¶
Converts DEF views into GDSII streams using Magic.
If PRIMARY_GDSII_STREAMOUT_TOOL is set to "magic", both GDS and MAG_GDS
will be updated, and if set to another tool, only MAG_GDS will be
updated.
Importing
from librelane.steps.magic import StreamOut
# or
from librelane.steps import Step
StreamOut = Step.factory.get("Magic.StreamOut")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def (.def) |
GDSII Stream (.gds) |
GDSII Stream (Magic) (.magic.gds) |
|
Magic VLSI View (.mag) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
bool |
A flag to choose whether labels are read with DEF files or not. From magic docs: “The ‘-labels’ option to the ‘def read’ command causes each net in the NETS and SPECIALNETS sections of the DEF file to be annotated with a label having the net name as the label text.” If LVS fails, try disabling this option. |
|
|
|
|
bool |
A flag to enable polygon subcells in magic for gds read potentially speeding up magic. From magic docs: “Put non-Manhattan polygons. This prevents interations with other polygons on the same plane and so reduces tile splitting.” |
|
|
|
|
bool |
A flag to enable merging of connected tiles into polygons during gds write. From magic docs: “Depending on the tile geometry, this may make the output file up to four times smaller, at the cost of speed in generating the output file.” |
|
|
|
|
bool |
If set to true, blockages in DEF files are ignored. Otherwise, they are read as sheets of metal by Magic. |
|
|
|
|
bool |
A flag to choose whether to include GDS pointers in the generated mag files or not. |
|
|
|
Deprecated names
|
Path |
A path to the |
|
|
|
Deprecated names
|
Path |
A path to a Magic tech file which, mainly, has DRC rules. |
|
|
|
|
Path |
A path to a PDK-specific setup file sourced by |
|
|
|
|
List[Path]? |
A list of pre-processed concrete views for cells. Read as a fallback for undefined cells. |
|
|
|
|
List[Path]? |
A list of pre-processed abstract LEF views for cells. Read as a fallback for undefined cells in scripts where cells are black-boxed. |
|
|
|
|
bool |
Capture errors print by Magic and quit when a fatal error is encountered. Fatal errors are determined heuristically. It is not guaranteed that they are fatal errors. Hence this is function is gated by a variable. This function is needed because Magic does not throw errors. |
|
|
|
|
Tuple[Decimal, Decimal, Decimal, Decimal]? |
Specific die area to be used in floorplanning when |
|
µm |
|
|
bool |
A flag to move the layout such that it’s origin in the lef generated by magic is 0,0. |
|
|
|
Deprecated names
|
bool |
A flag to disable writing Caltech Intermediate Format (CIF) hierarchy and subcell array information to the GDSII file. |
|
|
|
|
‘PDK’| |
If set to PDK, magic will use the PDK definition of the STD cells for macros inside the design. Otherwise, the macro is completely treated as a blackbox and magic will use the existing cell definition inside the macro gds. This mode is only supported for macros specified in MACROS variable |
|
Write LEF (Magic)¶
Writes a LEF view of the design using the GDS using Magic.
Importing
from librelane.steps.magic import WriteLEF
# or
from librelane.steps import Step
WriteLEF = Step.factory.get("Magic.WriteLEF")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
gds (.gds) |
Library Exchange Format (.lef) |
def (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
bool |
A flag to choose whether labels are read with DEF files or not. From magic docs: “The ‘-labels’ option to the ‘def read’ command causes each net in the NETS and SPECIALNETS sections of the DEF file to be annotated with a label having the net name as the label text.” If LVS fails, try disabling this option. |
|
|
|
bool |
A flag to enable polygon subcells in magic for gds read potentially speeding up magic. From magic docs: “Put non-Manhattan polygons. This prevents interations with other polygons on the same plane and so reduces tile splitting.” |
|
|
|
bool |
A flag to enable merging of connected tiles into polygons during gds write. From magic docs: “Depending on the tile geometry, this may make the output file up to four times smaller, at the cost of speed in generating the output file.” |
|
|
|
bool |
If set to true, blockages in DEF files are ignored. Otherwise, they are read as sheets of metal by Magic. |
|
|
|
bool |
A flag to choose whether to include GDS pointers in the generated mag files or not. |
|
|
Deprecated names
|
Path |
A path to the |
|
|
Deprecated names
|
Path |
A path to a Magic tech file which, mainly, has DRC rules. |
|
|
|
Path |
A path to a PDK-specific setup file sourced by |
|
|
|
List[Path]? |
A list of pre-processed concrete views for cells. Read as a fallback for undefined cells. |
|
|
|
List[Path]? |
A list of pre-processed abstract LEF views for cells. Read as a fallback for undefined cells in scripts where cells are black-boxed. |
|
|
|
bool |
Capture errors print by Magic and quit when a fatal error is encountered. Fatal errors are determined heuristically. It is not guaranteed that they are fatal errors. Hence this is function is gated by a variable. This function is needed because Magic does not throw errors. |
|
|
|
bool |
A flag to choose whether to use GDS for LEF writing. If not, then the extraction will be done using abstract LEF views. |
|
|
|
bool |
A flag to specify whether or not the output LEF should include all shapes inside the macro or an abstracted view of the macro LEF view via magic. |
|
|
|
bool |
If true, the LEF write will mark only areas that are port labels as pins, while marking the rest of each related net as an obstruction. Otherwise, the labeled port and the any connected metal on the same layer are marked as a pin. |
|
Netgen¶
Netgen LVS¶
Performs Layout vs. Schematic checks on the extracted SPICE netlist versus. a Verilog netlist with power connections.
This verifies the following: * There are no unexpected shorts in the final layout. * There are no unexpected opens in the final layout. * All signals are connected correctly.
Importing
from librelane.steps.netgen import LVS
# or
from librelane.steps import Step
LVS = Step.factory.get("Netgen.LVS")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
spice (.spice) |
|
pnl (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
bool |
A flag to choose whether to use GDS for spice extraction or not. If not, then the extraction will be done using the DEF/LEF, which is faster. |
|
|
Deprecated names
|
Path |
A path to the setup file for Netgen used to configure LVS. If set to None, this PDK will not support Netgen-based steps. |
|
|
|
bool |
A flag that enables including the gate-level netlist of macros while running Netgen |
|
|
|
List[str]? |
A list of cell names to be flattened while running LVS |
|
|
|
List[str]? |
A list of cell names to be ignored while running LVS |
|
Odb¶
Add PDN obstructions¶
Adds obstructions on metal layers which prevent shapes from being created in the designated areas.
A soft-duplicate of <#Odb.AddRoutingObstructions>`_ , though this one uses a different variable name so the obstructions can be restricted for PDN steps only.
Importing
from librelane.steps.odb import AddPDNObstructions
# or
from librelane.steps import Step
AddPDNObstructions = Step.factory.get("Odb.AddPDNObstructions")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[Tuple[str, Decimal, Decimal, Decimal, Decimal]]? |
Add routing obstructions to the design before PDN stage. If set to |
|
µm |
Add Obstructions¶
Adds obstructions on metal layers which prevent shapes from being created in the designated areas.
Importing
from librelane.steps.odb import AddRoutingObstructions
# or
from librelane.steps import Step
AddRoutingObstructions = Step.factory.get("Odb.AddRoutingObstructions")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
Deprecated names
|
List[Tuple[str, Decimal, Decimal, Decimal, Decimal]]? |
Add routing obstructions to the design. If set to |
|
µm |
Apply DEF Template¶
Copies the floorplan of a “template” DEF file for a new design, i.e., it will copy the die area, core area, and non-power pin names and locations.
Importing
from librelane.steps.odb import ApplyDEFTemplate
# or
from librelane.steps import Step
ApplyDEFTemplate = Step.factory.get("Odb.ApplyDEFTemplate")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
Points to the DEF file to be used as a template. |
|
|
|
‘strict’| |
Whether to require that the pin set of the DEF template and the design should be identical. In permissive mode, pins that are in the design and not in the template will be excluded, and vice versa. |
|
|
|
bool |
Whether to always copy all power pins from the DEF template to the design. |
|
Generate Cell Frequency Tables¶
Creates a number of tables to show the cell frequencies by:
Cells
Buffer cells only
Cell Function*
Standard Cell Library*
These tables only return meaningful info with PDKs distributed in the Open_PDKs format, i.e., all cells are named
{scl}__{cell_fn}_{size}.
Importing
from librelane.steps.odb import CellFrequencyTables
# or
from librelane.steps import Step
CellFrequencyTables = Step.factory.get("Odb.CellFrequencyTables")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Check Antenna Properties of Pins in The Generated Design LEF view¶
Prints warnings if the LEF view of the design is missing antenna information.
Importing
from librelane.steps.odb import CheckDesignAntennaProperties
# or
from librelane.steps import Step
CheckDesignAntennaProperties = Step.factory.get("Odb.CheckDesignAntennaProperties")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
|
lef (.lef) |
Check Antenna Properties of Macros Pins in Their LEF Views¶
Prints warnings if the LEF views of macros are missing antenna information.
Importing
from librelane.steps.odb import CheckMacroAntennaProperties
# or
from librelane.steps import Step
CheckMacroAntennaProperties = Step.factory.get("Odb.CheckMacroAntennaProperties")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Custom I/O Pin Placement Script¶
Places I/O pins using a custom script, which uses a “pin order configuration” file.
Check the reference documentation for the structure of said file.
Importing
from librelane.steps.odb import CustomIOPlacement
# or
from librelane.steps import Step
CustomIOPlacement = Step.factory.get("Odb.CustomIOPlacement")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
Deprecated names
|
str |
The metal layer on which to place horizontally-aligned (long side parallel with the horizon) pins alongside the east and west edges of the die. |
|
|
|
Deprecated names
|
str |
The metal layer on which to place vertically-aligned (long side perpendicular to the horizon) pins alongside the north and south edges of the die. |
|
|
|
Deprecated names
|
Decimal |
Extends the vertical io pins outside of the die by the specified units. |
|
µm |
|
Deprecated names
|
Decimal |
Extends the horizontal io pins outside of the die by the specified units. |
|
µm |
|
Deprecated names
|
Decimal |
A multiplier for vertical pin thickness. Base thickness is the pins layer min width. |
|
|
|
Deprecated names
|
Decimal |
A multiplier for horizontal pin thickness. Base thickness is the pins layer min width. |
|
|
|
Deprecated names
|
Decimal? |
|
|
µm |
|
Deprecated names
|
Decimal? |
|
|
µm |
|
Deprecated names
|
Path? |
Path to a custom pin configuration file. |
|
|
|
Deprecated names
|
‘none’| |
Controls whether to emit an error in: no situation, when pins exist in the design that do not exist in the config file, when pins exist in the config file that do not exist in the design, and both respectively. |
|
Diodes on Ports Protection Routine¶
Unconditionally inserts diodes on design ports diodes on ports, to mitigate the antenna effect.
Useful for hardening macros, where ports may get long wires that are unaccounted for when hardening a top-level chip.
The placement is legalized by performing detailed placement and global routing after inserting the diodes.
Prior to beta 16, this step did not legalize its placement: if you would
like to retain the old behavior without legalization, try
Odb.PortDiodePlacement.
Importing
from librelane.steps.odb import DiodesOnPorts
# or
from librelane.steps import Step
DiodesOnPorts = Step.factory.get("Odb.DiodesOnPorts")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Design Constraints (.sdc) |
Design Exchange Format (.def) |
|
Powered Verilog Netlist (.pnl.v) |
|
OpenDB Database (.odb) |
|
Verilog Netlist (.nl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
‘none’| |
Always insert diodes on ports with the specified polarities. |
|
|
|
|
int |
Cell padding value (in sites) for global placement. Used by this step only to emit a warning if it’s 0. |
|
sites |
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
Fuzzy Diode Placement¶
Runs a custom diode placement script to mitigate the antenna effect.
This script uses the Manhattan length of a (non-existent) wire at the global placement stage, and places diodes if they exceed a certain threshold. This, however, requires some padding: GPL_CELL_PADDING and DPL_CELL_PADDING must be higher than 0 for this script to work reliably.
The placement is not legalized.
The original script was written by Sylvain “tnt” Munaut.
Importing
from librelane.steps.odb import FuzzyDiodePlacement
# or
from librelane.steps import Step
FuzzyDiodePlacement = Step.factory.get("Odb.FuzzyDiodePlacement")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
Decimal? |
A Manhattan distance above which a diode is recommended to be inserted by the heuristic inserter. If not specified, the heuristic algorithm. |
|
µm |
|
|
int |
Cell padding value (in sites) for global placement. Used by this step only to emit a warning if it’s 0. |
|
sites |
Heuristic Diode Insertion Routine¶
Runs a custom diode insertion routine to mitigate the antenna effect.
This script uses the Manhattan length of a (non-existent) wire at the global placement stage, and places diodes if they exceed a certain threshold. This, however, requires some padding: GPL_CELL_PADDING and DPL_CELL_PADDING must be higher than 0 for this script to work reliably.
The placement is then legalized by performing detailed placement and global routing after inserting the diodes.
The original script was written by Sylvain “tnt” Munaut.
Prior to beta 16, this step did not legalize its placement: if you would
like to retain the old behavior without legalization, try
Odb.FuzzyDiodePlacement.
Importing
from librelane.steps.odb import HeuristicDiodeInsertion
# or
from librelane.steps import Step
HeuristicDiodeInsertion = Step.factory.get("Odb.HeuristicDiodeInsertion")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Design Constraints (.sdc) |
Design Exchange Format (.def) |
|
Powered Verilog Netlist (.pnl.v) |
|
OpenDB Database (.odb) |
|
Verilog Netlist (.nl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
Decimal? |
A Manhattan distance above which a diode is recommended to be inserted by the heuristic inserter. If not specified, the heuristic algorithm. |
|
µm |
|
|
int |
Cell padding value (in sites) for global placement. Used by this step only to emit a warning if it’s 0. |
|
sites |
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
Insert ECO Buffers¶
Experimental step to insert ECO buffers on either drivers or sinks after global or detailed routing. The placement is legalized and global routing is incrementally re-run for affected nets. Useful for manually fixing some hold violations.
If run after detailed routing, detailed routing must be re-run as affected nets that are altered are removed and require re-routing.
INOUT and FEEDTHRU ports are not supported.
Importing
from librelane.steps.odb import InsertECOBuffers
# or
from librelane.steps import Step
InsertECOBuffers = Step.factory.get("Odb.InsertECOBuffers")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
List[ |
List of buffers to insert |
|
Insert ECO Diodes¶
Experimental step to create and attach ECO diodes to the nets of sinks after global or detailed routing. The placement is legalized and global routing is incrementally re-run for affected nets. Useful for manually fixing some antenna violations.
If run after detailed routing, detailed routing must be re-run as affected nets that are altered are removed and require re-routing.
Importing
from librelane.steps.odb import InsertECODiodes
# or
from librelane.steps import Step
InsertECODiodes = Step.factory.get("Odb.InsertECODiodes")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
|
List[ |
List of sinks to insert diodes for. |
|
Manual Global Placement¶
This is an step to override the placement of one or more instances at user-specified locations.
Alternatively, if this is a custom design with a few cells, this can be used in place of the global placement entirely.
Importing
from librelane.steps.odb import ManualGlobalPlacement
# or
from librelane.steps import Step
ManualGlobalPlacement = Step.factory.get("Odb.ManualGlobalPlacement")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Dict[str, |
A dictionary of instances to their global (non-legalized and unfixed) placement location. |
|
Manual Macro Placement¶
Performs macro placement using a simple configuration file. The file is
defined as a line-break delimited list of instances and positions, in the
format instance_name X_pos Y_pos Orientation.
If no macro instances are configured, this step is skipped.
Importing
from librelane.steps.odb import ManualMacroPlacement
# or
from librelane.steps import Step
ManualMacroPlacement = Step.factory.get("Odb.ManualMacroPlacement")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
Path to an optional override for instance placement instead of the |
|
Port Diode Placement Script¶
Unconditionally inserts diodes on design ports diodes on ports, to mitigate the antenna effect.
Useful for hardening macros, where ports may get long wires that are unaccounted for when hardening a top-level chip.
The placement is not legalized.
Importing
from librelane.steps.odb import PortDiodePlacement
# or
from librelane.steps import Step
PortDiodePlacement = Step.factory.get("Odb.PortDiodePlacement")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
‘none’| |
Always insert diodes on ports with the specified polarities. |
|
|
|
|
int |
Cell padding value (in sites) for global placement. Used by this step only to emit a warning if it’s 0. |
|
sites |
Remove PDN obstructions¶
Removes any PDN obstructions previously placed by <#Odb.RemovePDNObstructions>`_.
Importing
from librelane.steps.odb import RemovePDNObstructions
# or
from librelane.steps import Step
RemovePDNObstructions = Step.factory.get("Odb.RemovePDNObstructions")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[Tuple[str, Decimal, Decimal, Decimal, Decimal]]? |
Add routing obstructions to the design before PDN stage. If set to |
|
µm |
Remove Obstructions¶
Removes any routing obstructions previously placed by <#Odb.AddRoutingObstructions>`_.
Importing
from librelane.steps.odb import RemoveRoutingObstructions
# or
from librelane.steps import Step
RemoveRoutingObstructions = Step.factory.get("Odb.RemoveRoutingObstructions")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
Deprecated names
|
List[Tuple[str, Decimal, Decimal, Decimal, Decimal]]? |
Add routing obstructions to the design. If set to |
|
µm |
Report Disconnected Pins¶
Creates a table of disconnected pins in the design, updating metrics as appropriate.
Disconnected pins may be marked “critical” if they are very likely to result in a dead design. We determine if a pin is critical as follows:
For the top-level macro: for these four kinds of pins: inputs, outputs, power inouts, and ground inouts, at least one of each kind must be connected or else all pins of a certain kind are counted as critical disconnected pins.
- For instances:
Any unconnected input is a critical disconnected pin.
If there isn’t at least one output connected, all disconnected outputs are critical disconnected pins.
Any disconnected power inout pins are critical disconnected pins.
The metrics design__disconnected_pin__count and
design__critical_disconnected_pin__count is updated. It is recommended
to use the checker Checker.DisconnectedPins to check that there are
no critical disconnected pins.
Importing
from librelane.steps.odb import ReportDisconnectedPins
# or
from librelane.steps import Step
ReportDisconnectedPins = Step.factory.get("Odb.ReportDisconnectedPins")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
Modules (or cells) to ignore when checking for disconnected pins. |
|
Report Wire Length¶
Outputs a CSV of long wires, printed by length. Useful as a design aid to detect when one wire is connected to too many things.
Importing
from librelane.steps.odb import ReportWireLength
# or
from librelane.steps import Step
ReportWireLength = Step.factory.get("Odb.ReportWireLength")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Set Power Connections¶
Uses JSON netlist and module information in Odb to add global power connections for macros at the top level of a design.
If the JSON netlist is hierarchical (e.g. by using a keep hierarchy attribute) this Step emits a warning and does not attempt to connect any macros instantiated within submodules.
Importing
from librelane.steps.odb import SetPowerConnections
# or
from librelane.steps import Step
SetPowerConnections = Step.factory.get("Odb.SetPowerConnections")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
json_h (.h.json) |
OpenDB Database (.odb) |
odb (.odb) |
Design Exchange Format (.def) |
Write Verilog Header¶
Writes a Verilog header of the module using information from the generated
PDN, guarded by the value of VERILOG_POWER_DEFINE, and the JSON header.
Importing
from librelane.steps.odb import WriteVerilogHeader
# or
from librelane.steps import Step
WriteVerilogHeader = Step.factory.get("Odb.WriteVerilogHeader")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Verilog Header (.vh) |
json_h (.h.json) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
Deprecated names
|
str? |
Specifies the name of the define used to guard power and ground connections in the output Verilog header. |
|
OpenROAD¶
Clock Tree Synthesis¶
Creates a Clock tree for an ODB file with detailed-placed cells, using reasonably accurate resistance and capacitance estimations. Detailed Placement is then re-performed to accommodate the new cells.
Importing
from librelane.steps.openroad import CTS
# or
from librelane.steps import Step
CTS = Step.factory.get("OpenROAD.CTS")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
|
bool? |
Attempts to keep a similar number of levels in the clock tree across non-register cells (e.g., clock-gate or inverter). |
|
|
|
|
Decimal? |
Controls automatic buffer selection. To favor strong(weak) drive strength buffers use a small(large) value.The value of 100 means no derating of max cap limit |
|
|
|
|
Decimal? |
This option balances latencies between macro cells and registers by inserting delay buffersThe value of 100 means all needed delay buffers are inserted |
|
|
|
|
bool? |
Enables obstruction-aware buffering such that clock buffers are not placed on top of blockages or hard macros. This option may reduce legalizer displacement, leading to better latency, skew or timing QoR. |
|
|
|
|
bool |
Enables pre-clustering of sinks to create one level of sub-tree before building the H-tree. Each cluster is driven by a buffer which becomes the end point of the H-tree structure. |
|
|
|
|
int? |
Specifies the maximum number of sinks per cluster. |
|
|
|
|
Decimal? |
Specifies the maximum diameter of the sink cluster. |
|
µm |
|
|
int? |
Specifies the maximum number of sinks per cluster for the macro tree. |
|
|
|
|
Decimal? |
Specifies the maximum diameter of the sink cluster for the macro tree. |
|
µm |
|
|
Decimal |
Specifies the maximum wire length on the clock net. |
|
µm |
|
|
bool |
Specifies whether or not to disable post cts processing for outlier sinks. |
|
|
|
|
Decimal |
Specifies the distance between buffers when creating the clock tree. |
|
µm |
|
|
List[str]? |
Clock tree synthesis step-specific override for PNR_CORNERS. |
|
|
|
|
str |
Defines the cell inserted at the root of the clock tree. Used in CTS. |
|
|
|
Deprecated names
|
List[str] |
Defines the list of clock buffer names or buffer name wildcards to be used in CTS. |
|
|
|
|
Decimal? |
Overrides the maximum capacitance CTS characterization will test. If omitted, the capacitance is extracted from the lib information of the buffers in CTS_CLK_BUFFERS. |
|
pF |
|
|
Decimal? |
Overrides the maximum transition time CTS characterization will test. If omitted, the slew is extracted from the lib information of the buffers in CTS_CLK_BUFFERS. |
|
ns |
|
|
‘none’| |
Applies 2X spacing non-default rule to clock nets except leaf-level nets following some strategy. There are four strategy options: ‘none’, ‘root_only’, ‘half’, ‘full’. |
|
Check Antennas¶
Runs OpenROAD to check if one or more long nets may constitute an antenna risk.
The metric route__antenna_violation__count will be updated with the number of violating nets.
Importing
from librelane.steps.openroad import CheckAntennas
# or
from librelane.steps import Step
CheckAntennas = Step.factory.get("OpenROAD.CheckAntennas")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Check Macro Instances¶
Checks if all macro instances declared in the configuration are, in fact, in the design, emitting an error otherwise.
Nested macros (macros within macros) are supported provided netlist views are available for the macro.
Importing
from librelane.steps.openroad import CheckMacroInstances
# or
from librelane.steps import Step
CheckMacroInstances = Step.factory.get("OpenROAD.CheckMacroInstances")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
nl (.nl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Check SDC Files¶
Checks that the two variables used for SDC files by OpenROAD steps,
namely, PNR_SDC_FILE and SIGNOFF_SDC_FILE, are explicitly set to
valid paths by the users, and emits a warning that the fallback will be
utilized otherwise.
Importing
from librelane.steps.openroad import CheckSDCFiles
# or
from librelane.steps import Step
CheckSDCFiles = Step.factory.get("OpenROAD.CheckSDCFiles")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Specifies the SDC file for STA during signoff |
|
Cut Rows¶
Cut floorplan rows with respect to placed macros.
Importing
from librelane.steps.openroad import CutRows
# or
from librelane.steps import Step
CutRows = Step.factory.get("OpenROAD.CutRows")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
Deprecated names
|
Decimal |
Specify the horizontal halo size around macros. |
|
µm |
|
Deprecated names
|
Decimal |
Specify the vertical halo size around macros. |
|
µm |
|
|
Decimal? |
If specified, all rows smaller in width than this value will be removed. This helps avoid “islets” of cells that are hard to route and connect to PDNs. |
|
µm |
DEF to OpenDB¶
Converts a DEF view to an ODB view.
Useful if you have a custom step that manipulates the layout outside of OpenROAD, but you would like to update the OpenROAD database.
Importing
from librelane.steps.openroad import DEFtoODB
# or
from librelane.steps import Step
DEFtoODB = Step.factory.get("OpenROAD.DEFtoODB")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def (.def) |
OpenDB Database (.odb) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Detailed Placement¶
Performs “detailed placement” on an ODB file with global placement. This results in a concrete and legal placement of all cells.
Importing
from librelane.steps.openroad import DetailedPlacement
# or
from librelane.steps import Step
DetailedPlacement = Step.factory.get("OpenROAD.DetailedPlacement")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
Detailed Routing¶
The latter phase of routing. This transforms the abstract nets from global routing into wires on the metal layers that respect all design rules, avoids creating accidental shorts, and ensures all wires are connected.
This is by far the longest part of a typical flow, taking hours, days or weeks on larger designs.
After this point, all cells connected to a net can no longer be moved or removed without a custom-written step of some kind that will also rip up wires.
Importing
from librelane.steps.openroad import DetailedRouting
# or
from librelane.steps import Step
DetailedRouting = Step.factory.get("OpenROAD.DetailedRouting")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
Deprecated names
|
int? |
Specifies the number of threads to be used in OpenROAD Detailed Routing. If unset, this will be equal to your machine’s thread count. |
|
|
|
|
int |
Specifies the maximum number of optimization iterations during Detailed Routing in TritonRoute. |
|
|
|
|
bool |
Experimental: saves an odb snapshot of the layout each routing iteration. This increases disk usage considerably but is useful for debugging. |
|
|
|
|
int |
The maximum number of iterations to run antenna repair. Set to a positive integer to attempt to repair antennas and then re-run DRT as appropriate. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with DRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with DRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
int? |
Write a DRC report every N iterations. If DRT_SAVE_SNAPSHOTS is enabled, there is an implicit default value of 1. |
|
|
|
|
dict[str, |
Specify non-default rules. Can be used to change the width, spacing and vias of a net. |
|
|
|
|
dict[str, str]? |
Specify which nets should be assigned to which non-default rule. The net name is a regular expression. Use ‘^name$’ to match an exact name. |
|
Dump RC Values¶
Creates three reports:
Initial Database Layer RC Values (from Tech LEF)
Modified Database Layer RC Values
Modified Resizer Layer RC Values
Importing
from librelane.steps.openroad import DumpRCValues
# or
from librelane.steps import Step
DumpRCValues = Step.factory.get("OpenROAD.DumpRCValues")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def (.def) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Fill Insertion¶
Fills gaps in the floorplan with filler and decap cells.
This is run after detailed placement. After this point, the design is basically completely hardened.
Importing
from librelane.steps.openroad import FillInsertion
# or
from librelane.steps import Step
FillInsertion = Step.factory.get("OpenROAD.FillInsertion")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Floorplan Initialization¶
Creates DEF and ODB files with the initial floorplan based on the Yosys netlist.
Importing
from librelane.steps.openroad import Floorplan
# or
from librelane.steps import Step
Floorplan = Step.factory.get("OpenROAD.Floorplan")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
nl (.nl.v) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
List[str]? |
Flip these sites vertically. Useful in niche alignment scenarios where single-height cells have ground at the south side and double-height cells have power at the south side, causing a short. In that situation, flipping the sites for single-height cells resolves the issue. |
|
|
|
Deprecated names
|
Path |
A path to the a classic OpenROAD |
|
|
|
|
‘absolute’| |
Sizing mode for floorplanning |
|
|
|
|
Decimal |
The core’s aspect ratio (height / width). |
|
|
|
|
Decimal |
The core utilization percentage. |
|
|
|
|
List[Tuple[Decimal, Decimal, Decimal, Decimal]]? |
Obstructions applied at floorplanning stage. Placement sites are never generated at these locations, which guarantees that it will remain empty throughout the entire flow. |
|
µm |
|
|
List[Tuple[Decimal, Decimal, Decimal, Decimal]]? |
Soft placement blockages applied at the floorplanning stage. Areas that are soft-blocked will not be used by the initial placer, however, later phases such as buffer insertion or clock tree synthesis are still allowed to place cells in this area. |
|
µm |
|
|
Tuple[Decimal, Decimal, Decimal, Decimal]? |
Specifies a core area (i.e. die area minus margins) to be used in floorplanning. It must be paired with |
|
µm |
|
|
Decimal |
The core margin, in multiples of site heights, from the bottom boundary. If |
|
|
|
|
Decimal |
The core margin, in multiples of site heights, from the top boundary. If |
|
|
|
|
Decimal |
The core margin, in multiples of site widths, from the left boundary. If |
|
|
|
|
Decimal |
The core margin, in multiples of site widths, from the right boundary. If |
|
|
|
|
List[str]? |
Explicitly specify sites other than |
|
Power Distribution Network Generation¶
Creates a power distribution network on a floorplanned ODB file.
Importing
from librelane.steps.openroad import GeneratePDN
# or
from librelane.steps import Step
GeneratePDN = Step.factory.get("OpenROAD.GeneratePDN")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
Deprecated names
|
bool |
Enables |
|
|
|
Deprecated names
|
bool |
Enables adding a core ring around the design. More details on the control variables in the PDK config documentation. |
|
|
|
Deprecated names
|
bool |
Enables the creation of rails in the power grid. |
|
|
|
Deprecated names
|
Decimal |
Sets the horizontal halo around the macros during power grid insertion. |
|
µm |
|
Deprecated names
|
Decimal |
Sets the vertical halo around the macros during power grid insertion. |
|
µm |
|
Deprecated names
|
bool |
Controls the layers used in the power grid. If set to false, only the lower layer will be used, which is useful when hardening a macro for integrating into a larger top-level design. |
|
|
|
Deprecated names
|
Decimal |
The offset for the power distribution network rails for first metal layer. |
|
µm |
|
Deprecated names
|
Decimal |
The strap width for the vertical layer in generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
The strap width for the horizontal layer in generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
Intra-spacing (within a set) of vertical straps in generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
Intra-spacing (within a set) of horizontal straps in generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
Inter-distance (between sets) of vertical power straps in generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
Inter-distance (between sets) of horizontal power straps in generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
Initial offset for sets of vertical power straps. |
|
µm |
|
Deprecated names
|
Decimal |
Initial offset for sets of horizontal power straps. |
|
µm |
|
Deprecated names
|
Decimal |
The width for the vertical layer in the core ring of generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
The width for the horizontal layer in the core ring of generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
The spacing for the vertical layer in the core ring of generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
The spacing for the horizontal layer in the core ring of generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
The offset for the vertical layer in the core ring of generated power distribution networks. |
|
µm |
|
Deprecated names
|
Decimal |
The offset for the horizontal layer in the core ring of generated power distribution networks. |
|
µm |
|
|
bool |
If specified, the core side of the pad pins will be connected to the ring. |
|
|
|
|
bool |
If specified, the ring shapes are allowed to be outside the die boundary. |
|
|
|
Deprecated names
|
str |
Defines the metal layer used for PDN rails. |
|
|
|
Deprecated names
|
Decimal |
Defines the width of PDN rails on the |
|
µm |
|
Deprecated names
|
str |
Defines the horizontal PDN layer. |
|
|
|
Deprecated names
|
str |
Defines the vertical PDN layer. |
|
|
|
|
str? |
Defines the horizontal PDN layer for the core ring. Falls back to |
|
|
|
|
str? |
Defines the vertical PDN layer for the core ring. Falls back to |
|
|
|
|
‘core_ring’| |
Defines how far the stripes and rings extend. |
|
|
|
|
bool |
If specified, the power straps will be promoted to block pins. |
|
|
|
Deprecated names
|
Path? |
A custom PDN configuration file. If not provided, the default PDN config will be used. |
|
Global Placement¶
Performs a somewhat nebulous initial placement for standard cells in a floorplan. While the placement is not concrete, it is enough to start accounting for issues such as fanout, transition time, et cetera.
Importing
from librelane.steps.openroad import GlobalPlacement
# or
from librelane.steps import Step
GlobalPlacement = Step.factory.get("OpenROAD.GlobalPlacement")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
Deprecated names
|
str |
A single regular expression designating nets or instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
A list of nets and instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
Resizer step-specific override for PNR_CORNERS. |
|
|
|
Deprecated names
|
Decimal? |
The desired placement density of cells. If not specified, the value will be equal to ( |
|
|
|
|
bool |
Specifies whether the placer should run initial placement or not. |
|
|
|
Deprecated names
|
Decimal |
Global placement initial wirelength coefficient. Decreasing the variable will modify the initial placement of the standard cells to reduce the wirelengths |
|
|
|
|
Decimal? |
Sets a lower bound on the µ_k variable in the GPL algorithm. Useful if global placement diverges. See https://openroad.readthedocs.io/en/latest/main/src/gpl/README.html |
|
|
|
|
Decimal? |
Sets a upper bound on the µ_k variable in the GPL algorithm. Useful if global placement diverges.See https://openroad.readthedocs.io/en/latest/main/src/gpl/README.html |
|
|
|
|
Decimal |
The core utilization percentage. |
|
|
|
|
int |
Cell padding value (in sites) for global placement. The number will be integer divided by 2 and placed on both sides. |
|
sites |
|
|
Decimal? |
Only applicable when PL_TIMING_DRIVEN is enabled. When the overflow is below the set value, timing-driven iterations will retain the resizer changes instead of reverting them. Allowed values are 0 to 1. If not set, a nonzero default value from OpenROAD will be used |
|
|
|
Deprecated names
|
bool |
Specifies whether the placer should use timing-driven placement. |
|
|
|
|
bool |
Specifies whether the placer should use routability driven placement. |
|
|
|
|
Decimal? |
Sets overflow threshold for routability mode. |
|
Global Placement Skip IO¶
Performs preliminary global placement as a basis for pin placement.
This is useful for flows where the: * Cells are placed * I/Os are placed to match the cells * Cells are then re-placed for an optimal placement
Importing
from librelane.steps.openroad import GlobalPlacementSkipIO
# or
from librelane.steps import Step
GlobalPlacementSkipIO = Step.factory.get("OpenROAD.GlobalPlacementSkipIO")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
Deprecated names
|
str |
A single regular expression designating nets or instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
A list of nets and instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
Resizer step-specific override for PNR_CORNERS. |
|
|
|
Deprecated names
|
Decimal? |
The desired placement density of cells. If not specified, the value will be equal to ( |
|
|
|
|
bool |
Specifies whether the placer should run initial placement or not. |
|
|
|
Deprecated names
|
Decimal |
Global placement initial wirelength coefficient. Decreasing the variable will modify the initial placement of the standard cells to reduce the wirelengths |
|
|
|
|
Decimal? |
Sets a lower bound on the µ_k variable in the GPL algorithm. Useful if global placement diverges. See https://openroad.readthedocs.io/en/latest/main/src/gpl/README.html |
|
|
|
|
Decimal? |
Sets a upper bound on the µ_k variable in the GPL algorithm. Useful if global placement diverges.See https://openroad.readthedocs.io/en/latest/main/src/gpl/README.html |
|
|
|
|
Decimal |
The core utilization percentage. |
|
|
|
|
int |
Cell padding value (in sites) for global placement. The number will be integer divided by 2 and placed on both sides. |
|
sites |
|
|
Decimal? |
Only applicable when PL_TIMING_DRIVEN is enabled. When the overflow is below the set value, timing-driven iterations will retain the resizer changes instead of reverting them. Allowed values are 0 to 1. If not set, a nonzero default value from OpenROAD will be used |
|
|
|
Deprecated names
|
‘matching’| |
Decides the mode of the random IO placement option. |
|
|
|
Deprecated names
|
Path? |
Path to a custom pin configuration file. |
|
|
|
|
Path? |
Points to the DEF file to be used as a template. |
|
Global Routing¶
The initial phase of routing. Given a detailed-placed ODB file, this phase starts assigning coarse-grained routing “regions” for each net so they may be later connected to wires.
Estimated capacitance and resistance values are much more accurate for global routing.
Importing
from librelane.steps.openroad import GlobalRouting
# or
from librelane.steps import Step
GlobalRouting = Step.factory.get("OpenROAD.GlobalRouting")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
I/O Placement¶
Places I/O pins on a floor-planned ODB file using OpenROAD’s built-in placer.
If IO_PIN_ORDER_CFG is not None, this step is skipped (for
compatibility with OpenLane.)
Importing
from librelane.steps.openroad import IOPlacement
# or
from librelane.steps import Step
IOPlacement = Step.factory.get("OpenROAD.IOPlacement")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
Deprecated names
|
str |
The metal layer on which to place horizontally-aligned (long side parallel with the horizon) pins alongside the east and west edges of the die. |
|
|
|
Deprecated names
|
str |
The metal layer on which to place vertically-aligned (long side perpendicular to the horizon) pins alongside the north and south edges of the die. |
|
|
|
Deprecated names
|
Decimal |
Extends the vertical io pins outside of the die by the specified units. |
|
µm |
|
Deprecated names
|
Decimal |
Extends the horizontal io pins outside of the die by the specified units. |
|
µm |
|
Deprecated names
|
Decimal |
A multiplier for vertical pin thickness. Base thickness is the pins layer min width. |
|
|
|
Deprecated names
|
Decimal |
A multiplier for horizontal pin thickness. Base thickness is the pins layer min width. |
|
|
|
Deprecated names
|
Decimal? |
|
|
µm |
|
Deprecated names
|
Decimal? |
|
|
µm |
|
|
Decimal? |
The distance from each corner within which pin placement should be avoided. |
|
µm |
|
Deprecated names
|
‘matching’| |
Decides the mode of the random IO placement option. |
|
|
|
Deprecated names
|
Decimal? |
The minimum distance between two pins. The unit is microns or routing tracks, depending on whether IO_PIN_MIN_DISTANCE_IN_TRACKS is set. If unspecified by a PDK, OpenROAD will use the length of two routing tracks. |
|
µm or routing tracks |
|
|
bool? |
Setting this variable to true allows IO_PIN_MIN_DISTANCE to be set in number of tracks instead of microns. |
|
|
|
Deprecated names
|
Path? |
Path to a custom pin configuration file. |
|
|
|
|
List[str]? |
List of regions where pins cannot be placed. The regions are strings in the format |
|
µm |
|
|
Path? |
Points to the DEF file to be used as a template. |
|
Generate IR Drop Report¶
Performs static IR-drop analysis on the power distribution network. For power nets, this constitutes a decrease in voltage, and for ground nets, it constitutes an increase in voltage.
Importing
from librelane.steps.openroad import IRDropReport
# or
from librelane.steps import Step
IRDropReport = Step.factory.get("OpenROAD.IRDropReport")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
|
spef (.spef) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
Dict[str, Path]? |
Map of power and ground nets to OpenROAD PSM location files. See this for more info. |
|
Layout Static Timing Analysis¶
Performs Static Timing Analysis using OpenROAD on the ODB layout in its current state.
Importing
from librelane.steps.openroad import LayoutSTA
# or
from librelane.steps import Step
LayoutSTA = Step.factory.get("OpenROAD.LayoutSTA")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Open In GUI¶
Opens the ODB view in the OpenROAD GUI. Useful to inspect some parameters, such as routing density, timing paths, clock tree and whatnot. The LIBs are loaded by default and the SPEFs if available.
Importing
from librelane.steps.openroad import OpenGUI
# or
from librelane.steps import Step
OpenGUI = Step.factory.get("OpenROAD.OpenGUI")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
|
spef? (.spef) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Pad Ring Generation¶
Assembles a pad ring on a floor-planned ODB file using OpenROAD’s built-in pad placer.
Importing
from librelane.steps.openroad import PadRing
# or
from librelane.steps import Step
PadRing = Step.factory.get("OpenROAD.PadRing")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
A custom pad configuration file. If not provided, the default pad config will be used. |
|
|
|
List[str]? |
The pad instance names for the south pad row. |
|
|
|
List[str]? |
The pad instance names for the east pad row. |
|
|
|
List[str]? |
The pad instance names for the north pad row. |
|
|
|
List[str]? |
The pad instance names for the west pad row. |
|
Parasitic Resistance/Capacitance Extraction¶
This extracts parasitic electrical values from a detailed-placed circuit. These can be used to create basically the highest accurate STA possible for a given design.
Importing
from librelane.steps.openroad import RCX
# or
from librelane.steps import Step
RCX = Step.factory.get("OpenROAD.RCX")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
def (.def) |
Standard Parasitics Extraction Format (.spef) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
bool |
If enabled, the via and wire resistances will be merged. |
|
|
|
Path? |
Specifies SDC file to be used for RCX-based STA, which can be different from the one used for implementation. |
|
|
|
Dict[str, Path] |
Map of corner patterns to OpenRCX extraction rules. |
|
|
|
int? |
The maximum number of STA corners to run in parallel. If unset, this will be equal to your machine’s thread count. |
|
Antenna Repair¶
Applies antenna effect mitigations using global-routing information, then re-runs detailed placement and global routing to legalize any inserted diodes.
An antenna check is once again performed, updating the
route__antenna_violation__count metric.
Importing
from librelane.steps.openroad import RepairAntennas
# or
from librelane.steps import Step
RepairAntennas = Step.factory.get("OpenROAD.RepairAntennas")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Design Exchange Format (.def) |
OpenDB Database (.odb) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
Repair Design (Post-Global Placement)¶
This is identical to OpenROAD.RepairDesignPostGPL. It is retained for backwards compatibility.
Importing
from librelane.steps.openroad import RepairDesign
# or
from librelane.steps import Step
RepairDesign = Step.factory.get("OpenROAD.RepairDesign")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
Deprecated names
|
str |
A single regular expression designating nets or instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
A list of nets and instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
Resizer step-specific override for PNR_CORNERS. |
|
|
|
Deprecated names
|
bool |
Specifies whether or not to insert buffers on input ports when design repairs are run. |
|
|
|
Deprecated names
|
bool |
Specifies whether or not to insert buffers on output ports when design repairs are run. |
|
|
|
Deprecated names
|
bool |
Specifies whether or not to repair tie cells fanout when design repairs are run. |
|
|
|
Deprecated names
|
bool |
Allows tie separation when performing design repairs. |
|
|
|
Deprecated names
|
Decimal |
Specifies the maximum wire length cap used by resizer to insert buffers during design repair. If set to 0, no buffers will be inserted. |
|
µm |
|
Deprecated names
|
Decimal |
Specifies a margin for the slews during design repair. |
|
|
|
Deprecated names
|
Decimal |
Specifies a margin for the capacitances during design repair. |
|
|
|
|
bool |
Invokes OpenROAD’s remove_buffers command to remove buffers from synthesis, which gives OpenROAD more flexibility when buffering nets. |
|
Repair Design (Post-Global Placement)¶
Runs a number of design “repairs” on a global-placed ODB file.
Importing
from librelane.steps.openroad import RepairDesignPostGPL
# or
from librelane.steps import Step
RepairDesignPostGPL = Step.factory.get("OpenROAD.RepairDesignPostGPL")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
Deprecated names
|
str |
A single regular expression designating nets or instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
A list of nets and instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
Resizer step-specific override for PNR_CORNERS. |
|
|
|
Deprecated names
|
bool |
Specifies whether or not to insert buffers on input ports when design repairs are run. |
|
|
|
Deprecated names
|
bool |
Specifies whether or not to insert buffers on output ports when design repairs are run. |
|
|
|
Deprecated names
|
bool |
Specifies whether or not to repair tie cells fanout when design repairs are run. |
|
|
|
Deprecated names
|
bool |
Allows tie separation when performing design repairs. |
|
|
|
Deprecated names
|
Decimal |
Specifies the maximum wire length cap used by resizer to insert buffers during design repair. If set to 0, no buffers will be inserted. |
|
µm |
|
Deprecated names
|
Decimal |
Specifies a margin for the slews during design repair. |
|
|
|
Deprecated names
|
Decimal |
Specifies a margin for the capacitances during design repair. |
|
|
|
|
bool |
Invokes OpenROAD’s remove_buffers command to remove buffers from synthesis, which gives OpenROAD more flexibility when buffering nets. |
|
Repair Design (Post-Global Routing)¶
Runs a number of design “repairs” on a global-routed ODB file.
Importing
from librelane.steps.openroad import RepairDesignPostGRT
# or
from librelane.steps import Step
RepairDesignPostGRT = Step.factory.get("OpenROAD.RepairDesignPostGRT")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
Deprecated names
|
str |
A single regular expression designating nets or instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
A list of nets and instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
Resizer step-specific override for PNR_CORNERS. |
|
|
|
|
bool |
Enables running GRT before and after running resizer |
|
|
|
Deprecated names
|
Decimal |
Specifies the maximum wire length cap used by resizer to insert buffers during post-grt design repair. If set to 0, no buffers will be inserted. |
|
µm |
|
Deprecated names
|
Decimal |
Specifies a margin for the slews during post-grt design repair. |
|
|
|
Deprecated names
|
Decimal |
Specifies a margin for the capacitances during design post-grt repair. |
|
Resizer Timing Optimizations (Post-Clock Tree Synthesis)¶
First attempt to meet timing requirements for a cell based on basic timing information after clock tree synthesis.
Standard cells may be resized, and buffer cells may be inserted to ensure that no hold violations exist and no setup violations exist at the current clock.
Importing
from librelane.steps.openroad import ResizerTimingPostCTS
# or
from librelane.steps import Step
ResizerTimingPostCTS = Step.factory.get("OpenROAD.ResizerTimingPostCTS")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
Deprecated names
|
str |
A single regular expression designating nets or instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
A list of nets and instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
Resizer step-specific override for PNR_CORNERS. |
|
|
|
|
Decimal |
Specifies a time margin for the slack when fixing hold violations. Normally the resizer will stop when it reaches zero slack. This option allows you to overfix. |
|
ns |
|
|
Decimal |
Specifies a time margin for the slack when fixing setup violations. |
|
ns |
|
Deprecated names
|
Decimal |
Specifies a max number of buffers to insert to fix hold violations. This number is calculated as a percentage of the number of instances in the design. |
|
|
|
Deprecated names
|
Decimal |
Specifies a max number of buffers to insert to fix setup violations. This number is calculated as a percentage of the number of instances in the design. |
|
|
|
|
bool |
Allows the creation of setup violations when fixing hold violations. Setup violations are less dangerous as they simply mean a chip may not run at its rated speed, however, chips with hold violations are essentially dead-on-arrival. |
|
|
|
Deprecated names
|
bool |
Enables gate cloning when attempting to fix setup violations |
|
|
|
|
bool |
Rebuffering and load splitting during setup fixing. |
|
|
|
|
bool |
Buffer removal transform during setup fixing. |
|
|
|
|
Decimal? |
Percentage of violating endpoints to repair during setup fixing. |
|
|
|
|
Decimal? |
Defines the percentage of core area used during setup fixing. |
|
|
|
|
Decimal? |
Percentage of violating endpoints to repair during hold fixing. |
|
|
|
|
Decimal? |
Defines the percentage of core area used during hold fixing. |
|
|
|
|
bool |
Experimental: attempt to fix hold violations before setup violations, which may lead to better timing results. |
|
Resizer Timing Optimizations (Post-Global Routing)¶
Second attempt to meet timing requirements for a cell based on timing information after estimating resistance and capacitance values based on global routing.
Standard cells may be resized, and buffer cells may be inserted to ensure that no hold violations exist and no setup violations exist at the current clock.
Importing
from librelane.steps.openroad import ResizerTimingPostGRT
# or
from librelane.steps import Step
ResizerTimingPostGRT = Step.factory.get("OpenROAD.ResizerTimingPostGRT")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
str? |
The name of lowest layer to be used in routing the clock net. |
|
|
|
|
str? |
The name of highest layer to be used in routing the clock net. |
|
|
|
|
Decimal |
Reduction in the routing capacity of the edges between the cells in the global routing graph for all layers. Values range from 0 to 1. 1 = most reduction, 0 = least reduction. |
|
|
|
|
int |
Sets the number of GCells added to the blockages boundaries from macros. A GCell is typically defined in terms of Mx routing tracks. The default GCell size is 15 M3 pitches. |
|
|
|
|
List[Decimal] |
Layer-specific reductions in the routing capacity of the edges between the cells in the global routing graph, delimited by commas. Values range from 0 through 1. |
|
|
|
|
int? |
Diode cell padding; increases the width of diode cells during placement checks.. |
|
sites |
|
|
bool |
Allow congestion during global routing |
|
|
|
Deprecated names
|
int |
The maximum number of iterations for global antenna repairs. |
|
|
|
|
int |
The maximum number of iterations waiting for the overflow to reach the desired value. |
|
|
|
Deprecated names
|
int |
The margin to over fix antenna violations. |
|
|
|
|
bool |
Only use jumpers to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_DIODE_ONLY. |
|
|
|
|
bool |
Only use antenna diodes to fix antenna violations. Cannot be used in conjunction with GRT_ANTENNA_REPAIR_JUMPER_ONLY. |
|
|
|
|
bool |
Specifies whether or not to run an optimize_mirroring pass whenever detailed placement happens. This pass will mirror the cells whenever possible to optimize the design. |
|
|
|
|
int |
Specifies how far an instance can be moved along the X-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Specifies how far an instance can be moved along the Y-axis when finding a site where it can be placed during detailed placement. |
|
µm |
|
|
int |
Cell padding value (in sites) for detailed placement. The number will be integer divided by 2 and placed on both sides. Should be <= global placement. |
|
sites |
|
Deprecated names
|
str |
A single regular expression designating nets or instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
A list of nets and instances as “don’t touch” by design repairs or resizer optimizations. |
|
|
|
|
List[str]? |
Resizer step-specific override for PNR_CORNERS. |
|
|
|
Deprecated names
|
Decimal |
Specifies a time margin for the slack when fixing hold violations. Normally the resizer will stop when it reaches zero slack. This option allows you to overfix. |
|
ns |
|
Deprecated names
|
Decimal |
Specifies a time margin for the slack when fixing setup violations. |
|
ns |
|
Deprecated names
|
Decimal |
Specifies a max number of buffers to insert to fix hold violations. This number is calculated as a percentage of the number of instances in the design. |
|
|
|
Deprecated names
|
Decimal |
Specifies a max number of buffers to insert to fix setup violations. This number is calculated as a percentage of the number of instances in the design. |
|
|
|
Deprecated names
|
bool |
Allows setup violations when fixing hold. |
|
|
|
Deprecated names
|
bool |
Enables gate cloning when attempting to fix setup violations |
|
|
|
|
bool |
Gates running global routing after resizer steps. May be useful to disable for designs where global routing takes non-trivial time. |
|
|
|
|
bool |
Rebuffering and load splitting during setup fixing. |
|
|
|
|
bool |
Buffer removal transform during setup fixing. |
|
|
|
|
Decimal? |
Percentage of violating endpoints to repair during setup fixing. |
|
|
|
|
Decimal? |
Defines the percentage of core area used during setup fixing. |
|
|
|
|
Decimal? |
Percentage of violating endpoints to repair during hold fixing. |
|
|
|
|
Decimal? |
Defines the percentage of core area used during hold fixing. |
|
|
|
|
bool |
Experimental: attempt to fix hold violations before setup violations, which may lead to better timing results. |
|
Static Timing Analysis (Mid-PnR)¶
Performs Static Timing Analysis using OpenROAD on an OpenROAD database, mid-PnR, with estimated values for parasitics.
Importing
from librelane.steps.openroad import STAMidPNR
# or
from librelane.steps import Step
STAMidPNR = Step.factory.get("OpenROAD.STAMidPNR")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Static Timing Analysis (Post-PnR)¶
Performs multi-corner Static Timing Analysis using OpenSTA on the post-PnR Verilog netlist, with extracted parasitics for both the top-level module and any associated macros.
During this step, the special variable OPENLANE_SDC_IDEAL_CLOCKS is exposed to SDC files with a value of 0. We encourage PNR SDC files to use propagated clocks at this stage based on this variable’s existence and value.
Importing
from librelane.steps.openroad import STAPostPNR
# or
from librelane.steps import Step
STAPostPNR = Step.factory.get("OpenROAD.STAPostPNR")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
nl (.nl.v) |
Standard Delay Format (.sdf) |
spef (.spef) |
Design Constraints (.sdc) |
odb? (.odb) |
LIB Timing Library Format (.lib) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
bool |
Prioritize the use of Netlists + SPEF files over LIB files if available for Macros. Useful if extraction was done using OpenROAD, where SPEF files are far more accurate. |
|
|
|
int? |
Maximum number of violators to list in violator_list.rpt |
|
|
|
List[(str|Path)]? |
A variable that only exists for backwards compatibility with LibreLane <2.0.0 and should not be used by new designs. |
|
|
|
int? |
The maximum number of STA corners to run in parallel. If unset, this will be equal to your machine’s thread count. |
|
|
|
Path? |
Specifies the SDC file for STA during signoff |
|
Static Timing Analysis (Pre-PnR)¶
Performs hierarchical Static Timing Analysis using OpenSTA on the pre-PnR Verilog netlist, with all available timing information for standard cells and macros for multiple corners.
If timing information is not available for a Macro, the macro in question will be black-boxed.
During this step, the special variable OPENLANE_SDC_IDEAL_CLOCKS is exposed to SDC files with a value of 1. We encourage PNR SDC files to use ideal clocks at this stage based on this variable’s existence and value.
Importing
from librelane.steps.openroad import STAPrePNR
# or
from librelane.steps import Step
STAPrePNR = Step.factory.get("OpenROAD.STAPrePNR")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
nl (.nl.v) |
Standard Delay Format (.sdf) |
Design Constraints (.sdc) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
bool |
Prioritize the use of Netlists + SPEF files over LIB files if available for Macros. Useful if extraction was done using OpenROAD, where SPEF files are far more accurate. |
|
|
|
int? |
Maximum number of violators to list in violator_list.rpt |
|
|
|
List[(str|Path)]? |
A variable that only exists for backwards compatibility with LibreLane <2.0.0 and should not be used by new designs. |
|
|
|
int? |
The maximum number of STA corners to run in parallel. If unset, this will be equal to your machine’s thread count. |
|
Tap/Decap Insertion¶
Places welltap cells across a floorplan, as well as endcap cells at the edges of the floorplan.
Importing
from librelane.steps.openroad import TapEndcapInsertion
# or
from librelane.steps import Step
TapEndcapInsertion = Step.factory.get("OpenROAD.TapEndcapInsertion")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default | Units |
|---|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
|
|
|
Decimal? |
The distance between tap cell columns. Must be specified if WELLTAP_CELL is specified. |
|
µm |
|
Deprecated names
|
Decimal |
Specify the horizontal halo size around macros. |
|
µm |
|
Deprecated names
|
Decimal |
Specify the vertical halo size around macros. |
|
µm |
Unplace All¶
Sets placement status of all instances to NONE.
Useful in flows where a preliminary placement is needed as a pre-requisite to something else but that placement must be discarded.
Importing
from librelane.steps.openroad import UnplaceAll
# or
from librelane.steps import Step
UnplaceAll = Step.factory.get("OpenROAD.UnplaceAll")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
OpenDB Database (.odb) |
Design Exchange Format (.def) |
|
Design Constraints (.sdc) |
|
Verilog Netlist (.nl.v) |
|
Powered Verilog Netlist (.pnl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Write CDL¶
Write CDL view of an ODB design
Importing
from librelane.steps.openroad import WriteCDL
# or
from librelane.steps import Step
WriteCDL = Step.factory.get("OpenROAD.WriteCDL")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
odb (.odb) |
Circuit Design Language (.cdl) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[str]? |
A list of fully-qualified IPVT corners to use during PnR. If unspecified, the value for |
|
|
|
bool |
If set to true, set_rc commands are echoed. Quite noisy, but may be useful for debugging. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance and capacitance values for metal layers. For each IPVT corner, a mapping for each metal layer is provided. Each mapping describes custom resistance and capacitance values. Usage of wildcards for specifying IPVT corners is allowed. Units are resistance and capacitance per unit length as defined in the first lib file. |
|
|
|
Dict[str, Dict[str, Dict[str, Decimal]]]? |
Used during PNR steps, Specific custom resistance values for via layers. For each IPVT corner, a mapping for each via layer is provided. Each mapping describes custom resistance values. Usage of wildcards for specifying IPVT corners is allowed. Via resistance is per cut/via with units asdefined in the first lib file. |
|
|
Deprecated names
|
List[str]? |
Sets estimated signal wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
List[str]? |
Sets estimated clock wire RC values to the average of these layers’. If you provide more than two, the averages are grouped by preferred routing direction and you must provide at least one layer for each routing direction. |
|
|
Deprecated names
|
bool |
Enables the connection of macros to the top level power grid. |
|
|
Deprecated names
|
List[str]? |
Specifies explicit power connections of internal macros to the top level power grid, in the format: regex matching macro instance names, power domain vdd and ground net names, and macro vdd and ground pin names |
|
|
Deprecated names
|
bool |
Enables the creation of global connections in PDN generation. |
|
|
|
Path? |
Specifies the SDC file used during all implementation (PnR) steps |
|
|
|
Path? |
Experimental: specifies a additional configuration .tcl file to be called during (PnR) steps. |
|
|
|
bool |
Cull duplicate IPVT corners during PNR, i.e. corners that share the same set of lib files and values for LAYERS_RC and VIAS_R as another corner are not considered outside of STA. |
|
Verilator¶
Verilator Lint¶
Lints inputs RTL Verilog files.
The linting is done with the defines for power and ground inputs on, as more macros are available with powered netlists than unpowered netlists.
Importing
from librelane.steps.verilator import Lint
# or
from librelane.steps import Step
Lint = Step.factory.get("Verilator.Lint")
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
List[Path] |
The paths of the design’s Verilog files. |
|
|
|
List[Path]? |
Specifies the Verilog |
|
|
Deprecated names
|
str? |
Specifies the name of the define used to guard power and ground connections in the input RTL. |
|
|
|
bool |
Include Verilog models of the PDK |
|
|
Deprecated names
|
bool |
When a file references an include file, resolve the filename relative to the path of the referencing file, instead of relative to the current directory. |
|
|
|
bool |
When a latch is inferred by an |
|
|
|
bool |
When a net has multiple drivers, report this as a linter error. |
|
|
Deprecated names
|
List[str]? |
Preprocessor defines for input Verilog files |
|
|
|
List[str]? |
Linter-specific preprocessor definitions; overrides VERILOG_DEFINES for the lint step if exists |
|
|
|
List[str]? |
Warning codes that are passed to the linter to be disabled. |
|
|
|
List[str]? |
Warning codes that are passed to the linter to be disabled for all blackbox modules. |
|
|
|
Path? |
Path to a Verilator Configuration format file ( |
|
Yosys¶
RTL/Netlist Equivalence Check¶
Experimental: Uses the EQY utility to perform an RTL vs. Netlist equivalence check.
Currently, you are expected to provide your own EQY script if you want this to work properly.
Importing
from librelane.steps.yosys import EQY
# or
from librelane.steps import Step
EQY = Step.factory.get("Yosys.EQY")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
nl (.nl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
A path to a file containing the latch mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the tri-state buffer mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the carry-select adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the ripple-carry adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the full adder mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux4 mapping for Yosys. |
|
|
|
‘ALL’| |
Which log level for Yosys. At WARNING or higher, the initialization splash is also disabled. |
|
|
|
List[Path] |
The paths of the design’s Verilog files. |
|
|
Deprecated names
|
List[str]? |
Preprocessor defines for input Verilog files. |
|
|
Deprecated names
|
str? |
Specifies the name of the define used to guard power and ground connections in the input RTL. |
|
|
|
List[Path]? |
Specifies the Verilog |
|
|
|
List[str]? |
Key-value pairs to be |
|
|
Deprecated names
|
bool |
Use the Slang frontend to process files, which has better SystemVerilog parsing capabilities but is not as battle-tested as the default Yosys friend. |
|
|
|
List[str]? |
Pass arguments to the Slang frontend. |
|
|
|
Path? |
The EQY script to use. If unset, a generic EQY script will be generated, but this fails in a number of scenarios. |
|
|
|
Path? |
This step will warn if this deprecated variable is used, as it indicates Macros are used without the new Macro object. |
|
|
|
bool |
Attempt to run EQY even if the PDK’s Verilog models are supported by this step. Will likely result in a failure. |
|
Generate JSON Header¶
Extracts a high-level hierarchical view of the circuit in JSON format, including power connections. The power connections are used in later steps to ensure macros and cells are connected as desired.
Importing
from librelane.steps.pyosys import JsonHeader
# or
from librelane.steps import Step
JsonHeader = Step.factory.get("Yosys.JsonHeader")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
Design JSON Header File (.h.json) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
A path to a file containing the latch mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the tri-state buffer mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the carry-select adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the ripple-carry adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the full adder mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux4 mapping for Yosys. |
|
|
Deprecated names
|
int? |
If set to a value, a group of flip-flops with size >= SYNTH_CLOCKGATE_MIN_WIDTH and an enable signal are clock-gated instead. |
|
|
|
str? |
The integrated clock gate cell used for positive-edge flip-flops, in the format |
|
|
|
str? |
The integrated clock gate cell used for positive-edge flip-flops, in the format |
|
|
|
‘ALL’| |
Which log level for Yosys. At WARNING or higher, the initialization splash is also disabled. |
|
|
|
str? |
A fully qualified IPVT corner to use during synthesis. If unspecified, the value for |
|
|
|
bool |
Generate a graphviz DOT file for the design. This will fail on a completely empty design. |
|
|
|
List[Path] |
The paths of the design’s Verilog files. |
|
|
Deprecated names
|
List[str]? |
Preprocessor defines for input Verilog files. |
|
|
Deprecated names
|
str? |
Specifies the name of the define used to guard power and ground connections in the input RTL. |
|
|
|
List[Path]? |
Specifies the Verilog |
|
|
|
List[str]? |
Key-value pairs to be |
|
|
Deprecated names
|
bool |
Use the Slang frontend to process files, which has better SystemVerilog parsing capabilities but is not as battle-tested as the default Yosys friend. |
|
|
|
List[str]? |
Pass arguments to the Slang frontend. |
|
Resynthesis¶
Like Synthesis, but operates on the input netlist instead of RTL files.
Useful to process/elaborate on netlists generated by tools other than Yosys.
Some metrics will also be extracted and updated, namely:
design__instance__countdesign__instance_unmapped__countdesign__instance__area
Note that Yosys steps do not currently support gzipped standard cell dotlib files. They are however supported for macros:
https://github.com/YosysHQ/yosys/issues/4830
Importing
from librelane.steps.pyosys import Resynthesis
# or
from librelane.steps import Step
Resynthesis = Step.factory.get("Yosys.Resynthesis")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
nl (.nl.v) |
Verilog Netlist (.nl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
A path to a file containing the latch mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the tri-state buffer mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the carry-select adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the ripple-carry adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the full adder mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux4 mapping for Yosys. |
|
|
Deprecated names
|
int? |
If set to a value, a group of flip-flops with size >= SYNTH_CLOCKGATE_MIN_WIDTH and an enable signal are clock-gated instead. |
|
|
|
str? |
The integrated clock gate cell used for positive-edge flip-flops, in the format |
|
|
|
str? |
The integrated clock gate cell used for positive-edge flip-flops, in the format |
|
|
|
‘ALL’| |
Which log level for Yosys. At WARNING or higher, the initialization splash is also disabled. |
|
|
|
str? |
A fully qualified IPVT corner to use during synthesis. If unspecified, the value for |
|
|
|
bool |
Generate a graphviz DOT file for the design. This will fail on a completely empty design. |
|
|
|
bool |
Ignore multiple-driver warnings if they are connected to tri-state buffers on a best-effort basis. |
|
|
|
bool |
Generates names for netlist instances. This results in instance names that can be extremely long, but are more human-readable. |
|
|
|
‘AREA 0’| |
Strategies for abc logic synthesis and technology mapping. AREA strategies usually result in a more compact design, while DELAY strategies usually result in a design that runs at a higher frequency. Please note that there is no way to know which strategy is the best before trying them. |
|
|
Deprecated names
|
bool |
Enables |
|
|
|
bool |
Replaces the ABC command |
|
|
|
bool |
Replaces the ABC command |
|
|
|
bool |
Passes D-flipflop cells through ABC for optimization (which can for example, eliminate identical flip-flops). |
|
|
|
bool |
Experimental: attempts a SAT-based remapping in all area and delay strategies before ‘retime’, which may improve PPA results. |
|
|
|
bool |
Experimental: uses the &nf delay-based mapper with a very high value instead of the amap area mapper, which may be better in some scenarios at recovering area. |
|
|
Deprecated names
|
bool |
Enables inserting buffer cells for directly connected wires. |
|
|
|
bool |
Splits multi-bit nets into single-bit nets. Easier to trace but may not be supported by all tools. |
|
|
|
bool |
Enables |
|
|
Deprecated names
|
‘flatten’| |
Affects how hierarchy is maintained throughout and after synthesis. ‘flatten’ flattens it during and after synthesis. ‘deferred_flatten’ flattens it after synthesis. ‘keep’ never flattens it. Please note that when using the Slang plugin, you need to pass ‘–keep-hierarchy’ to |
|
|
|
int? |
Sets the ‘keep_hierarchy’ attribute on modules where the gate count is estimated to exceed the specified threshold. This prevents larger modules from being flattened. This variable only affects the design when ‘flatten’ is called through |
|
|
|
List[str]? |
A list of instances for which to set the ‘keep_hierarchy’ attribute. This variable only affects the design when ‘flatten’ is called through |
|
|
|
List[str]? |
A list of modules for which to set the ‘keep_hierarchy’ attribute. This variable only affects the design when ‘flatten’ is called through |
|
|
|
bool |
A flag that enables yosys to reduce the number of cells by determining shareable resources and merging them. |
|
|
|
‘YOSYS’| |
Adder type to which the \(add and \)sub operators are mapped to. Possible values are |
|
|
|
Path? |
Points to an extra techmap file for yosys that runs right after yosys |
|
|
|
bool |
“Elaborate” the design only without attempting any logic mapping. Useful when dealing with structural Verilog netlists. |
|
|
|
bool |
Runs the booth pass as part of synthesis: See https://yosyshq.readthedocs.io/projects/yosys/en/latest/cmd/booth.html |
|
|
|
‘high’| |
Whether to tie undefined values low or high. Explicitly provide null if you wish to simply leave them undriven. |
|
|
|
bool |
If true, Verilog-2001 attributes are omitted from output netlists. Some utilities do not support attributes. |
|
|
|
bool |
If true, vectors with the shape [0:0] are converted to normal wires in the netlist. If disabled, even one-width pins will be suffixed [0] in the layout when imported by most PnR tools. |
|
Synthesis¶
Performs synthesis and technology mapping on Verilog RTL files using Yosys and ABC, emitting a netlist.
Some metrics will also be extracted and updated, namely:
design__instance__countdesign__instance_unmapped__countdesign__instance__area
Note that Yosys steps do not currently support gzipped standard cell dotlib files. They are however supported for macros:
https://github.com/YosysHQ/yosys/issues/4830
Importing
from librelane.steps.pyosys import Synthesis
# or
from librelane.steps import Step
Synthesis = Step.factory.get("Yosys.Synthesis")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
Verilog Netlist (.nl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
A path to a file containing the latch mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the tri-state buffer mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the carry-select adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the ripple-carry adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the full adder mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux4 mapping for Yosys. |
|
|
Deprecated names
|
int? |
If set to a value, a group of flip-flops with size >= SYNTH_CLOCKGATE_MIN_WIDTH and an enable signal are clock-gated instead. |
|
|
|
str? |
The integrated clock gate cell used for positive-edge flip-flops, in the format |
|
|
|
str? |
The integrated clock gate cell used for positive-edge flip-flops, in the format |
|
|
|
‘ALL’| |
Which log level for Yosys. At WARNING or higher, the initialization splash is also disabled. |
|
|
|
str? |
A fully qualified IPVT corner to use during synthesis. If unspecified, the value for |
|
|
|
bool |
Generate a graphviz DOT file for the design. This will fail on a completely empty design. |
|
|
|
bool |
Ignore multiple-driver warnings if they are connected to tri-state buffers on a best-effort basis. |
|
|
|
bool |
Generates names for netlist instances. This results in instance names that can be extremely long, but are more human-readable. |
|
|
|
‘AREA 0’| |
Strategies for abc logic synthesis and technology mapping. AREA strategies usually result in a more compact design, while DELAY strategies usually result in a design that runs at a higher frequency. Please note that there is no way to know which strategy is the best before trying them. |
|
|
Deprecated names
|
bool |
Enables |
|
|
|
bool |
Replaces the ABC command |
|
|
|
bool |
Replaces the ABC command |
|
|
|
bool |
Passes D-flipflop cells through ABC for optimization (which can for example, eliminate identical flip-flops). |
|
|
|
bool |
Experimental: attempts a SAT-based remapping in all area and delay strategies before ‘retime’, which may improve PPA results. |
|
|
|
bool |
Experimental: uses the &nf delay-based mapper with a very high value instead of the amap area mapper, which may be better in some scenarios at recovering area. |
|
|
Deprecated names
|
bool |
Enables inserting buffer cells for directly connected wires. |
|
|
|
bool |
Splits multi-bit nets into single-bit nets. Easier to trace but may not be supported by all tools. |
|
|
|
bool |
Enables |
|
|
Deprecated names
|
‘flatten’| |
Affects how hierarchy is maintained throughout and after synthesis. ‘flatten’ flattens it during and after synthesis. ‘deferred_flatten’ flattens it after synthesis. ‘keep’ never flattens it. Please note that when using the Slang plugin, you need to pass ‘–keep-hierarchy’ to |
|
|
|
int? |
Sets the ‘keep_hierarchy’ attribute on modules where the gate count is estimated to exceed the specified threshold. This prevents larger modules from being flattened. This variable only affects the design when ‘flatten’ is called through |
|
|
|
List[str]? |
A list of instances for which to set the ‘keep_hierarchy’ attribute. This variable only affects the design when ‘flatten’ is called through |
|
|
|
List[str]? |
A list of modules for which to set the ‘keep_hierarchy’ attribute. This variable only affects the design when ‘flatten’ is called through |
|
|
|
bool |
A flag that enables yosys to reduce the number of cells by determining shareable resources and merging them. |
|
|
|
‘YOSYS’| |
Adder type to which the \(add and \)sub operators are mapped to. Possible values are |
|
|
|
Path? |
Points to an extra techmap file for yosys that runs right after yosys |
|
|
|
bool |
“Elaborate” the design only without attempting any logic mapping. Useful when dealing with structural Verilog netlists. |
|
|
|
bool |
Runs the booth pass as part of synthesis: See https://yosyshq.readthedocs.io/projects/yosys/en/latest/cmd/booth.html |
|
|
|
‘high’| |
Whether to tie undefined values low or high. Explicitly provide null if you wish to simply leave them undriven. |
|
|
|
bool |
If true, Verilog-2001 attributes are omitted from output netlists. Some utilities do not support attributes. |
|
|
|
bool |
If true, vectors with the shape [0:0] are converted to normal wires in the netlist. If disabled, even one-width pins will be suffixed [0] in the layout when imported by most PnR tools. |
|
|
|
List[Path] |
The paths of the design’s Verilog files. |
|
|
Deprecated names
|
List[str]? |
Preprocessor defines for input Verilog files. |
|
|
Deprecated names
|
str? |
Specifies the name of the define used to guard power and ground connections in the input RTL. |
|
|
|
List[Path]? |
Specifies the Verilog |
|
|
|
List[str]? |
Key-value pairs to be |
|
|
Deprecated names
|
bool |
Use the Slang frontend to process files, which has better SystemVerilog parsing capabilities but is not as battle-tested as the default Yosys friend. |
|
|
|
List[str]? |
Pass arguments to the Slang frontend. |
|
Synthesis (VHDL)¶
Performs synthesis and technology mapping on VHDL files using Yosys, GHDL and ABC, emitting a netlist.
Some metrics will also be extracted and updated, namely:
design__instance__countdesign__instance_unmapped__countdesign__instance__area
Note that Yosys steps do not currently support gzipped standard cell dotlib files. They are however supported for macros:
https://github.com/YosysHQ/yosys/issues/4830
Importing
from librelane.steps.pyosys import VHDLSynthesis
# or
from librelane.steps import Step
VHDLSynthesis = Step.factory.get("Yosys.VHDLSynthesis")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
Verilog Netlist (.nl.v) |
Configuration Variables¶
| Variable Name | Type | Description | Default |
|---|---|---|---|
|
|
Path? |
A path to a file containing the latch mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the tri-state buffer mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the carry-select adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the ripple-carry adder mapping for Yosys. |
|
|
Deprecated names
|
Path? |
A path to a file containing the full adder mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux mapping for Yosys. |
|
|
|
Path? |
A path to a file containing the mux4 mapping for Yosys. |
|
|
Deprecated names
|
int? |
If set to a value, a group of flip-flops with size >= SYNTH_CLOCKGATE_MIN_WIDTH and an enable signal are clock-gated instead. |
|
|
|
str? |
The integrated clock gate cell used for positive-edge flip-flops, in the format |
|
|
|
str? |
The integrated clock gate cell used for positive-edge flip-flops, in the format |
|
|
|
‘ALL’| |
Which log level for Yosys. At WARNING or higher, the initialization splash is also disabled. |
|
|
|
str? |
A fully qualified IPVT corner to use during synthesis. If unspecified, the value for |
|
|
|
bool |
Generate a graphviz DOT file for the design. This will fail on a completely empty design. |
|
|
|
bool |
Ignore multiple-driver warnings if they are connected to tri-state buffers on a best-effort basis. |
|
|
|
bool |
Generates names for netlist instances. This results in instance names that can be extremely long, but are more human-readable. |
|
|
|
‘AREA 0’| |
Strategies for abc logic synthesis and technology mapping. AREA strategies usually result in a more compact design, while DELAY strategies usually result in a design that runs at a higher frequency. Please note that there is no way to know which strategy is the best before trying them. |
|
|
Deprecated names
|
bool |
Enables |
|
|
|
bool |
Replaces the ABC command |
|
|
|
bool |
Replaces the ABC command |
|
|
|
bool |
Passes D-flipflop cells through ABC for optimization (which can for example, eliminate identical flip-flops). |
|
|
|
bool |
Experimental: attempts a SAT-based remapping in all area and delay strategies before ‘retime’, which may improve PPA results. |
|
|
|
bool |
Experimental: uses the &nf delay-based mapper with a very high value instead of the amap area mapper, which may be better in some scenarios at recovering area. |
|
|
Deprecated names
|
bool |
Enables inserting buffer cells for directly connected wires. |
|
|
|
bool |
Splits multi-bit nets into single-bit nets. Easier to trace but may not be supported by all tools. |
|
|
|
bool |
Enables |
|
|
Deprecated names
|
‘flatten’| |
Affects how hierarchy is maintained throughout and after synthesis. ‘flatten’ flattens it during and after synthesis. ‘deferred_flatten’ flattens it after synthesis. ‘keep’ never flattens it. Please note that when using the Slang plugin, you need to pass ‘–keep-hierarchy’ to |
|
|
|
int? |
Sets the ‘keep_hierarchy’ attribute on modules where the gate count is estimated to exceed the specified threshold. This prevents larger modules from being flattened. This variable only affects the design when ‘flatten’ is called through |
|
|
|
List[str]? |
A list of instances for which to set the ‘keep_hierarchy’ attribute. This variable only affects the design when ‘flatten’ is called through |
|
|
|
List[str]? |
A list of modules for which to set the ‘keep_hierarchy’ attribute. This variable only affects the design when ‘flatten’ is called through |
|
|
|
bool |
A flag that enables yosys to reduce the number of cells by determining shareable resources and merging them. |
|
|
|
‘YOSYS’| |
Adder type to which the \(add and \)sub operators are mapped to. Possible values are |
|
|
|
Path? |
Points to an extra techmap file for yosys that runs right after yosys |
|
|
|
bool |
“Elaborate” the design only without attempting any logic mapping. Useful when dealing with structural Verilog netlists. |
|
|
|
bool |
Runs the booth pass as part of synthesis: See https://yosyshq.readthedocs.io/projects/yosys/en/latest/cmd/booth.html |
|
|
|
‘high’| |
Whether to tie undefined values low or high. Explicitly provide null if you wish to simply leave them undriven. |
|
|
|
bool |
If true, Verilog-2001 attributes are omitted from output netlists. Some utilities do not support attributes. |
|
|
|
bool |
If true, vectors with the shape [0:0] are converted to normal wires in the netlist. If disabled, even one-width pins will be suffixed [0] in the layout when imported by most PnR tools. |
|
|
|
List[Path] |
The paths of the design’s VHDL files. |
|
|
|
List[str]? |
Pass arguments to the ghdl frontend. |
|
Misc¶
Load Base Design Constraints File¶
Loads an SDC file specified as a configuration variable into the state object unaltered.
This Step exists for legacy compatibility and should not be used in new flows.
Importing
from librelane.steps.misc import LoadBaseSDC
# or
from librelane.steps import Step
LoadBaseSDC = Step.factory.get("Misc.LoadBaseSDC")
Inputs and Outputs¶
Inputs |
Outputs |
|---|---|
Design Constraints (.sdc) |
Report Manufacturability (DRC, LVS, Antenna)¶
Logs a simple “manufacturability report”, i.e., the status of DRC, LVS, and antenna violations.
Importing
from librelane.steps.misc import ReportManufacturability
# or
from librelane.steps import Step
ReportManufacturability = Step.factory.get("Misc.ReportManufacturability")