diff options
| author | michael-west <michael.west@ettus.com> | 2021-12-09 16:22:28 -0800 | 
|---|---|---|
| committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2022-01-10 16:19:11 -0600 | 
| commit | 699870d7dec67b43c08e55fcc1d4e159a337c49a (patch) | |
| tree | 4bb85f94157425a4f32d028ec8cdd8d5eaa36a8f /host/lib/include | |
| parent | 5d80e28752d2b6f202480ce591f142f5e6f90139 (diff) | |
| download | uhd-699870d7dec67b43c08e55fcc1d4e159a337c49a.tar.gz uhd-699870d7dec67b43c08e55fcc1d4e159a337c49a.tar.bz2 uhd-699870d7dec67b43c08e55fcc1d4e159a337c49a.zip  | |
RFNoC: Fix DSP frequency accuracy
The host code was calculating and programming a 32-bit value for the DSP
frequency, but the DDS modules in the FPGA only use the upper 24-bits.
This led to inaccurate frequency values being returned.  This change
corrects the resolution of the value on the host side so an accurate
value is returned.
Signed-off-by: michael-west <michael.west@ettus.com>
Diffstat (limited to 'host/lib/include')
| -rw-r--r-- | host/lib/include/uhdlib/usrp/cores/dsp_core_utils.hpp | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/host/lib/include/uhdlib/usrp/cores/dsp_core_utils.hpp b/host/lib/include/uhdlib/usrp/cores/dsp_core_utils.hpp index 74b4c3848..6371eb2e5 100644 --- a/host/lib/include/uhdlib/usrp/cores/dsp_core_utils.hpp +++ b/host/lib/include/uhdlib/usrp/cores/dsp_core_utils.hpp @@ -9,16 +9,19 @@  #include <tuple> -/*! For a requested frequency and sampling rate, return the - *  correct frequency word (to set the CORDIC) and the actual frequency. +/*! For a requested frequency, sampling rate, and frequency word width (in + *  number of bits), return the correct frequency word (to set the CORDIC or + *  DDS) and the actual frequency.   */  void get_freq_and_freq_word(const double requested_freq,      const double tick_rate,      double& actual_freq, -    int32_t& freq_word); +    int32_t& freq_word, +    int word_width = 32); -/*! For a requested frequency and sampling rate, return the - *  correct frequency word (to set the CORDIC) and the actual frequency. +/*! For a requested frequency, sampling rate, and frequency word width (in + *  number of bits), return the correct frequency word (to set the CORDIC or + *  DDS) and the actual frequency.   */  std::tuple<double, int> get_freq_and_freq_word( -    const double requested_freq, const double tick_rate); +    const double requested_freq, const double tick_rate, int word_width = 32);  | 
