From 20b71a5fd76f1e183cc33f7f59b70beb99ca7e8e Mon Sep 17 00:00:00 2001 From: michael-west Date: Tue, 18 Dec 2018 17:35:46 -0800 Subject: RFNoC: Fix graph traversal - Allows different TX sample rates on separate channels - Prevents stream commands from being issued on wrong ports - Prevents some receive timeout errors --- host/lib/rfnoc/source_block_ctrl_base.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'host/lib/rfnoc/source_block_ctrl_base.cpp') diff --git a/host/lib/rfnoc/source_block_ctrl_base.cpp b/host/lib/rfnoc/source_block_ctrl_base.cpp index 0f1c31e4f..364aa01c6 100644 --- a/host/lib/rfnoc/source_block_ctrl_base.cpp +++ b/host/lib/rfnoc/source_block_ctrl_base.cpp @@ -29,9 +29,22 @@ void source_block_ctrl_base::issue_stream_cmd( } for(const node_ctrl_base::node_map_pair_t upstream_node: _upstream_nodes) { + // FIXME: Need proper mapping from input port to output port + // The code below assumes the input port and output port are the same + // if the number of upstream and downstream connections are the same. + // The stream command is limited to only that port to prevent issuing + // it on the wrong block and port. + if (_upstream_nodes.size() == _downstream_nodes.size() and + upstream_node.first != chan) + { + continue; + } source_node_ctrl::sptr this_upstream_block_ctrl = boost::dynamic_pointer_cast(upstream_node.second.lock()); - this_upstream_block_ctrl->issue_stream_cmd(stream_cmd, chan); + if (this_upstream_block_ctrl) + { + this_upstream_block_ctrl->issue_stream_cmd(stream_cmd, get_upstream_port(chan)); + } } } -- cgit v1.2.3