Skip to content

Faster check_non_configurable_edges #2835

Closed
@vaughnbetz

Description

@vaughnbetz

This post-routing check is very slow for the 7-series. It is O(N^2) in design/device size when you have many L-shaped or T-shaped (shorts) wires.

Proposed Behaviour

Possible solution:
Re-code the check to go through a net and put counts of how many times each non-configurable node set and edge set occurs in that route using an unordered_map with a key of the edge set / node set id. Then call the existing checking code with only those sets passed in.
Or you could be a little faster still for high fanout nets by having an unordered_map keyed by node set, where each entry is itself an unordered_set of the node ids that are in that non-configurable set. Do the same intersection checks between that unordered_set (from the net) and the non-configurable node set it matches to see they are identical. Do the same thing for non-configurable edges.

The code has some nice error messages; can either incorporate them, or just call the existing code on any net that fails your checks to get nice error messages.

Current Behaviour

This code works but takes 15,000 on LU32 with the 7-series; 3x or so the total runtime of all other algorithms combined. It will be worse for bigger design.

At the same time, please add --check_route to the documentation of command line options.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions