[engine] now repack can find a routing trace from the port in the same type at top-level pb_graph_node
This commit is contained in:
parent
1c36ac28f1
commit
31da9bf6ea
|
@ -258,7 +258,8 @@ static std::vector<t_pb_graph_pin*> find_routed_pb_graph_pins_atom_net(
|
||||||
* This function will find the actual routing traces of the demanded net
|
* This function will find the actual routing traces of the demanded net
|
||||||
* There is a specific search space applied when searching the routing traces:
|
* There is a specific search space applied when searching the routing traces:
|
||||||
* - ONLY applicable to the pb_pin of top-level pb_graph_node
|
* - ONLY applicable to the pb_pin of top-level pb_graph_node
|
||||||
* - candidate can be limited to a set of pb pins
|
* - First-tier candidates are in the same port of the source pin
|
||||||
|
* - If nothing is found in first-tier, we find expand the range by considering all the pins in the same type that are available at the top-level pb_graph_node
|
||||||
***************************************************************************************/
|
***************************************************************************************/
|
||||||
static std::vector<int> find_pb_route_by_atom_net(
|
static std::vector<int> find_pb_route_by_atom_net(
|
||||||
const t_pb* pb, const t_pb_graph_pin* source_pb_pin,
|
const t_pb* pb, const t_pb_graph_pin* source_pb_pin,
|
||||||
|
@ -267,6 +268,7 @@ static std::vector<int> find_pb_route_by_atom_net(
|
||||||
|
|
||||||
std::vector<int> pb_route_indices;
|
std::vector<int> pb_route_indices;
|
||||||
|
|
||||||
|
std::vector<int> candidate_pool;
|
||||||
for (int pin = 0; pin < pb->pb_graph_node->total_pb_pins; ++pin) {
|
for (int pin = 0; pin < pb->pb_graph_node->total_pb_pins; ++pin) {
|
||||||
/* Bypass unused pins */
|
/* Bypass unused pins */
|
||||||
if ((0 == pb->pb_route.count(pin)) ||
|
if ((0 == pb->pb_route.count(pin)) ||
|
||||||
|
@ -277,12 +279,23 @@ static std::vector<int> find_pb_route_by_atom_net(
|
||||||
if (atom_net_id != pb->pb_route.at(pin).atom_net_id) {
|
if (atom_net_id != pb->pb_route.at(pin).atom_net_id) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
candidate_pool.push_back(pin);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int pin : candidate_pool) {
|
||||||
if (source_pb_pin->port == pb->pb_route.at(pin).pb_graph_pin->port) {
|
if (source_pb_pin->port == pb->pb_route.at(pin).pb_graph_pin->port) {
|
||||||
pb_route_indices.push_back(pin);
|
pb_route_indices.push_back(pin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pb_route_indices.empty()) {
|
||||||
|
for (int pin : candidate_pool) {
|
||||||
|
if (pb->pb_route.at(pin).pb_graph_pin->parent_node->is_root() && source_pb_pin->port->type == pb->pb_route.at(pin).pb_graph_pin->port->type) {
|
||||||
|
pb_route_indices.push_back(pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return pb_route_indices;
|
return pb_route_indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -662,9 +675,12 @@ static void add_lb_router_nets(
|
||||||
if (0 == pb_route_indices.size()) {
|
if (0 == pb_route_indices.size()) {
|
||||||
VTR_LOGV(verbose, "Bypass routing due to no routing traces found\n");
|
VTR_LOGV(verbose, "Bypass routing due to no routing traces found\n");
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else if (1 == pb_route_indices.size()) {
|
||||||
VTR_ASSERT(1 == pb_route_indices.size());
|
|
||||||
pb_route_index = pb_route_indices[0];
|
pb_route_index = pb_route_indices[0];
|
||||||
|
} else {
|
||||||
|
VTR_LOG_ERROR("Found %d routing traces for net \'%s\' in clustered block \'%s\'. Expect only 1.\n",
|
||||||
|
pb_route_indices.size(), atom_ctx.nlist.net_name(atom_net_id_to_route).c_str(), clustering_ctx.clb_nlist.block_name(block_id).c_str());
|
||||||
|
VTR_ASSERT(1 == pb_route_indices.size());
|
||||||
}
|
}
|
||||||
t_pb_graph_pin* packing_source_pb_pin =
|
t_pb_graph_pin* packing_source_pb_pin =
|
||||||
get_pb_graph_node_pin_from_block_pin(block_id, pb_route_index);
|
get_pb_graph_node_pin_from_block_pin(block_id, pb_route_index);
|
||||||
|
|
Loading…
Reference in New Issue