Skip to content

Overused Node Report #2926

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Mar 11, 2025
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions vpr/src/route/overuse_report.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@ static void report_congested_nets(const Netlist<>& net_list,

static void log_overused_nodes_header();
static void log_single_overused_node_status(int overuse_index, RRNodeId inode);

/**
* @brief When reporting overused IPIN/OPIN nodes, we also print the nets
* connected to other pins of the same block. This information may help
* the user understand why the node is overused or why other pins are not
* being utilized for routing the net.
*/
void print_block_pins_nets(std::ostream& os,
t_physical_tile_type_ptr physical_type,
int layer,
Expand Down Expand Up @@ -448,7 +455,8 @@ void print_block_pins_nets(std::ostream& os,
const auto& rr_graph = g_vpr_ctx.device().rr_graph;

t_pin_range pin_num_range;
if (is_pin_on_tile(physical_type, pin_physical_num)) {
bool pin_on_tile = is_pin_on_tile(physical_type, pin_physical_num);
if (pin_on_tile) {
pin_num_range.low = 0;
pin_num_range.high = physical_type->num_pins - 1;
} else {
Expand All @@ -470,7 +478,12 @@ void print_block_pins_nets(std::ostream& os,
for (int pin = pin_num_range.low; pin <= pin_num_range.high; pin++) {
t_rr_type rr_type = (get_pin_type_from_pin_physical_num(physical_type, pin) == DRIVER) ? t_rr_type::OPIN : t_rr_type::IPIN;
RRNodeId node_id = get_pin_rr_node_id(rr_graph.node_lookup(), physical_type, layer, root_x, root_y, pin);
VTR_ASSERT(node_id != RRNodeId::INVALID());
// When flat router is enabled, RR Node chains collapse into a single node. Thus, when
// looking up the RR Node ID, it may return an invalid node ID. In this case, we skip
// this pin.
if (!pin_on_tile && node_id == RRNodeId::INVALID()) {
continue;
}
auto search_result = rr_node_to_net_map.find(node_id);
if (rr_type == t_rr_type::OPIN) {
os << " OPIN - ";
Expand Down