USRP Hardware Driver and USRP Manual: uhd::rfnoc::fft_block_control Class Reference

| USRP Hardware Driver and USRP Manual Version: 4.9.0.makepkg-0-g9ec1f582 UHD and USRP Manual |

Loading...
Searching...
No Matches
uhd::rfnoc::fft_block_control Class Referenceabstract
RFNoC » RFNoC Blocks

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

Inheritance diagram for uhd::rfnoc::fft_block_control:

## Public Member Functions
virtual void | set_direction (const fft_direction direction)=0
virtual fft_direction | get_direction () const =0
virtual void | set_magnitude (const fft_magnitude magnitude)=0
virtual fft_magnitude | get_magnitude () const =0
virtual void | set_shift_config (const fft_shift shift)=0
virtual fft_shift | get_shift_config () const =0
virtual void | set_scaling_factor (const double factor)=0
virtual void | set_scaling (const uint32_t scaling)=0
virtual uint32_t | get_scaling () const =0
virtual void | set_length (const uint32_t length)=0
virtual uint32_t | get_length () const =0
virtual void | set_bypass_mode (const bool bypass)=0
virtual bool | get_bypass_mode () const =0
virtual uint32_t | get_nipc () const =0
virtual uint32_t | get_max_length () const =0
virtual uint32_t | get_max_cp_length () const =0
virtual uint32_t | get_max_cp_removal_list_length () const =0
virtual uint32_t | get_max_cp_insertion_list_length () const =0
virtual void | set_cp_insertion_list (const std::vector< uint32_t > cp_lengths)=0
virtual std::vector< uint32_t > | get_cp_insertion_list () const =0
virtual void | set_cp_removal_list (const std::vector< uint32_t > cp_lengths)=0
virtual std::vector< uint32_t > | get_cp_removal_list () const =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.
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
static const uint32_t | REG_COMPAT_ADDR
| Register addresses.
static const uint32_t | REG_PORT_CONFIG_ADDR
static const uint32_t | REG_CAPABILITIES_ADDR
static const uint32_t | REG_CAPABILITIES2_ADDR
static const uint32_t | REG_RESET_ADDR
static const uint32_t | REG_LENGTH_LOG2_ADDR
static const uint32_t | REG_SCALING_ADDR
static const uint32_t | REG_DIRECTION_ADDR
static const uint32_t | REG_CP_INS_LEN_ADDR
static const uint32_t | REG_CP_INS_LIST_LOAD_ADDR
static const uint32_t | REG_CP_INS_LIST_CLR_ADDR
static const uint32_t | REG_CP_INS_LIST_OCC_ADDR
static const uint32_t | REG_CP_REM_LEN_ADDR
static const uint32_t | REG_CP_REM_LIST_LOAD_ADDR
static const uint32_t | REG_CP_REM_LIST_CLR_ADDR
static const uint32_t | REG_CP_REM_LIST_OCC_ADDR
static const uint32_t | REG_OVERFLOW_ADDR
static const uint32_t | REG_BYPASS_ADDR
static const uint32_t | REG_ORDER_ADDR
static const uint32_t | REG_MAGNITUDE_ADDR
static const uint32_t | REG_RESET_ADDR_V1
| Register addresses of the FFT block version 1.
static const uint32_t | REG_LENGTH_LOG2_ADDR_V1
static const uint32_t | REG_MAGNITUDE_ADDR_V1
static const uint32_t | REG_DIRECTION_ADDR_V1
static const uint32_t | REG_SCALING_ADDR_V1
static const uint32_t | REG_ORDER_ADDR_V1
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.
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
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

FFT Block (with Cyclic prefix insertion and removal) Control Class

The FFT block is an RFNoC block that accepts signed complex 16-bit data at its input and computes the forward or reverse FFT of the input data, outputting signed complex 16-bit data at its output.

The FFT length is configured via the length parameter, up to a maximum which depends on the instantiation on the FPGA. Use the function get_max_fft_length to determine the maximum supported FFT length.

The length will be coerced to the closest power of two which is smaller than length. The block will output packets of the same length in the desired format as configured via the API.

The block can be configured to add cyclic prefixes (typically when performing an inverse FFT, i.e. repeating a part of the generated time domain signal) or to remove cyclic prefixes (typically when performing a forward FFT, i.e. removing a part of the input time domain signal). This feature makes this block suitable for OFDM (de-)modulation.

