Add a new play command that accepts a size_t for iterations. This
allows arbritrary iteration on the signal as well as continous
play (max value of iteration). Use the CONTINOUS_PLAY command for
that.
The old play command (using bool) is deprecated but stays in
for backward capabilities.
If the HDL sources for RFNoC get installed during installation (i.e., by
providing -DENABLE_RFNOC_DEV), then rfnoc_image_builder will default to
using the installed HDL sources when building bitfiles, unless the CWD
is in a UHD repository or the --fpga-path argument is provided (same
behaviour as before).
With -DENABLE_RFNOC_DEV=ON (the default is OFF), the HDL sources for
building RFNoC blocks and RFNoC images through rfnoc_image_builder are
now also installed into $PREFIX/share/uhd/rfnoc/fpga/usrp3. This re-uses
the existing share/uhd/rfnoc/fpga directory.
This commit also includes a Python script that copies the fpga/usrp3
directory into a staging directory inside the build dir. The
installation happens from the staging directory, not the fpga/usrp3
directory itself. This allows us to filter the usrp3 source dir without
having to use highly verbose CMake for that.
The uhd-host Debian install file is also modified so that the RFNoC
sources are not packaged into the uhd-host package.
This commit fixes two issues:
1. Unreliable SYSREF capture mechanism from SYSREF to AXI clock
domain. This clock domain crossing is removed by moving the
state machine to the PLL reference clock domain.
2. The reset processs execution time is not static.
Aligning between devices is now done using a fixed number of
SYSREF edges before reenabling the SYSREF signal in the RFDC
to trigger the NCO reset.
The mock RFNoC nodes that were previously only part of UHD are now part
of the public headers (however, the mock nodes are not compiled as part
of UHD). This makes them available to out-of-tree RFNoC modules that
want to write unit tests for their block controllers.
This class is only meant for special use cases, but it is useful for
unit tests. In order to make unit tests available for everyone, we
include this file in the public headers, even if it's potentially
dangerous.
This adds a publicly available header (uhd/rfnoc/detail/graph.hpp) which
has the same API as uhd::rfnoc::detail::graph_t before, but without any
private implementation details leaked.
The main reason for this change is to enable RFNoC OOT modules to
implement their own unit tests on block controllers. The majority of the
files changed are in order to change the include path or other
naming-related changes.
A note on host/lib/rfnoc/graph.cpp: The unit test for this file requires
access to non-public attributes and methods, so we add defines to
conditionally compile private symbols only.
Inside the image builder, we would first sanitize the path for the IP
build dir (--build-ip-dir), but then we used the non-sanitized path to
generate the 'make' command. This meant that if --build-ip-dir was not
specifically provided on the command line, the default path was
incorrect. This would fail, e.g., if the source code is only available
as read-only.
This is a temporary solution to work around build issues with gcc 15.1.1:
In file included from /usr/include/boost/asio/ip/basic_resolver.hpp:31,
from /usr/include/boost/asio.hpp:136,
from /b/uhd/host/lib/deps/rpclib/lib/rpc/client.cc:13:
(...)
/usr/include/boost/asio/ip/basic_resolver_results.hpp:147:15: error: 'void*
memcpy(void*, const void*, size_t)' forming offset [28, 128] is out of the
bounds [0, 28] of object 'endpoint' with type 'boost::asio::ip::tcp::endpoint'
{aka 'boost::asio::ip::basic_endpoint<boost::asio::ip::tcp>'} [-Werror=array-bounds=]