USRP Hardware Driver and Device Manual Version: 4.11.0.0-0-unknown
UHD and USRP Manual
Loading...
Searching...
No Matches
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
15namespace uhd { namespace rfnoc {
16
139{
140public:
142
143
145 {
146 uint16_t major_compat;
147 uint16_t minor_compat;
148 // Readback addresses
149 uint32_t rb_num_hb;
152 std::optional<uint32_t> rb_spc;
153 // Per-channel write addresses
154 uint32_t sr_decim_addr;
155 uint32_t sr_freq_addr;
157 std::optional<uint32_t> sr_n_addr;
158 std::optional<uint32_t> sr_m_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;
167 };
168
170 static const uint32_t RB_COMPAT_NUM;
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
noc_block_base(make_args_ptr make_args)
Definition time_spec.hpp:31
#define UHD_API
Definition config.h:87
Definition actions.hpp:25
Definition build_info.hpp:12
meta_range_t freq_range_t
Definition ranges.hpp:173
#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