Loading...
Searching...
No Matches
uhd::rfnoc::split_stream_block_control Class Reference
RFNoC » RFNoC Blocks

`#include <uhd/rfnoc/split_stream_block_control.hpp>`

Inheritance diagram for uhd::rfnoc::split_stream_block_control:
[legend]
Collaboration diagram for uhd::rfnoc::split_stream_block_control:
[legend]

## Additional Inherited Members

Public Types inherited from uhd::rfnoc::noc_block_base
using | sptr = std::shared_ptr<noc_block_base>
using | make_args_ptr = std::unique_ptr<make_args_t>
| Opaque pointer to the constructor arguments.
Public Types inherited from uhd::rfnoc::node_t
enum class | forwarding_policy_t { ONE_TO_ONE , ONE_TO_FAN , ONE_TO_ALL_IN , ONE_TO_ALL_OUT , ONE_TO_ALL , DROP , USE_MAP }
| Types of property/action forwarding for those not defined by the block itself. More...
using | resolver_fn_t = std::function<void(void)>
using | resolve_callback_t = std::function<void(void)>
using | graph_mutex_callback_t = std::function<std::recursive_mutex&(void)>
using | action_handler_t
using | forwarding_map_t
Public Member Functions inherited from uhd::rfnoc::noc_block_base
| ~noc_block_base () override
std::string | get_unique_id () const override
| Unique ID for an RFNoC block is its block ID.
size_t | get_num_input_ports () const override
size_t | get_num_output_ports () const override
noc_id_t | get_noc_id () const
const block_id_t & | get_block_id () const
double | get_tick_rate () const
size_t | get_mtu (const res_source_info &edge)
size_t | get_chdr_hdr_len (const bool account_for_ts=true) const
size_t | get_max_payload_size (const res_source_info &edge, const bool account_for_ts=true)
uhd::device_addr_t | get_block_args () const
uhd::property_tree::sptr & | get_tree () const
| Return a reference to this block's subtree.
uhd::property_tree::sptr & | get_tree ()
| Return a reference to this block's subtree (non-const version).
std::shared_ptr< mb_controller > | get_mb_controller ()
Public Member Functions inherited from uhd::rfnoc::node_t
| node_t ()
virtual | ~node_t ()
std::vector< std::string > | get_property_ids () const
template<typename prop_data_t>
void | set_property (const std::string &id, const prop_data_t &val, const size_t instance=0)
void | set_properties (const uhd::device_addr_t &props, const size_t instance=0)
template<typename prop_data_t>
const prop_data_t & | get_property (const std::string &id, const size_t instance=0)
virtual void | set_command_time (uhd::time_spec_t time, const size_t instance)
virtual uhd::time_spec_t | get_command_time (const size_t instance) const
virtual void | clear_command_time (const size_t instance)
Public Member Functions inherited from uhd::rfnoc::register_iface_holder
| register_iface_holder (register_iface::sptr reg)
virtual | ~register_iface_holder ()=default
register_iface & | regs ()
Static Public Attributes inherited from uhd::rfnoc::node_t
static const size_t | ANY_PORT = size_t(~0)
Protected Types inherited from uhd::rfnoc::node_t
using | prop_ptrs_t = std::vector<property_base_t*>
Protected Member Functions inherited from uhd::rfnoc::noc_block_base
| noc_block_base (make_args_ptr make_args)
void | set_num_input_ports (const size_t num_ports)
void | set_num_output_ports (const size_t num_ports)
void | set_tick_rate (const double tick_rate)
void | set_mtu_forwarding_policy (const forwarding_policy_t policy)
void | set_mtu (const res_source_info &edge, const size_t new_mtu)
property_base_t * | get_mtu_prop_ref (const res_source_info &edge)
virtual void | deinit ()
Protected Member Functions inherited from uhd::rfnoc::node_t
void | register_property (property_base_t *prop, resolve_callback_t &&clean_callback=nullptr)
void | add_property_resolver (prop_ptrs_t &&inputs, prop_ptrs_t &&outputs, resolver_fn_t &&resolver_fn)
void | set_prop_forwarding_policy (forwarding_policy_t policy, const std::string &prop_id="")
void | set_prop_forwarding_map (const forwarding_map_t &map)
template<typename prop_data_t>
void | set_property (const std::string &id, const prop_data_t &val, const res_source_info &src_info)
template<typename prop_data_t>
const prop_data_t & | get_property (const std::string &id, const res_source_info &src_info)
void | register_action_handler (const std::string &id, action_handler_t &&handler)
void | set_action_forwarding_policy (forwarding_policy_t policy, const std::string &action_key="")
void | set_action_forwarding_map (const forwarding_map_t &map)
void | post_action (const res_source_info &edge_info, action_info::sptr action)
virtual bool | check_topology (const std::vector< size_t > &connected_inputs, const std::vector< size_t > &connected_outputs)
Protected Member Functions inherited from uhd::rfnoc::register_iface_holder
void | update_reg_iface (register_iface::sptr new_iface=nullptr)
Static Protected Attributes inherited from uhd::rfnoc::node_t
static dirtifier_t | ALWAYS_DIRTY
| A dirtifyer object, useful for properties that always need updating.

## Detailed Description

Split Stream Block Control Class

The Split Stream Block is an RFNoC block that takes in a single CHDR stream and duplicates it, creating a number of output streams for each input stream. The number of streams is defined by the NUM_PORTS parameter used to instantiate the RFNoC block in the image, while the number of output branches is defined by the NUM_BRANCH parameter. In software, this corresponds to an RFNoC block having NUM_PORTS input ports and NUM_PORTS * NUM_BRANCH output ports.

Given the following example of a split stream RFNoC block with NUM_PORTS = 2 and NUM_BRANCH = 3, the input streams map to output branches and streams as follows. The number located at each input and output indicates the port number corresponding to that stream and branch:

                 +----------+
    Stream A --->|0        0|---> Stream A } Branch 0
    Stream B --->|1        1|---> Stream B
                 |         2|---> Stream A } Branch 1
                 |         3|---> Stream B
                 |         4|---> Stream A } Branch 2
                 |         5|---> Stream B
                 +----------+

In other words, the port number corresponding to stream S of branch B is given by B * (num_input_ports) + S.

# Property Propagation and Action Forwarding Behavior

The default behavior of the split stream block controller is to propagate properties received on a particular stream to all branches of that stream. For example, if a property is received at branch 0, stream B in the example above, that property will be propagated to stream B in branches 1 and 2 AND to stream B in the input. The property will not propagate across streams.

For actions, an action received on a particular stream is forwarded to that stream on all opposite branches. If in the example above, an action is received at branch 2, stream A, it will be forwarded to stream A on the input side. Similarly, if an action is received on stream B of the input, it will be forwarded to stream B on branches 0, 1, AND 2.

The documentation for this class was generated from the following file:

- split_stream_block_control.hpp