## Member Function Documentation

## ◆ get_bypass_mode()

virtual bool uhd::rfnoc::fft_block_control::get_bypass_mode | ( |  | ) | const
| pure virtual

Get the bypass mode of the FFT

Returns the current bypass mode.

Returns
  Current FFT bypass mode

## ◆ get_cp_insertion_list()

virtual std::vector< uint32_t > uhd::rfnoc::fft_block_control::get_cp_insertion_list | ( |  | ) | const
| pure virtual

Gets the values from the cyclic prefix insertion list.

Gets values to the cyclic prefix insertion list. After initialization, no CP insertion values are configured. Use the function set_cp_insertion_list to set the values.

Parameters

  cp_lengths | The cyclic prefix lengths to be written to the list

## ◆ get_cp_removal_list()

virtual std::vector< uint32_t > uhd::rfnoc::fft_block_control::get_cp_removal_list | ( |  | ) | const
| pure virtual

Gets the values from the cyclic prefix removal list.

Gets values to the cyclic prefix removal list. After initialization, no CP removal values are configured. Use the function set_cp_removal_list to set the values.

Parameters

  cp_lengths | The cyclic prefix lengths to be written to the list

## ◆ get_direction()

virtual fft_direction uhd::rfnoc::fft_block_control::get_direction | ( |  | ) | const
| pure virtual

Get the FFT direction

Returns the current direction of the FFT.

Returns
  FFT direction

## ◆ get_length()

virtual uint32_t uhd::rfnoc::fft_block_control::get_length | ( |  | ) | const
| pure virtual

Get the length of the FFT

Returns the current length of the FFT.

Returns
  Current FFT length

## ◆ get_magnitude()

virtual fft_magnitude uhd::rfnoc::fft_block_control::get_magnitude | ( |  | ) | const
| pure virtual

Get the format of the returned FFT output data

Returns the current output format of the FFT data.

Returns
  Format of the returned FFT output data

## ◆ get_max_cp_insertion_list_length()

virtual uint32_t uhd::rfnoc::fft_block_control::get_max_cp_insertion_list_length | ( |  | ) | const
| pure virtual

Get the maximum supported number of values that can be written to the cyclic prefix insertion list

Returns the maximum supported number of values that can be written to the cyclic prefix insertion list.

Returns
  Maximum number of values for the cyclic prefix insertion list

## ◆ get_max_cp_length()

virtual uint32_t uhd::rfnoc::fft_block_control::get_max_cp_length | ( |  | ) | const
| pure virtual

Get the maximum supported cyclic prefix length

Returns the maximum supported cyclic prefix length.

Returns
  Maximum supported cyclic prefix length

## ◆ get_max_cp_removal_list_length()

virtual uint32_t uhd::rfnoc::fft_block_control::get_max_cp_removal_list_length | ( |  | ) | const
| pure virtual

Get the maximum supported number of values that can be written to the cyclic prefix removal list

Returns the maximum supported number of values that can be written to the cyclic prefix removal list.

Returns
  Maximum number of values for the cyclic prefix removal list

## ◆ get_max_length()

virtual uint32_t uhd::rfnoc::fft_block_control::get_max_length | ( |  | ) | const
| pure virtual

Get the maximum supported length of the FFT

Returns the maximum supported length of the FFT.

Returns
  Maximum supported FFT length

## ◆ get_nipc()

virtual uint32_t uhd::rfnoc::fft_block_control::get_nipc | ( |  | ) | const
| pure virtual

Get the number of items per clock cycle (NIPC)

Returns the number of items per clock cycle (NIPC) that this block is configured to process. Packet sizes and cyclic prefix lengths must a multiple of this value.

Returns
  NIPC

## ◆ get_scaling()

virtual uint32_t uhd::rfnoc::fft_block_control::get_scaling | ( |  | ) | const
| pure virtual

Get the scaling schedule for the FFT block

Returns the current scaling schedule for the FFT block.

Returns
  Scaling schedule for the FFT block

## ◆ get_shift_config()

virtual fft_shift uhd::rfnoc::fft_block_control::get_shift_config | ( |  | ) | const
| pure virtual

Get the shift configuration of the output FFT data

Returns the current shift configuration of the output FFT data.

Returns
  Shift configuration of the output FFT data

## ◆ set_bypass_mode()

