aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/include/uhd/utils/graph_utils.hpp7
-rw-r--r--host/lib/utils/graph_utils.cpp10
2 files changed, 13 insertions, 4 deletions
diff --git a/host/include/uhd/utils/graph_utils.hpp b/host/include/uhd/utils/graph_utils.hpp
index 6b264032c..29f488983 100644
--- a/host/include/uhd/utils/graph_utils.hpp
+++ b/host/include/uhd/utils/graph_utils.hpp
@@ -63,6 +63,10 @@ std::vector<graph_edge_t> UHD_API get_block_chain(const rfnoc_graph::sptr graph,
* \param src_port Block port where the path starts
* \param dst_blk Destination block's ID
* \param dst_port Block port where the path ends
+ * \param skip_property_propagation Declare back-edge
+ * (see also uhd::rfnoc::rfnoc_graph::connect())
+ * If true, it will declare only the first
+ * connection in this chain as a back-edge.
*
* \return The edge list representing the data path requested
*/
@@ -70,6 +74,7 @@ std::vector<graph_edge_t> UHD_API connect_through_blocks(rfnoc_graph::sptr graph
const block_id_t src_blk,
const size_t src_port,
const block_id_t dst_blk,
- const size_t dst_port);
+ const size_t dst_port,
+ const bool skip_property_propagation = false);
}} // namespace uhd::rfnoc
diff --git a/host/lib/utils/graph_utils.cpp b/host/lib/utils/graph_utils.cpp
index 89df30e15..aeb71b091 100644
--- a/host/lib/utils/graph_utils.cpp
+++ b/host/lib/utils/graph_utils.cpp
@@ -87,7 +87,8 @@ std::vector<graph_edge_t> connect_through_blocks(rfnoc_graph::sptr graph,
const block_id_t src_blk,
const size_t src_port,
const block_id_t dst_blk,
- const size_t dst_port)
+ const size_t dst_port,
+ const bool skip_property_propagation)
{
// First, create a chain from the source block to a stream endpoint
auto block_chain = get_block_chain(graph, src_blk, src_port, true);
@@ -136,6 +137,7 @@ std::vector<graph_edge_t> connect_through_blocks(rfnoc_graph::sptr graph,
std::string sep_to_dst_id;
size_t sep_to_dst_port = 0;
bool has_sep_to_dst_connection = false;
+ bool skip_pp = skip_property_propagation;
for (auto edge : block_chain) {
if (uhd::rfnoc::block_id_t(edge.dst_blockid).match(uhd::rfnoc::NODE_ID_SEP)) {
@@ -149,11 +151,13 @@ std::vector<graph_edge_t> connect_through_blocks(rfnoc_graph::sptr graph,
sep_to_dst_port = edge.dst_port;
} else {
graph->connect(
- edge.src_blockid, edge.src_port, edge.dst_blockid, edge.dst_port);
+ edge.src_blockid, edge.src_port, edge.dst_blockid, edge.dst_port, skip_pp);
+ skip_pp = false;
}
}
if (has_src_to_sep_connection && has_sep_to_dst_connection) {
- graph->connect(src_to_sep_id, src_to_sep_port, sep_to_dst_id, sep_to_dst_port);
+ graph->connect(
+ src_to_sep_id, src_to_sep_port, sep_to_dst_id, sep_to_dst_port, skip_pp);
} else if (has_src_to_sep_connection != has_sep_to_dst_connection) {
const std::string err_msg = "Incomplete path. Only one SEP edge found.";
UHD_LOG_TRACE("GRAPH_UTILS", err_msg);