#include <uhd/rfnoc/fft_block_control.hpp>
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_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 |
![]() | |
~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 |
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. More... | |
uhd::property_tree::sptr & | get_tree () |
Return a reference to this block's subtree (non-const version) More... | |
std::shared_ptr< mb_controller > | get_mb_controller () |
![]() | |
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) |
![]() | |
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. More... | |
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. More... | |
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 const size_t | ANY_PORT = size_t(~0) |
Additional Inherited Members | |
![]() | |
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... | |
![]() | |
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 > > |
![]() | |
using | prop_ptrs_t = std::vector< property_base_t * > |
![]() | |
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 () |
![]() | |
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) |
![]() | |
void | update_reg_iface (register_iface::sptr new_iface=nullptr) |
![]() | |
static dirtifier_t | ALWAYS_DIRTY |
A dirtifyer object, useful for properties that always need updating. More... | |
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.
|
pure virtual |
Get the bypass mode of the FFT
Returns the current bypass mode.
|
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.
cp_lengths | The cyclic prefix lengths to be written to the list |
|
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.
cp_lengths | The cyclic prefix lengths to be written to the list |
|
pure virtual |
Get the FFT direction
Returns the current direction of the FFT.
|
pure virtual |
Get the length of the FFT
Returns the current length of the FFT.
|
pure virtual |
Get the format of the returned FFT output data
Returns the current output format of the FFT data.
|
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.
|
pure virtual |
Get the maximum supported cyclic prefix length
Returns the maximum supported cyclic prefix length.
|
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.
|
pure virtual |
Get the maximum supported length of the FFT
Returns the maximum supported length of the FFT.
|
pure virtual |
Get the scaling schedule for the FFT block
Returns the current scaling schedule for the FFT block.
|
pure virtual |
Get the shift configuration of the output FFT data
Returns the current shift configuration of the output FFT data.
|
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.
bypass | FFT bypass moe |
|
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]
cp_lengths | The cyclic prefix lengths to be written to the list |
|
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]
cp_lengths | The cyclic prefix lengths to be written to the list |
|
pure virtual |
Set the FFT direction
Sets the direction of the FFT, either forward (FORWARD) or inverse (REVERSE).
direction | FFT direction |
|
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.
length | Desired FFT length |
|
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)
magnitude | Format of the returned FFT output data |
|
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 | Scaling schedule for the FFT block |
|
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 | Desired scaling factor |
|
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).
shift | Configuration for shifting FFT output data |
|
static |
|
static |
|
static |
|
static |
Register addresses.
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
Register addresses of the FFT block version 1.
|
static |
|
static |