[engine] add black list for repacker to pick routing traces
This commit is contained in:
parent
16ba14f541
commit
2ba4249518
|
@ -304,6 +304,64 @@ static std::vector<int> find_pb_route_by_atom_net(
|
||||||
return pb_route_indices;
|
return pb_route_indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************************************
|
||||||
|
* This function will find the actual routing traces of the demanded net
|
||||||
|
* There is a specific search space applied when searching the routing traces:
|
||||||
|
* - ONLY applicable to the pb_pin of top-level pb_graph_node
|
||||||
|
* - 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
|
||||||
|
* - Exclude all the pb_route that is from a net on a pin which should be ignored
|
||||||
|
***************************************************************************************/
|
||||||
|
static std::vector<int> find_pb_route_by_atom_net_exclude_blacklist(
|
||||||
|
const t_pb* pb, const t_pb_graph_pin* source_pb_pin,
|
||||||
|
const AtomNetId& atom_net_id, const std::map<AtomNetId, bool>& ignored_atom_nets, const RepackOption& options) {
|
||||||
|
VTR_ASSERT(true == source_pb_pin->parent_node->is_root());
|
||||||
|
|
||||||
|
std::vector<int> pb_route_indices;
|
||||||
|
|
||||||
|
std::vector<int> candidate_pool;
|
||||||
|
for (int pin = 0; pin < pb->pb_graph_node->total_pb_pins; ++pin) {
|
||||||
|
/* Bypass unused pins */
|
||||||
|
if ((0 == pb->pb_route.count(pin)) ||
|
||||||
|
(AtomNetId::INVALID() == pb->pb_route.at(pin).atom_net_id)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* Get the driver pb pin id, it must be valid */
|
||||||
|
if (atom_net_id != pb->pb_route.at(pin).atom_net_id) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BasicPort curr_pin(std::string(source_pb_pin->port->name),
|
||||||
|
source_pb_pin->pin_number, source_pb_pin->pin_number);
|
||||||
|
auto result = ignored_atom_nets.find(atom_net_id);
|
||||||
|
if (result != ignored_atom_nets.end() && result->second && options.is_pin_ignore_global_nets(std::string(pb->pb_graph_node->pb_type->name),
|
||||||
|
curr_pin)) {
|
||||||
|
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) {
|
||||||
|
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() &&
|
||||||
|
is_pb_graph_pins_share_interc(source_pb_pin,
|
||||||
|
pb->pb_route.at(pin).pb_graph_pin)) {
|
||||||
|
pb_route_indices.push_back(pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pb_route_indices;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************************
|
/***************************************************************************************
|
||||||
* This function will find the actual source_pb_pin that is mapped by packed in
|
* This function will find the actual source_pb_pin that is mapped by packed in
|
||||||
*the pb route As the inputs of clustered block may be renamed during routing,
|
*the pb route As the inputs of clustered block may be renamed during routing,
|
||||||
|
@ -684,10 +742,9 @@ static void add_lb_router_nets(
|
||||||
pb_route_indices = find_pb_route_remapped_source_pb_pin(
|
pb_route_indices = find_pb_route_remapped_source_pb_pin(
|
||||||
pb, source_pb_pin, atom_net_id_to_route);
|
pb, source_pb_pin, atom_net_id_to_route);
|
||||||
} else {
|
} else {
|
||||||
VTR_ASSERT_SAFE(
|
/* If this is a constrained net but the source pin is not the pin that the net is constrained to, w*/
|
||||||
!design_constraints.unconstrained_net(constrained_net_name));
|
|
||||||
pb_route_indices =
|
pb_route_indices =
|
||||||
find_pb_route_by_atom_net(pb, source_pb_pin, atom_net_id_to_route);
|
find_pb_route_by_atom_net_exclude_blacklist(pb, source_pb_pin, atom_net_id_to_route, ignored_atom_nets, options);
|
||||||
}
|
}
|
||||||
/* It could happen that the constrained net is NOT used in this clb, we just
|
/* It could happen that the constrained net is NOT used in this clb, we just
|
||||||
* skip it for routing For example, a clkB net is never mapped to any ports
|
* skip it for routing For example, a clkB net is never mapped to any ports
|
||||||
|
|
Loading…
Reference in New Issue