virtual void uhd::rfnoc::fft_block_control::set_bypass_mode | ( | const bool | bypass | ) |
| pure virtual

Set the bypass mode of the FFT

Enable FFT bypass mode. Set true to enable, false to disable. When enabled, the data is passed through without any FFT processing. Note that cyclic prefix insertion will not work in bypass mode, because insertion is handled by the FFT core, but cyclic prefix removal will work.

Parameters

  bypass | FFT bypass moe

## ◆ set_cp_insertion_list()

virtual void uhd::rfnoc::fft_block_control::set_cp_insertion_list | ( | const std::vector< uint32_t > | cp_lengths | ) |
| pure virtual

Load values to the cyclic prefix insertion list.

Loads values to the cyclic prefix insertion list. Each value represents the length of a cyclic prefix that is prepended to the output of the (typically inverse) FFT operation (typically the time domain signal). If the length of the cyclic prefix insertion list is m, then the cyclic prefix length that is added to the output signal of symbol n is:

cp_length[n] = cp_length[n mod m]

Parameters

  cp_lengths | The cyclic prefix lengths to be written to the list

## ◆ set_cp_removal_list()

virtual void uhd::rfnoc::fft_block_control::set_cp_removal_list | ( | const std::vector< uint32_t > | cp_lengths | ) |
| pure virtual

Load values to the cyclic prefix removal list.

Loads values to the cyclic prefix removal list. Each value represents the length of a cyclic prefix that is removed from the input signal (typically the time domain signal) before performing the (typically forward) FFT operation. If the length of the cyclic prefix removal list is m, then the cyclic prefix length that is removed from the input signal of symbol n is:

cp_length[n] = cp_length[n mod m]

Parameters

  cp_lengths | The cyclic prefix lengths to be written to the list

## ◆ set_direction()

virtual void uhd::rfnoc::fft_block_control::set_direction | ( | const fft_direction | direction | ) |
| pure virtual

Set the FFT direction

Sets the direction of the FFT, either forward (FORWARD) or inverse (REVERSE).

Parameters

  direction | FFT direction

## ◆ set_length()

virtual void uhd::rfnoc::fft_block_control::set_length | ( | const uint32_t | length | ) |
| pure virtual

Set the length of the FFT

Sets the length of the FFT in number of samples. Note that the FFT IP requires a power-of-two number of samples; the incoming value will be coerced to the closest smaller power of two.

Parameters

  length | Desired FFT length

## ◆ set_magnitude()

virtual void uhd::rfnoc::fft_block_control::set_magnitude | ( | const fft_magnitude | magnitude | ) |
| pure virtual

Set the format of the returned FFT output data

Sets the format in which the FFT output data is returned. The following formats are supported:

    * amplitude/phase data (COMPLEX)
    * magnitude data (MAGNITUDE)
    * mag-squared data (MAGNITUDE_SQUARED)

Parameters

  magnitude | Format of the returned FFT output data

## ◆ set_scaling()

virtual void uhd::rfnoc::fft_block_control::set_scaling | ( | const uint32_t | scaling | ) |
| pure virtual

Set the scaling schedule for the FFT block

Sets the scaling for each stage of the FFT. This value maps directly to the scale schedule field in the configuration channel data that is passed to the Xilinx AXI FFT IP. For more information on the format of this data, see Xilinx document PG109, Fast Fourier Transform LogiCORE IP Product Guide.

Examples:

- scaling = 0b000000000000 -> no scaling
- scaling = 0b000000000001 -> scale by 2 in the first FFT stage
- scaling = 0b000000001010 -> scale by 4 in both the first and the second FFT stage
- scaling = 0b000000011010 -> scale by 4 in both the first and the second FFT stage and by 2 in the third FFT stage

Parameters

  scaling | Scaling schedule for the FFT block

## ◆ set_scaling_factor()

virtual void uhd::rfnoc::fft_block_control::set_scaling_factor | ( | const double | factor | ) |
| pure virtual

Set the scaling factor for the FFT block

This is a convenience function which can be used instead of set_scaling(). Based on the given factor, it automatically sets the scaling mask by evenly distributing the scaling across the active FFT stages

Examples:

