From 60ca903776c5e6c676a52551f45a8a09d2dfe374 Mon Sep 17 00:00:00 2001 From: Jonathon Pendlum Date: Fri, 11 Feb 2022 00:53:06 -0500 Subject: rfnoc: window: Set window size register after loading coefficients --- host/lib/rfnoc/window_block_control.cpp | 4 ++++ host/tests/rfnoc_block_tests/window_block_test.cpp | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/host/lib/rfnoc/window_block_control.cpp b/host/lib/rfnoc/window_block_control.cpp index 9acb963d0..ad6eb466c 100644 --- a/host/lib/rfnoc/window_block_control.cpp +++ b/host/lib/rfnoc/window_block_control.cpp @@ -118,6 +118,10 @@ private: _window_reg_iface.poke32(REG_WINDOW_LOAD_COEFF_LAST_OFFSET, static_cast(_coeffs.at(chan).at(num_coeffs - 1)), chan); + // Set window size + _window_reg_iface.poke32(REG_WINDOW_LEN_OFFSET, + static_cast(num_coeffs), + chan); } //! Maximum length of window diff --git a/host/tests/rfnoc_block_tests/window_block_test.cpp b/host/tests/rfnoc_block_tests/window_block_test.cpp index 26978464b..e45c00cbb 100644 --- a/host/tests/rfnoc_block_tests/window_block_test.cpp +++ b/host/tests/rfnoc_block_tests/window_block_test.cpp @@ -35,6 +35,7 @@ class window_mock_reg_iface_t : public mock_reg_iface_t public: window_mock_reg_iface_t(size_t num_chans, std::vector max_num_coeffs) : last_coeff_write_pos(num_chans, 0) + , num_coeffs(num_chans) , coeffs(num_chans) , _num_chans(num_chans) , _max_num_coeffs(max_num_coeffs) @@ -58,6 +59,8 @@ public: } else if (offset == window_block_control::REG_WINDOW_LOAD_COEFF_LAST_OFFSET) { last_coeff_write_pos[chan] = coeffs.at(chan).size(); coeffs.at(chan).push_back(uhd::narrow_cast(data)); + } else if (offset == window_block_control::REG_WINDOW_LEN_OFFSET) { + num_coeffs[chan] = uhd::narrow_cast(data); } else { throw uhd::assertion_error("Invalid write to out of bounds offset"); } @@ -87,6 +90,7 @@ public: } std::vector last_coeff_write_pos; + std::vector num_coeffs; std::vector> coeffs; private: @@ -179,6 +183,9 @@ BOOST_FIXTURE_TEST_CASE(window_test_set_get_coefficients, window_block_fixture) // Check that all coefficients were written BOOST_CHECK_EQUAL(reg_iface->coeffs.at(chan).size(), num_coeffs_chan); + // Check correct window length was written + BOOST_CHECK_EQUAL(reg_iface->num_coeffs.at(chan), num_coeffs_chan); + // Check correctness of coefficients for (size_t i = 0; i < coeffs.size(); i++) { BOOST_CHECK_EQUAL(reg_iface->coeffs.at(chan).at(i), chan); -- cgit v1.2.3