USRP Hardware Driver and USRP Manual  Version: 4.6.0.0
UHD and USRP Manual
uhd::rfnoc::duc_block_control Class Referenceabstract

#include <uhd/rfnoc/duc_block_control.hpp>

Inheritance diagram for uhd::rfnoc::duc_block_control:
uhd::rfnoc::noc_block_base uhd::rfnoc::node_t uhd::rfnoc::register_iface_holder

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 double get_output_rate (const size_t chan) const =0
 
virtual void set_output_rate (const double rate, const size_t chan)=0
 
virtual uhd::meta_range_t get_input_rates (const size_t chan) const =0
 
virtual double set_input_rate (const double rate, const size_t chan)=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_tget_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::sptrget_tree () const
 Return a reference to this block's subtree. More...
 
uhd::property_tree::sptrget_tree ()
 Return a reference to this block's subtree (non-const version) More...
 
std::shared_ptr< mb_controllerget_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_ifaceregs ()
 

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_INTERP
 
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_INTERP_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  forwarding_policy_t {
  forwarding_policy_t::ONE_TO_ONE, forwarding_policy_t::ONE_TO_FAN, forwarding_policy_t::ONE_TO_ALL_IN, forwarding_policy_t::ONE_TO_ALL_OUT,
  forwarding_policy_t::ONE_TO_ALL, forwarding_policy_t::DROP, forwarding_policy_t::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 = 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::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)
 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_tget_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. More...
 

Detailed Description

DUC Block Control Class

The DUC Block is a multi-channel digital upconverter (DUC) with built-in frequency shift. The number of channels as well as the maximum interpolation 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.
  • interp: The interpolation value

Member Function Documentation

◆ get_freq()

virtual double uhd::rfnoc::duc_block_control::get_freq ( const size_t  chan) const
pure virtual

Return the current DDS frequency

Returns
The current frequency of the DDS

◆ get_frequency_range()

virtual uhd::freq_range_t uhd::rfnoc::duc_block_control::get_frequency_range ( const size_t  chan) const
pure virtual

Return the range of frequencies that chan can be set to.

The frequency shifter is the last component in the DUC, and thus can shift frequencies (digitally) between -get_output_rate()/2 and +get_output_rate()/2.

The returned values are in Hz (not normalized frequencies) and are valid inputs for set_freq().

Returns
The range of frequencies that the DUC can shift the input by

◆ get_input_rate()

virtual double uhd::rfnoc::duc_block_control::get_input_rate ( const size_t  chan) const
pure virtual

Return the sampling rate at this block's input

Parameters
chanThe channel for which the rate is being queried
Returns
the sampling rate at this block's input

◆ get_input_rates()

virtual uhd::meta_range_t uhd::rfnoc::duc_block_control::get_input_rates ( const size_t  chan) const
pure virtual

Return a range of valid input rates, based on the current output rate

Note the return value is only valid as long as the output rate does not change.

◆ get_output_rate()

virtual double uhd::rfnoc::duc_block_control::get_output_rate ( const size_t  chan) const
pure virtual

Return the sampling rate at this block's output

This is equivalent to calling get_input_rate() multiplied by the interpolation

Parameters
chanThe channel for which the rate is being queried
Returns
the sampling rate at this block's input

◆ set_freq()

virtual double uhd::rfnoc::duc_block_control::set_freq ( const double  freq,
const size_t  chan,
const boost::optional< uhd::time_spec_t time = boost::none 
)
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.

Parameters
freqThe frequency shift in Hz
chanThe channel to which this change shall be applied
timeWhen to apply the new frequency
Returns
The coerced, actual current frequency of the DDS

◆ set_input_rate()

virtual double uhd::rfnoc::duc_block_control::set_input_rate ( const double  rate,
const size_t  chan 
)
pure virtual

Attempt to set the input rate of this block

This will set the interpolation such that the output rate is untouched, and that the output rate divided by the new interpolation is as close as possible to the requested rate.

Parameters
rateThe requested rate
chanThe channel for which the rate is being queried
Returns
the coerced sampling rate at this block's output

◆ set_output_rate()

virtual void uhd::rfnoc::duc_block_control::set_output_rate ( const double  rate,
const size_t  chan 
)
pure virtual

Manually set the sampling rate at this block's output

Parameters
rateThe requested rate
chanThe channel for which the rate is being set

Member Data Documentation

◆ MAJOR_COMPAT

const uint16_t uhd::rfnoc::duc_block_control::MAJOR_COMPAT
static

◆ MINOR_COMPAT

const uint16_t uhd::rfnoc::duc_block_control::MINOR_COMPAT
static

◆ RB_CIC_MAX_INTERP

const uint32_t uhd::rfnoc::duc_block_control::RB_CIC_MAX_INTERP
static

◆ RB_COMPAT_NUM

const uint32_t uhd::rfnoc::duc_block_control::RB_COMPAT_NUM
static

◆ RB_NUM_HB

const uint32_t uhd::rfnoc::duc_block_control::RB_NUM_HB
static

◆ SR_CONFIG_ADDR

const uint32_t uhd::rfnoc::duc_block_control::SR_CONFIG_ADDR
static

◆ SR_FREQ_ADDR

const uint32_t uhd::rfnoc::duc_block_control::SR_FREQ_ADDR
static

◆ SR_INTERP_ADDR

const uint32_t uhd::rfnoc::duc_block_control::SR_INTERP_ADDR
static

◆ SR_M_ADDR

const uint32_t uhd::rfnoc::duc_block_control::SR_M_ADDR
static

◆ SR_N_ADDR

const uint32_t uhd::rfnoc::duc_block_control::SR_N_ADDR
static

◆ SR_SCALE_IQ_ADDR

const uint32_t uhd::rfnoc::duc_block_control::SR_SCALE_IQ_ADDR
static

◆ SR_TIME_INCR_ADDR

const uint32_t uhd::rfnoc::duc_block_control::SR_TIME_INCR_ADDR
static

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