USRP Hardware Driver and Device Manual  Version: 4.11.0.0-0-g0d7ed3b1
UHD and USRP Manual
ddc_block_control.hpp
Go to the documentation of this file.
1 //
2 // Copyright 2019 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 #include <uhd/types/ranges.hpp>
12 #include <boost/optional.hpp>
13 #include <optional>
14 
15 namespace uhd { namespace rfnoc {
16 
139 {
140 public:
142 
143 
144  struct reg_addrs_t
145  {
146  uint16_t major_compat;
147  uint16_t minor_compat;
148  // Readback addresses
149  uint32_t rb_num_hb;
150  uint32_t rb_cic_max_decim;
152  std::optional<uint32_t> rb_spc;
153  // Per-channel write addresses
154  uint32_t sr_decim_addr;
155  uint32_t sr_freq_addr;
156  uint32_t sr_scale_iq_addr;
157  std::optional<uint32_t> sr_n_addr;
158  std::optional<uint32_t> sr_m_addr;
159  uint32_t sr_time_incr_addr;
160  // Single-sample-only registers (not poked by block controller, exposed for
161  // external callers). std::nullopt for V1.
162  std::optional<uint32_t> sr_config_addr;
163  std::optional<uint32_t> sr_mux_addr;
164  std::optional<uint32_t> sr_coeffs_addr;
166  uint32_t reg_chan_offset;
167  };
168 
170  static const uint32_t RB_COMPAT_NUM;
172  static const reg_addrs_t REG_ADDRS_V0;
174  static const reg_addrs_t REG_ADDRS_V1;
175 
203  virtual double set_freq(const double freq,
204  const size_t chan,
205  const std::optional<uhd::time_spec_t> time = {}) = 0;
206 
207  double set_freq(const double freq, const size_t chan, const uhd::time_spec_t time)
208  {
209  return set_freq(freq, chan, std::make_optional(time));
210  }
211 
212  [[deprecated("Prefer std::optional over boost::optional.")]] double set_freq(
213  const double freq,
214  const size_t chan,
215  const boost::optional<uhd::time_spec_t> time)
216  {
217  return set_freq(
218  freq, chan, bool(time) ? std::make_optional(*time) : std::nullopt);
219  }
220 
225  virtual double get_freq(const size_t chan) const = 0;
226 
238  virtual uhd::freq_range_t get_frequency_range(const size_t chan) const = 0;
239 
245  virtual double get_input_rate(const size_t chan) const = 0;
246 
252  virtual void set_input_rate(const double rate, const size_t chan) = 0;
253 
261  virtual double get_output_rate(const size_t chan) const = 0;
262 
268  virtual uhd::meta_range_t get_output_rates(const size_t chan) const = 0;
269 
280  virtual double set_output_rate(const double rate, const size_t chan) = 0;
281 
282  /**************************************************************************
283  * Streaming-Related API Calls
284  *************************************************************************/
290  virtual void issue_stream_cmd(
291  const uhd::stream_cmd_t& stream_cmd, const size_t port) = 0;
292 };
293 
294 }} // namespace uhd::rfnoc
Definition: ddc_block_control.hpp:139
virtual double set_output_rate(const double rate, const size_t chan)=0
static const uint32_t RB_COMPAT_NUM
Compat register address (same across all register map versions)
Definition: ddc_block_control.hpp:170
virtual void issue_stream_cmd(const uhd::stream_cmd_t &stream_cmd, const size_t port)=0
virtual uhd::freq_range_t get_frequency_range(const size_t chan) const =0
virtual void set_input_rate(const double rate, const size_t chan)=0
virtual uhd::meta_range_t get_output_rates(const size_t chan) const =0
virtual double get_freq(const size_t chan) const =0
double set_freq(const double freq, const size_t chan, const uhd::time_spec_t time)
Definition: ddc_block_control.hpp:207
static const reg_addrs_t REG_ADDRS_V0
Register map for the single-sample (legacy) DDC (compat major 0)
Definition: ddc_block_control.hpp:172
virtual double set_freq(const double freq, const size_t chan, const std::optional< uhd::time_spec_t > time={})=0
double set_freq(const double freq, const size_t chan, const boost::optional< uhd::time_spec_t > time)
Definition: ddc_block_control.hpp:212
static const reg_addrs_t REG_ADDRS_V1
Register map for the multisample DDC (compat major 1)
Definition: ddc_block_control.hpp:174
virtual double get_input_rate(const size_t chan) const =0
virtual double get_output_rate(const size_t chan) const =0
Definition: noc_block_base.hpp:42
Definition: time_spec.hpp:31
#define UHD_API
Definition: config.h:87
Definition: build_info.hpp:12
#define RFNOC_DECLARE_BLOCK(CLASS_NAME)
Definition: noc_block_base.hpp:22
Definition: ranges.hpp:67
Version-specific register map for the DDC block.
Definition: ddc_block_control.hpp:145
uint32_t reg_chan_offset
Per-channel register bank stride in bytes (= 2^DDC_PORT_ADDR_W in the RTL)
Definition: ddc_block_control.hpp:166
uint32_t sr_time_incr_addr
Timestamp increment.
Definition: ddc_block_control.hpp:159
std::optional< uint32_t > sr_mux_addr
Definition: ddc_block_control.hpp:163
uint16_t minor_compat
Expected minor compat number for this version.
Definition: ddc_block_control.hpp:147
uint32_t rb_num_hb
Address of num-halfbands readback register.
Definition: ddc_block_control.hpp:149
uint32_t sr_freq_addr
DDS frequency word.
Definition: ddc_block_control.hpp:155
uint16_t major_compat
Expected major compat number for this version.
Definition: ddc_block_control.hpp:146
std::optional< uint32_t > sr_config_addr
Definition: ddc_block_control.hpp:162
uint32_t rb_cic_max_decim
Definition: ddc_block_control.hpp:150
std::optional< uint32_t > rb_spc
Address of samples-per-clock readback register; std::nullopt for V0.
Definition: ddc_block_control.hpp:152
std::optional< uint32_t > sr_n_addr
Rate N; std::nullopt for V1.
Definition: ddc_block_control.hpp:157
uint32_t sr_decim_addr
Decimation word.
Definition: ddc_block_control.hpp:154
uint32_t sr_scale_iq_addr
IQ scale factor.
Definition: ddc_block_control.hpp:156
std::optional< uint32_t > sr_coeffs_addr
Definition: ddc_block_control.hpp:164
std::optional< uint32_t > sr_m_addr
Rate M; std::nullopt for V1.
Definition: ddc_block_control.hpp:158
Definition: stream_cmd.hpp:42