USRP Hardware Driver and USRP Manual  Version: 4.9.0.0
UHD and USRP Manual
fft_block_control.hpp
Go to the documentation of this file.
1 //
2 // Copyright 2024 Ettus Research, a National Instruments Brand
3 //
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 //
6 
7 #pragma once
8 
9 #include <uhd/config.hpp>
11 
12 namespace uhd { namespace rfnoc {
13 
15 enum class fft_direction { REVERSE, FORWARD };
17 
18 // Custom property keys
19 static const std::string PROP_KEY_MAGNITUDE = "magnitude";
20 static const std::string PROP_KEY_DIRECTION = "direction";
21 static const std::string PROP_KEY_LENGTH = "length";
22 static const std::string PROP_KEY_FFT_SCALING = "fft_scaling";
23 static const std::string PROP_KEY_FFT_SCALING_FACTOR = "fft_scaling_factor";
24 static const std::string PROP_KEY_SHIFT_CONFIG = "shift_config";
25 static const std::string PROP_KEY_BYPASS_MODE = "bypass_mode";
26 static const std::string PROP_KEY_CP_INSERTION_LIST = "cp_insertion_list";
27 static const std::string PROP_KEY_CP_REMOVAL_LIST = "cp_removal_list";
28 static const std::string PROP_KEY_NIPC = "nipc";
29 static const std::string PROP_KEY_MAX_LENGTH = "max_length";
30 static const std::string PROP_KEY_MAX_CP_LENGTH = "max_cp_length";
31 static const std::string PROP_KEY_MAX_CP_INSERTION_LIST_LENGTH =
32  "max_cp_insertion_list_length";
33 static const std::string PROP_KEY_MAX_CP_REMOVAL_LIST_LENGTH =
34  "max_cp_removal_list_length";
35 
59 {
60 public:
62 
63 
64  static const uint32_t REG_COMPAT_ADDR;
65  static const uint32_t REG_PORT_CONFIG_ADDR;
66  static const uint32_t REG_CAPABILITIES_ADDR;
67  static const uint32_t REG_CAPABILITIES2_ADDR;
68  static const uint32_t REG_RESET_ADDR;
69  static const uint32_t REG_LENGTH_LOG2_ADDR;
70  static const uint32_t REG_SCALING_ADDR;
71  static const uint32_t REG_DIRECTION_ADDR;
72  static const uint32_t REG_CP_INS_LEN_ADDR;
73  static const uint32_t REG_CP_INS_LIST_LOAD_ADDR;
74  static const uint32_t REG_CP_INS_LIST_CLR_ADDR;
75  static const uint32_t REG_CP_INS_LIST_OCC_ADDR;
76  static const uint32_t REG_CP_REM_LEN_ADDR;
77  static const uint32_t REG_CP_REM_LIST_LOAD_ADDR;
78  static const uint32_t REG_CP_REM_LIST_CLR_ADDR;
79  static const uint32_t REG_CP_REM_LIST_OCC_ADDR;
80  static const uint32_t REG_OVERFLOW_ADDR;
81  static const uint32_t REG_BYPASS_ADDR;
82  static const uint32_t REG_ORDER_ADDR;
83  static const uint32_t REG_MAGNITUDE_ADDR;
84 
86  static const uint32_t REG_RESET_ADDR_V1;
87  static const uint32_t REG_LENGTH_LOG2_ADDR_V1;
88  static const uint32_t REG_MAGNITUDE_ADDR_V1;
89  static const uint32_t REG_DIRECTION_ADDR_V1;
90  static const uint32_t REG_SCALING_ADDR_V1;
91  static const uint32_t REG_ORDER_ADDR_V1;
92 
100  virtual void set_direction(const fft_direction direction) = 0;
101 
108  virtual fft_direction get_direction() const = 0;
109 
121  virtual void set_magnitude(const fft_magnitude magnitude) = 0;
122 
129  virtual fft_magnitude get_magnitude() const = 0;
130 
150  virtual void set_shift_config(const fft_shift shift) = 0;
151 
158  virtual fft_shift get_shift_config() const = 0;
159 
179  virtual void set_scaling_factor(const double factor) = 0;
180 
199  virtual void set_scaling(const uint32_t scaling) = 0;
200 
207  virtual uint32_t get_scaling() const = 0;
208 
217  virtual void set_length(const uint32_t length) = 0;
218 
225  virtual uint32_t get_length() const = 0;
226 
236  virtual void set_bypass_mode(const bool bypass) = 0;
237 
244  virtual bool get_bypass_mode() const = 0;
245 
254  virtual uint32_t get_nipc() const = 0;
255 
262  virtual uint32_t get_max_length() const = 0;
263 
270  virtual uint32_t get_max_cp_length() const = 0;
271 
280  virtual uint32_t get_max_cp_removal_list_length() const = 0;
281 
290  virtual uint32_t get_max_cp_insertion_list_length() const = 0;
291 
304  virtual void set_cp_insertion_list(const std::vector<uint32_t> cp_lengths) = 0;
305 
314  virtual std::vector<uint32_t> get_cp_insertion_list() const = 0;
315 
329  virtual void set_cp_removal_list(const std::vector<uint32_t> cp_lengths) = 0;
330 
339  virtual std::vector<uint32_t> get_cp_removal_list() const = 0;
340 };
341 
342 }} // namespace uhd::rfnoc
uhd::soft_reg_field::shift
UHD_INLINE size_t shift(const soft_reg_field_t field)
Definition: soft_register.hpp:80
uhd::rfnoc::fft_magnitude::MAGNITUDE
@ MAGNITUDE
uhd::rfnoc::fft_block_control
Definition: fft_block_control.hpp:58
uhd::rfnoc::fft_direction::FORWARD
@ FORWARD
config.hpp
uhd::rfnoc::noc_block_base
Definition: noc_block_base.hpp:42
uhd::rfnoc::fft_shift
fft_shift
Definition: fft_block_control.hpp:14
uhd::rfnoc::fft_direction::REVERSE
@ REVERSE
uhd::rfnoc::fft_magnitude::COMPLEX
@ COMPLEX
UHD_API
#define UHD_API
Definition: config.h:87
uhd::rfnoc::fft_magnitude
fft_magnitude
Definition: fft_block_control.hpp:16
uhd::rfnoc::fft_shift::NATURAL
@ NATURAL
uhd
Definition: build_info.hpp:12
uhd::rfnoc::fft_shift::NORMAL
@ NORMAL
noc_block_base.hpp
uhd::rfnoc::fft_magnitude::MAGNITUDE_SQUARED
@ MAGNITUDE_SQUARED
uhd::rfnoc::fft_shift::REVERSE
@ REVERSE
RFNOC_DECLARE_BLOCK
#define RFNOC_DECLARE_BLOCK(CLASS_NAME)
Definition: noc_block_base.hpp:22
uhd::rfnoc::fft_direction
fft_direction
Definition: fft_block_control.hpp:15
uhd::rfnoc::fft_shift::BIT_REVERSE
@ BIT_REVERSE