Skip to content

Commit b254795

Browse files
committed
[vpr][pack] add blocks in get_all_connected_primitive_pins if they are a part of the pattern
1 parent 15b04dd commit b254795

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

vpr/src/pack/prepack.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ static void find_all_equivalent_chains(t_pack_patterns* chain_pattern, const t_p
9999
static void update_chain_root_pins(t_pack_patterns* chain_pattern,
100100
const std::vector<t_pb_graph_pin*>& chain_input_pins);
101101

102-
static void get_all_connected_primitive_pins(const t_pb_graph_pin* cluster_input_pin, std::vector<t_pb_graph_pin*>& connected_primitive_pins);
102+
static void get_all_connected_primitive_pins(const t_pb_graph_pin* cluster_input_pin,
103+
const std::unordered_set<t_pb_type*>& pattern_blocks,
104+
std::vector<t_pb_graph_pin*>& connected_primitive_pins);
103105

104106
static void init_molecule_chain_info(const AtomBlockId blk_id,
105107
t_pack_molecule& molecule,
@@ -1613,9 +1615,10 @@ static void update_chain_root_pins(t_pack_patterns* chain_pattern,
16131615
const std::vector<t_pb_graph_pin*>& chain_input_pins) {
16141616
std::vector<std::vector<t_pb_graph_pin*>> primitive_input_pins;
16151617

1618+
std::unordered_set<t_pb_type*> pattern_blocks = get_pattern_blocks(chain_pattern);
16161619
for (const auto pin_ptr : chain_input_pins) {
16171620
std::vector<t_pb_graph_pin*> connected_primitive_pins;
1618-
get_all_connected_primitive_pins(pin_ptr, connected_primitive_pins);
1621+
get_all_connected_primitive_pins(pin_ptr, pattern_blocks, connected_primitive_pins);
16191622

16201623
/**
16211624
* It is required that the chain pins are connected inside a complex
@@ -1639,7 +1642,9 @@ static void update_chain_root_pins(t_pack_patterns* chain_pattern,
16391642
* the Cin pin of all the adder primitives connected to this pin. Which is for typical architectures
16401643
* will be only one pin connected to the very first adder in the cluster.
16411644
*/
1642-
static void get_all_connected_primitive_pins(const t_pb_graph_pin* cluster_input_pin, std::vector<t_pb_graph_pin*>& connected_primitive_pins) {
1645+
static void get_all_connected_primitive_pins(const t_pb_graph_pin* cluster_input_pin,
1646+
const std::unordered_set<t_pb_type*>& pattern_blocks,
1647+
std::vector<t_pb_graph_pin*>& connected_primitive_pins) {
16431648
/* Skip pins for modes that are disabled for packing*/
16441649
if ((nullptr != cluster_input_pin->parent_node->pb_type->parent_mode)
16451650
&& (true == cluster_input_pin->parent_node->pb_type->parent_mode->disable_packing)) {
@@ -1650,9 +1655,11 @@ static void get_all_connected_primitive_pins(const t_pb_graph_pin* cluster_input
16501655
const auto& output_edge = cluster_input_pin->output_edges[iedge];
16511656
for (int ipin = 0; ipin < output_edge->num_output_pins; ipin++) {
16521657
if (output_edge->output_pins[ipin]->is_primitive_pin()) {
1653-
connected_primitive_pins.push_back(output_edge->output_pins[ipin]);
1658+
if (pattern_blocks.find(output_edge->output_pins[ipin]->parent_node->pb_type) != pattern_blocks.end()) {
1659+
connected_primitive_pins.push_back(output_edge->output_pins[ipin]);
1660+
}
16541661
} else {
1655-
get_all_connected_primitive_pins(output_edge->output_pins[ipin], connected_primitive_pins);
1662+
get_all_connected_primitive_pins(output_edge->output_pins[ipin], pattern_blocks, connected_primitive_pins);
16561663
}
16571664
}
16581665
}

0 commit comments

Comments
 (0)