blob: ec80682fa6dd03a75c3cc70e679ee7b4d5e92f4b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
//
// Copyright 2020 Ettus Research, a National Instruments Brand
//
// SPDX-License-Identifier: GPL-3.0-or-later
//
#include <uhdlib/usrp/common/x400_rfdc_control.hpp>
#include <boost/test/unit_test.hpp>
using uhd::rfnoc::x400::rfdc_control;
struct x400_rfdc_fixture
{
static constexpr size_t RFDC_MEM_SIZE = 1;
x400_rfdc_fixture()
: mem(1 << rfdc_control::regmap::NCO_RESET_DONE_MSB, RFDC_MEM_SIZE)
, rfdcc(
uhd::memmap32_iface_timed{
[&](const uint32_t addr, const uint32_t data, const uhd::time_spec_t&) {
mem[addr] = data;
},
[&](const uint32_t addr) { return mem[addr]; }},
"TEST::RFDC")
{
// nop
}
std::vector<uint32_t> mem;
rfdc_control rfdcc;
};
BOOST_FIXTURE_TEST_CASE(test_nco_reset, x400_rfdc_fixture)
{
rfdcc.reset_ncos({rfdc_control::rfdc_type::RX0}, uhd::time_spec_t::ASAP);
BOOST_CHECK(mem[rfdc_control::regmap::NCO_RESET] & 0x1);
// Fake self-clearing bit
mem[rfdc_control::regmap::NCO_RESET] = 1 << rfdc_control::regmap::NCO_RESET_DONE_MSB;
// This should print a warning:
rfdcc.reset_ncos({}, uhd::time_spec_t::ASAP);
BOOST_CHECK_EQUAL(mem[rfdc_control::regmap::NCO_RESET]
& (1 << rfdc_control::regmap::NCO_RESET_START_MSB),
0);
BOOST_CHECK(rfdcc.get_nco_reset_done());
}
BOOST_FIXTURE_TEST_CASE(test_nco_freq, x400_rfdc_fixture)
{
// TODO: Add checks when implemented
rfdcc.set_nco_freq(rfdc_control::rfdc_type::RX0, 1e9);
}
|