- factor = 1.0 -> no scaling
- factor = 0.5 (1/2) -> the scaling will be set to 0b000000000001 -> scale by 2 in the first FFT stage
- factor = 0.0625 (1/16) -> the scaling will be set to 0b000000001010 -> scale by 4 in both the first and the second FFT stage
- factor = 0.03125 (1/32) -> the scaling will be set to 0b000000011010 -> scale by 4 in both the first and the second FFT stage and by 2 in the third FFT stage

Parameters

  factor | Desired scaling factor

## ◆ set_shift_config()

virtual void uhd::rfnoc::fft_block_control::set_shift_config | ( | const fft_shift | shift | ) |
| pure virtual

Set the shift configuration of the output FFT data

Sets how the FFT output data is shifted (to get the zero frequency bin to the center of the output data). The following output data shift configurations are supported:

    * Negative frequencies first, then positive frequencies (NORMAL)
    * Positive frequencies first, then negative frequencies (REVERSE)
    * Bypass the shift altogether, leaving the zero frequency bin
      returned first (NATURAL).
    * Bit-reversed order (BIT_REVERSE). This is typically the native
      order output by the FFT. In other words, selecting this mode may
      mean that the data from the FFT is not reordered. In this mode,
      the indices of the FFT are bit-reversed. For example, for a size
      16 FFT, instead of outputting bins in the order 0000, 0001, 0010,
      0011, etc., it outputs bins 0000, 1000, 0100, 1100, etc.

Parameters

  shift | Configuration for shifting FFT output data

## Member Data Documentation

## ◆ REG_BYPASS_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_BYPASS_ADDR
| static

## ◆ REG_CAPABILITIES2_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CAPABILITIES2_ADDR
| static

## ◆ REG_CAPABILITIES_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CAPABILITIES_ADDR
| static

## ◆ REG_COMPAT_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_COMPAT_ADDR
| static

Register addresses.

## ◆ REG_CP_INS_LEN_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CP_INS_LEN_ADDR
| static

## ◆ REG_CP_INS_LIST_CLR_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CP_INS_LIST_CLR_ADDR
| static

## ◆ REG_CP_INS_LIST_LOAD_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CP_INS_LIST_LOAD_ADDR
| static

## ◆ REG_CP_INS_LIST_OCC_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CP_INS_LIST_OCC_ADDR
| static

## ◆ REG_CP_REM_LEN_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CP_REM_LEN_ADDR
| static

## ◆ REG_CP_REM_LIST_CLR_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CP_REM_LIST_CLR_ADDR
| static

## ◆ REG_CP_REM_LIST_LOAD_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CP_REM_LIST_LOAD_ADDR
| static

## ◆ REG_CP_REM_LIST_OCC_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_CP_REM_LIST_OCC_ADDR
| static

## ◆ REG_DIRECTION_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_DIRECTION_ADDR
| static

## ◆ REG_DIRECTION_ADDR_V1

const uint32_t uhd::rfnoc::fft_block_control::REG_DIRECTION_ADDR_V1
| static

## ◆ REG_LENGTH_LOG2_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_LENGTH_LOG2_ADDR
| static

## ◆ REG_LENGTH_LOG2_ADDR_V1

const uint32_t uhd::rfnoc::fft_block_control::REG_LENGTH_LOG2_ADDR_V1
| static

## ◆ REG_MAGNITUDE_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_MAGNITUDE_ADDR
| static

## ◆ REG_MAGNITUDE_ADDR_V1

const uint32_t uhd::rfnoc::fft_block_control::REG_MAGNITUDE_ADDR_V1
| static

## ◆ REG_ORDER_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_ORDER_ADDR
| static

## ◆ REG_ORDER_ADDR_V1

const uint32_t uhd::rfnoc::fft_block_control::REG_ORDER_ADDR_V1
| static

## ◆ REG_OVERFLOW_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_OVERFLOW_ADDR
| static

## ◆ REG_PORT_CONFIG_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_PORT_CONFIG_ADDR
| static

## ◆ REG_RESET_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_RESET_ADDR
| static

## ◆ REG_RESET_ADDR_V1

const uint32_t uhd::rfnoc::fft_block_control::REG_RESET_ADDR_V1
| static

Register addresses of the FFT block version 1.

## ◆ REG_SCALING_ADDR

const uint32_t uhd::rfnoc::fft_block_control::REG_SCALING_ADDR
| static

## ◆ REG_SCALING_ADDR_V1

const uint32_t uhd::rfnoc::fft_block_control::REG_SCALING_ADDR_V1
| static

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

- fft_block_control.hpp