Detailed Routing#
The Detailed Routing (drt) module in OpenROAD is based on the open-source
detailed router, TritonRoute. TritonRoute consists of several main
building blocks, including pin access analysis, track assignment,
initial detailed routing, search and repair, and a DRC engine.
The initial development of the
router
is inspired by the ISPD-2018 initial detailed routing
contest. However, the current framework
differs and is built from scratch, aiming for an industrial-oriented scalable
and flexible flow.
TritonRoute provides industry-standard LEF/DEF interface with support of ISPD-2018 and ISPD-2019 contest-compatible route guide format.
Commands#
Note
Parameters in square brackets
[-param param]are optional.Parameters without square brackets
-param2 param2are required.
Detailed Route#
This command performs detailed routing.
Developer arguments
-or_seed,-or_k
Distributed arguments
-distributed,-remote_host,-remote_port,-shared_volume,-cloud_size
Pin Access arguments
-via_in_pin_bottom_layer,-via_in_pin_top_layer,-via_access_layer,-min_access_points
detailed_route
[-output_maze filename]
[-output_drc filename]
[-output_guide_coverage filename]
[-drc_report_iter_step step]
[-db_process_node name]
[-disable_via_gen]
[-droute_end_iter iter]
[-via_in_pin_bottom_layer layer]
[-via_in_pin_top_layer layer]
[-via_access_layer layer]
[-or_seed seed]
[-or_k k]
[-bottom_routing_layer layer]
[-top_routing_layer layer]
[-verbose level]
[-distributed]
[-remote_host rhost]
[-remote_port rport]
[-shared_volume vol]
[-cloud_size sz]
[-clean_patches]
[-no_pin_access]
[-min_access_points count]
[-save_guide_updates]
[-repair_pdn_vias layer]
[-single_step_dr]
Options#
Switch Name |
Description |
|---|---|
|
Path to output maze log file (e.g. |
|
Path to output DRC report file (e.g. |
|
Path to output guide coverage file (e.g. |
|
Report DRC on each iteration which is a multiple of this step. The default value is |
|
Specify the process node. |
|
Option to diable via generation with bottom and top routing layer. The default value is disabled. |
|
Number of detailed routing iterations. The default value is |
|
Refer to pin access arguments here. |
|
Refer to pin access arguments here. |
|
Refer to pin access arguments here. |
|
Refer to pin access arguments here. |
|
Refer to developer arguments here. |
|
Refer to developer arguments here. |
|
Deprecated. Use the |
|
Deprecated. Use the |
|
Sets verbose mode if the value is greater than 1, else non-verbose mode (must be integer, or error will be triggered.) |
|
Refer to distributed arguments here. |
|
Refer to distributed arguments here. |
|
Refer to distributed arguments here. |
|
Refer to distributed arguments here. |
|
Refer to distributed arguments here. |
|
Clean unneeded patches during detailed routing. |
|
Disables pin access for routing. |
|
Flag to save guides updates. |
|
This option is used for PDKs where M1 and M2 power rails run in parallel. |
Developer arguments#
Some arguments that are helpful for developers are listed here.
Switch Name |
Description |
|---|---|
|
Random seed for the order of nets to reroute. The default value is |
|
Number of swaps is given by \(k * sizeof(rerouteNets)\). The default value is |
Detailed Route Debugging#
The following command and arguments are useful when debugging error
messages from drt and to understand its behavior.
detailed_route_debug
[-pa]
[-ta]
[-dr]
[-maze]
[-net name]
[-pin name]
[-box x1 y1 x2 y2]
[-iter iter]
[-pa_markers]
[-dump_dr]
[-dump_dir dir]
[-snapshot_dir dir]
[-dump_last_worker]
[-pa_edge]
[-pa_commit]
[-write_net_tracks]
Options#
Switch Name |
Description |
|---|---|
|
Enable debug for pin access. |
|
Enable debug for track assignment. |
|
Enable debug for detailed routing. |
|
Enable debug for maze routing. |
|
Enable debug for net name. |
|
Enable debug for pin name. |
|
Set the box for debugging given by lower left/upper right coordinates. |
|
Debugs routes that pass through the point |
|
Specifies the number of debug iterations. The default value is |
|
Enable pin access markers. |
|
Filename for detailed routing dump. |
|
Directory for detailed routing dump. |
|
Directory for snapshots produced if the debug level of |
|
Enable visibility of pin access edges. |
|
Enable visibility of pin access commits. |
|
Enable writing of net track assigments. |
Check Pin Access#
This function checks pin access.
pin_access
[-db_process_node name]
[-bottom_routing_layer layer]
[-top_routing_layer layer]
[-via_access_layer layer]
[-via_in_pin_bottom_layer layer]
[-via_in_pin_top_layer layer]
[-min_access_points count]
[-verbose level]
[-distributed]
[-remote_host rhost]
[-remote_port rport]
[-shared_volume vol]
[-cloud_size sz]
Options#
Switch Name |
Description |
|---|---|
|
Specify process node. |
|
Deprecated. Use the |
|
Deprecated. Use the |
|
Refer to pin access arguments here. |
|
Refer to pin access arguments here. |
|
Refer to pin access arguments here. |
|
Refer to pin access arguments here. |
|
Sets verbose mode if the value is greater than 1, else non-verbose mode (must be integer, or error will be triggered.) |
|
Refer to distributed arguments here. |
|
Refer to distributed arguments here. |
|
Refer to distributed arguments here. |
|
Refer to distributed arguments here. |
|
Refer to distributed arguments here. |
Pin Access Arguments#
We have compiled all pin access related arguments in this section.
Switch Name |
Description |
|---|---|
|
Top via access layer name. Any pin on this layer or below can only be accessed through a via, disallowing planar access. |
|
Via-in pin bottom layer name. Used in conjunction with via_in_pin_top_layer to specify the layer range for via-in-pin rules. |
|
Via-in pin top layer name. Used in conjunction with via_in_pin_bottom_layer to specify the layer range for via-in-pin rules. For pins within this layer range, any via enclosure must be fully contained within the pin boundary and cannot extend beyond the pin edges. |
|
Minimum number of access points per pin. |
Distributed Arguments#
We have compiled all distributed arguments in this section.
Note
Additional setup is required. Please refer to this guide.
Switch Name |
Description |
|---|---|
|
Enable distributed mode with Kubernetes and Google Cloud. |
|
The host IP. |
|
The value of the port to access from. |
|
The mount path of the nfs shared folder. |
|
The number of workers. |
Set Routing Watermark Strength#
This command sets the cost multiplier the detailed router applies to wiring
against a layer’s preferred direction on nets tagged by set_routing_watermark.
A larger value suppresses wrong-way wiring more strongly on those nets, which is
what carries the routing watermark. Preferred-direction wiring, pin access and
untagged nets are unaffected. This is router configuration and does not
persist in the database, so call it in the same process as detailed_route,
before it.
set_routing_watermark_strength
strength
Options#
Switch Name |
Description |
|---|---|
|
Finite cost multiplier from |
Scaled edge costs and the path costs built from them saturate at the router’s maximum cost rather than wrapping. Very large strengths make distinct expensive paths indistinguishable, which is why the range is bounded.
Get Routing Watermark Strength#
This command returns the cost multiplier currently in effect.
get_routing_watermark_strength
Useful Developer Commands#
If you are a developer, you might find these useful. More details can be found in the source file or the swig file.
Command Name |
Description |
|---|---|
|
Set default via. |
|
Set unidirectional layer. |
|
Refer to function |
|
Refer to function |
Example scripts#
Example script demonstrating how to run TritonRoute on a sample design of gcd
in the Nangate45 technology node.
# single machine example
./test/gcd_nangate45.tcl
# distributed example
./test/gcd_nangate45_distributed.tcl
Regression tests#
There are a set of regression tests in ./test. For more information, refer to this section.
Simply run the following script:
./test/regression
Limitations#
References#
Please cite the following paper(s) for publication:
A. B. Kahng, L. Wang and B. Xu, “TritonRoute: The Open Source Detailed Router”, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems (2020), doi:10.1109/TCAD.2020.3003234. (.pdf)
A. B. Kahng, L. Wang and B. Xu, “The Tao of PAO: Anatomy of a Pin Access Oracle for Detailed Routing”, Proc. ACM/IEEE Design Automation Conf., 2020, pp. 1-6. (.pdf)
License#
BSD 3-Clause License. See LICENSE file.