#include <uhd/rfnoc/ddc_block_control.hpp>
Public Member Functions | |
virtual double | set_freq (const double freq, const size_t chan, const boost::optional< uhd::time_spec_t > time=boost::none)=0 |
virtual double | get_freq (const size_t chan) const =0 |
virtual uhd::freq_range_t | get_frequency_range (const size_t chan) const =0 |
virtual double | get_input_rate (const size_t chan) const =0 |
virtual void | set_input_rate (const double rate, const size_t chan)=0 |
virtual double | get_output_rate (const size_t chan) const =0 |
virtual uhd::meta_range_t | get_output_rates (const size_t chan) const =0 |
virtual double | set_output_rate (const double rate, const size_t chan)=0 |
virtual void | issue_stream_cmd (const uhd::stream_cmd_t &stream_cmd, const size_t port)=0 |
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. More... | |
size_t | get_num_input_ports () const override |
Number of input ports. Note: This gets passed into this block from the. More... | |
size_t | get_num_output_ports () const override |
Number of output ports. Note: This gets passed outto this block from the. More... | |
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) |
uhd::device_addr_t | get_block_args () const |
uhd::property_tree::sptr & | get_tree () const |
Return a reference to this block's subtree. More... | |
uhd::property_tree::sptr & | get_tree () |
Return a reference to this block's subtree (non-const version) More... | |
Public Member Functions inherited from uhd::rfnoc::node_t | |
node_t () | |
virtual | ~node_t () |
virtual std::string | get_unique_id () const |
Return a unique identifier string for this node. In every RFNoC graph,. More... | |
virtual size_t | get_num_input_ports () const =0 |
virtual size_t | get_num_output_ports () const =0 |
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 | |
static const uint16_t | MAJOR_COMPAT |
static const uint16_t | MINOR_COMPAT |
static const uint32_t | RB_COMPAT_NUM |
static const uint32_t | RB_NUM_HB |
static const uint32_t | RB_CIC_MAX_DECIM |
static const uint32_t | SR_N_ADDR |
static const uint32_t | SR_M_ADDR |
static const uint32_t | SR_CONFIG_ADDR |
static const uint32_t | SR_FREQ_ADDR |
static const uint32_t | SR_SCALE_IQ_ADDR |
static const uint32_t | SR_DECIM_ADDR |
static const uint32_t | SR_MUX_ADDR |
static const uint32_t | SR_COEFFS_ADDR |
static const uint32_t | SR_TIME_INCR_ADDR |
Static Public Attributes inherited from uhd::rfnoc::node_t | |
static const size_t | ANY_PORT = size_t(~0) |
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. More... | |
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 | action_handler_t = std::function< void(const res_source_info &, action_info::sptr)> |
using | forwarding_map_t = std::unordered_map< res_source_info, std::vector< res_source_info > > |
Protected Types inherited from uhd::rfnoc::node_t | |
using | prop_ptrs_t = std::unordered_set< 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) |
Update number of input ports. More... | |
void | set_num_output_ports (const size_t num_ports) |
Update number of output ports. More... | |
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) |
std::shared_ptr< mb_controller > | get_mb_controller () |
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) |
virtual void | shutdown () |
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. More... | |
DDC Block Control Class
The DDC Block is a multi-channel digital downconverter (DDC) with built-in frequency shift. The number of channels as well as the maximum decimation is configurable in the FPGA, the block controller will read out registers to identify the capabilities of this block.
This block has two user properties per channel:
freq
: The frequency shift at the input. Note: A convenience method set_freq() is provided to set this property. It also takes care of the command time, which set_property() does not, and thus should be preferred.decim
: The decimation value
|
pure virtual |
Return the current DDS frequency
|
pure virtual |
Return the range of frequencies that chan
can be set to.
|
pure virtual |
Return the sampling rate at this block's input
chan | The channel for which the rate is being queried |
|
pure virtual |
Return the sampling rate at this block's output
This is equivalent to calling get_input_rate() divided by the decimation.
chan | The channel for which the rate is being queried |
|
pure virtual |
Return a range of valid output rates, based on the current input rate
Note the return value is only valid as long as the input rate does not change.
|
pure virtual |
Issue stream command: Instruct the RX part of the radio to send samples
stream_cmd | The actual stream command to execute |
port | The port for which the stream command is meant |
|
pure virtual |
Set the DDS frequency
This block will shift the signal at the input by this frequency before decimation. The frequency is given in Hz, it is not a relative frequency to the input sampling rate.
Note: When the rate is modified, the frequency is kept constant. Because the FPGA internally uses a relative phase increment, changing the input sampling rate will trigger a property propagation to recalculate the phase increment based off of this value.
This function will coerce the frequency to a valid value, and return the coerced value.
freq | The frequency shift in Hz |
chan | The channel to which this change shall be applied |
time | When to apply the new frequency |
|
pure virtual |
Manually set the sampling rate at this block's input
rate | The requested rate |
chan | The channel for which the rate is being set |
|
pure virtual |
Attempt to set the output rate of this block
This will set the decimation such that the input rate is untouched, and that the input rate divided by the new decimation is as close as possible to the requested rate
.
rate | The requested rate |
chan | The channel for which the rate is being queried |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |