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 param2 are 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

-output_maze

Path to output maze log file (e.g. output_maze.log).

-output_drc

Path to output DRC report file (e.g. output_drc.rpt).

-output_guide_coverage

Path to output guide coverage file (e.g. sample_coverage.csv).

-drc_report_iter_step

Report DRC on each iteration which is a multiple of this step. The default value is 0, and the allowed values are integers [0, MAX_INT].

-db_process_node

Specify the process node.

-disable_via_gen

Option to diable via generation with bottom and top routing layer. The default value is disabled.

-droute_end_iter

Number of detailed routing iterations. The default value is -1, and the allowed values are integers [1, 64].

-via_in_pin_bottom_layer

Refer to pin access arguments here.

-via_in_pin_top_layer

Refer to pin access arguments here.

-via_access_layer

Refer to pin access arguments here.

-min_access_points

Refer to pin access arguments here.

-or_seed

Refer to developer arguments here.

-or_k

Refer to developer arguments here.

-bottom_routing_layer

Deprecated. Use the set_routing_layers command instead.

-top_routing_layer

Deprecated. Use the set_routing_layers command instead.

-verbose

Sets verbose mode if the value is greater than 1, else non-verbose mode (must be integer, or error will be triggered.)

-distributed

Refer to distributed arguments here.

-remote_host

Refer to distributed arguments here.

-remote_port

Refer to distributed arguments here.

-shared_volume

Refer to distributed arguments here.

-cloud_size

Refer to distributed arguments here.

-clean_patches

Clean unneeded patches during detailed routing.

-no_pin_access

Disables pin access for routing.

-save_guide_updates

Flag to save guides updates.

-repair_pdn_vias

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

-or_seed

Random seed for the order of nets to reroute. The default value is -1, and the allowed values are integers [0, MAX_INT].

-or_k

Number of swaps is given by \(k * sizeof(rerouteNets)\). The default value is 0, and the allowed values are integers [0, MAX_INT].

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

-pa

Enable debug for pin access.

-ta

Enable debug for track assignment.

-dr

Enable debug for detailed routing.

-maze

Enable debug for maze routing.

-net

Enable debug for net name.

-pin

Enable debug for pin name.

-box

Set the box for debugging given by lower left/upper right coordinates.

-worker

Debugs routes that pass through the point {x, y}.

-iter

Specifies the number of debug iterations. The default value is 0, and the accepted values are integers [0, MAX_INT.

-pa_markers

Enable pin access markers.

-dump_dr

Filename for detailed routing dump.

-dump_dir

Directory for detailed routing dump.

-snapshot_dir

Directory for snapshots produced if the debug level of DRT snapshot is set to 1.

-pa_edge

Enable visibility of pin access edges.

-pa_commit

Enable visibility of pin access commits.

-write_net_tracks

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

-db_process_node

Specify process node.

-bottom_routing_layer

Deprecated. Use the set_routing_layers command instead.

-top_routing_layer

Deprecated. Use the set_routing_layers command instead.

-via_access_layer

Refer to pin access arguments here.

-via_in_pin_bottom_layer

Refer to pin access arguments here.

-via_in_pin_top_layer

Refer to pin access arguments here.

-min_access_points

Refer to pin access arguments here.

-verbose

Sets verbose mode if the value is greater than 1, else non-verbose mode (must be integer, or error will be triggered.)

-distributed

Refer to distributed arguments here.

-remote_host

Refer to distributed arguments here.

-remote_port

Refer to distributed arguments here.

-shared_volume

Refer to distributed arguments here.

-cloud_size

Refer to distributed arguments here.

Pin Access Arguments#

We have compiled all pin access related arguments in this section.

Switch Name

Description

-via_access_layer

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

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

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.

-min_access_points

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

-distributed

Enable distributed mode with Kubernetes and Google Cloud.

-remote_host

The host IP.

-remote_port

The value of the port to access from.

-shared_volume

The mount path of the nfs shared folder.

-cloud_size

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

strength

Finite cost multiplier from 0 to 10000 inclusive. 1 tags nets without biasing them. Defaults to 100.

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

detailed_route_set_default_via

Set default via.

detailed_route_set_unidirectional_layer

Set unidirectional layer.

step_dr

Refer to function detailed_route_step_drt.

check_drc

Refer to function check_drc_cmd.

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:

  1. 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)

  2. 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)

Authors#

TritonRoute was developed by graduate students Lutong Wang and Bangqi Xu from UC San Diego, and serves as the detailed router in the OpenROAD project.

License#

BSD 3-Clause License. See LICENSE file.