aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/rfnoc/ddc_block_ctrl_impl.cpp9
-rw-r--r--host/lib/rfnoc/duc_block_ctrl_impl.cpp6
-rw-r--r--host/lib/rfnoc/source_block_ctrl_base.cpp15
3 files changed, 16 insertions, 14 deletions
diff --git a/host/lib/rfnoc/ddc_block_ctrl_impl.cpp b/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
index b70ae8959..7ea81e255 100644
--- a/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
+++ b/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
@@ -186,14 +186,7 @@ public:
stream_cmd.num_samps *= decimation;
}
- source_node_ctrl::sptr this_upstream_block_ctrl =
- boost::dynamic_pointer_cast<source_node_ctrl>(list_upstream_nodes().at(chan).lock());
- if (this_upstream_block_ctrl) {
- this_upstream_block_ctrl->issue_stream_cmd(
- stream_cmd,
- get_upstream_port(chan)
- );
- }
+ source_block_ctrl_base::issue_stream_cmd(stream_cmd, chan);
}
private:
diff --git a/host/lib/rfnoc/duc_block_ctrl_impl.cpp b/host/lib/rfnoc/duc_block_ctrl_impl.cpp
index cc9d30361..cf22ab7da 100644
--- a/host/lib/rfnoc/duc_block_ctrl_impl.cpp
+++ b/host/lib/rfnoc/duc_block_ctrl_impl.cpp
@@ -173,11 +173,7 @@ public:
stream_cmd.num_samps *= interpolation;
}
- for(const node_ctrl_base::node_map_pair_t upstream_node: list_upstream_nodes()) {
- source_node_ctrl::sptr this_upstream_block_ctrl =
- boost::dynamic_pointer_cast<source_node_ctrl>(upstream_node.second.lock());
- this_upstream_block_ctrl->issue_stream_cmd(stream_cmd, chan);
- }
+ source_block_ctrl_base::issue_stream_cmd(stream_cmd, chan);
}
private:
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<source_node_ctrl>(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));
+ }
}
}