Commit Graph

10990 Commits

Author SHA1 Message Date
Martin Braun
544997d669 rfnoc: tx streamer: Remove warning regarding alignment with CHDR width
This warning turned out to be scientifically inaccurate. The actual
auto-coercion of the spp value to the CHDR width is left in place, as it
improves streaming under certain conditions, but we no longer warn if
a user-selected spp value is not aligned with the CHDR width.
2025-01-14 09:54:19 +01:00
Marian Koop
ee4c15c5c3 doc: Prepare branch for 4.8.0.0 release
- Updated version string
- Updated CHANGELOG
- Updated Debian-related files
- Updated images package
2025-01-13 22:45:43 +01:00
Marian Koop
71d4bb53ee doc: Updated images manifest with new default fpga resources 2025-01-13 22:45:43 +01:00
Marian Koop
a95735d133 cmake: deb: Raise debhelper compatibility version to 12
Raise debhelper compatibility version from 9 to 12 to follow
current recommendations from http://man.he.net/man7/debhelper.
2025-01-13 22:45:43 +01:00
Marian Koop
3a629f8549 Updated CHANGELOG 2025-01-13 22:35:01 +01:00
Martin Braun
6d630380a2 rfnoc: tx streamer: Default spp to multiple of CHDR width
Unless the user specifies an spp value in a Tx streamer by means of
a stream argument, the Tx streamer now holds additional logic that
aligns the spp value with the CHDR width. For example, in an X410 100
GbE image, the CHDR width is typically 512 bits, which corresponds to 16
samples (sc16), so spp will default to value that's a multiple of 16.

Previously, the default was to simply use the maximum MTU. However,
there have been circumstances observed where using a non-aligned spp
value causes suboptimal behaviour.

For example, when the CHDR width is 512 bits, and the discovered MTU is
8016 bytes, the default spp value would be 1988 samples per packet.
However, a value of 1984 samples per packet causes the CHDR packet to be
of a length that is a multiple of 64 bytes (== 512 bits) which can
improve performance.

This change does not affect applications where the spp size is already
manually configured, and has almost no influence on use cases where the
CHDR width is 64, because that just means the optimal number of samples
per packet should be even.

Under the hood, the following changes were made:
- The CHDR width is passed into the streamer as a reserved key
  (__chdr_width) from the infrastructure.
- After connecting the Tx streamer to the graph, when the MTU is known,
  we add a check for the spp value to make it an integer multiple of the
  CHDR width if not specifically given (like a "soft atomic item size").

Co-authored-by: Jörg Hofrichter <joerg.hofrichter@emerson.com>
2025-01-13 22:33:34 +01:00
Martin Braun
e25b16a303 rfnoc_graph: Add get_chdr_width() API call
This allows querying the CHDR width for a given device in an RFNoC
graph. The mb_index parameter is mostly for future proofing, given that
the CHDR width must be constant between devices.
2025-01-13 22:33:34 +01:00
Martin Braun
dcb582d2b3 examples: benchmark_rate: Properly use --tx_spp
Previously, the value from --tx_spp was only used if --tx_spb was not
also provided (basically, it was a default for --tx_spb).

Now, the value from --tx_spp is used as a stream argument for the Tx
streamer. If both --tx_spp and --tx_spb are provided, then
benchmark_rate will split the full burst size (--tx_spb) into packets of
size --tx_spp. Previously, if both parameters were given, and --tx_spb
was bigger than --tx_spp, the actual packet size was determined by the
maximum packet size available at the interface or the --tx_spb value,
whichever was smaller.

This commit also aligns the usage of --tx_sample_align. Previously, it
was only implemented for the multi-streamer use case. Now it works the
same between the multi- and single-streamer use cases, and the
diagnostic output now shows SPP and SPB values for both. If both
--tx_spb and --tx_sample_align are given, we potentially have a conflict,
which the tool now warns about.

When using --random, --tx_sample_align now also applies to all burst
sizes.
2025-01-13 22:31:20 +01:00
Lars Amsel
c6274925ba host: add patch version number to poetry version
Add the patch version number to poetry version. Because UHD uses
the patch number for adding branch information on development branches
we need to save the patch number in some different variable for later
access.
2025-01-10 15:03:45 +01:00
Lars Amsel
3ffc7a6281 host: Rename build.py to uhd_build.py
Depending on the build folder poetry build might use build.py
instead of the intended build package which leads to an import error
for "BuildBackendException". To prevent confusion rename the script
to something UHD specific.
2025-01-10 15:03:45 +01:00
Lars Amsel
023bb39121 host: Cleanup UHD Python utilities
This moves the calibration Python utilities into the
uhd Python module (because they have dependencies to
uhd). Also the poetry script adds them as scripts to
the uhd module.

The install Python module is not executed on Windows
systems.

usrpctl, rfnoc image builder and rfnoc modtool are
not affected.
2025-01-10 15:03:45 +01:00
Martin Braun
aa182e5e52 rfnoc: oot: Fix regex for capturing HDL source files
The existing regex that filters the required HDL sources from
Makefile.srcs had an issue where it would identify VHDL files as Verilog
files (because the string 'file.v' is a substring of 'file.vhdl').

The CMake regex engine does not have support for word boundaries, so we
use the greediness of the regex algorithm and search for .vhd(l) first.
2025-01-09 18:05:35 +01:00
Grant Meyerhoff
5ededca7db host: remove deprecated setName usage
As of Python3.10, setName has been deprecated in favor of using name directly as a property
2025-01-09 16:13:34 +01:00
Grant Meyerhoff
e40121441e host: update python formatting 2025-01-09 16:13:34 +01:00
Grant Meyerhoff
4c874a0349 docs: fix MultiUSRP python object creation 2025-01-07 14:33:03 +01:00
Jörg Hofrichter
8e780be0bc image builder: create build(...) directories in the current directory
Introduce a new parameter --base-dir BASE_DIR.

If the parameters --build-dir BUILD_DIR / --build-ip-dir BUILD_IP_DIR
/ --build-ouput-dir BUILD_OUTPUT_DIR are not set explicitly, they will
be set to these values per default:

- BUILD_DIR=<BASE_DIR>/build-<IMAGE_CORE_NAME>
- BUILD_IP_DIR=<BASE_DIR>/build-ip
- BUILD_OUTPUT_DIR=<BASE_DIR>/build

BASE_DIR defaults to the current directory if the parameter --base-dir
is not set. This means that per default, the build(...) directories
are generated in the current directory.
2024-12-20 10:20:59 +01:00
Jörg Hofrichter
86b06169d0 image builder: print build directories used after build
The directories which are used for the build are printed before
executing the build. However, the build generates hundrets of
lines of output which typically exceeds the scrollback length
of the terminal. Hence, print the directories again after the
build finished.
2024-12-20 10:20:59 +01:00
Joerg Hofrichter
89f3671add examples: added fft_loopback example
This example demonstates the cyclic prefix (CP) insertion and removal
capability of the new FFT block. It is intended to be used in cabled
RF loopback. Multiple OFDM symbols with configurable CP length are
transmitted and received. Each OFDM symbols contains a single tone
so that transmitted and received signal can be compared.
2024-12-17 22:13:42 +01:00
Joerg Hofrichter
52ae8ad308 tests: added a on-target test for the new FFT block
This tests interface functions as well as the correct data processing
2024-12-17 22:13:42 +01:00
Joerg Hofrichter
c921c6a64e test: Extend existing FFT test to cover addition features from new FFT
The interface of the FFT block controller was extended to include functions for
querying the capabilities and setting cyclic prefix insertion / removal values.

-> Extend the existing fft_block_test (for FFT_BLOCK, RFNoC ID 0xFF700000)
to cover the additional functions.

Also add a new test fft_block_test_v2 which tests the interface of the new
FFT block (FFT_BLOCK_V2, RFNoC ID 0xFF700002).
2024-12-17 22:13:42 +01:00
Joerg Hofrichter
cdb4ab1e15 rfnoc: adopted fft block controller for new FFT
The new FFT (FFT_BLOCK_V2, RFNoC ID 0xFF700002) adds support for
- larger FFT length
- cyclic prefix (CP) insertion
- cyclic prefix (CP) removal
2024-12-17 22:13:42 +01:00
Wade Fife
25fffb0067 fpga: rfnoc: Add new FFT block
This replaces the legacy RFNoC FFT block with a new one of the same
name that includes a superset of the original features. New features
include cyclic prefix insertion or removal and FFT sizes up to 64k.
2024-12-17 22:13:42 +01:00
Wade Fife
386d0df1d0 rfnoc: Add fft.yml for new FFT block
This replaces fft_1x64.yml with fft.yml in order to suppor the new
RFNoC FFT block.
2024-12-17 22:13:42 +01:00
Wade Fife
1549f95dc5 fpga: lib: Add axis_sideband_tuser 2024-12-17 22:13:42 +01:00
Wade Fife
f2a9c389d3 fpga: lib: Add axis_split_bus 2024-12-17 22:13:42 +01:00
Wade Fife
ab19d99cb0 fpga: lib: Add axis_combine 2024-12-17 22:13:42 +01:00
Wade Fife
ec91debff5 fpga: lib: Add axis_data_if_packetize 2024-12-17 22:13:42 +01:00
Wade Fife
d96546d639 fpga: lib: Add Xilinx FFT IP for various configurations 2024-12-17 22:13:42 +01:00
Wade Fife
0d3d69493a fpga: lib: Add complex_to_magphase_int17 IP
The underlying Xilinx CORDIC IP uses 2 bits for the whole part of its
(X,Y) inputs and its magnitude output. So, having 17 bits means we have
enough precision to represent the entire range of an sc16. The 16-bit
CORDIC is insufficient to cover this entire range.
2024-12-17 22:13:42 +01:00
Wade Fife
c2b8eb4a88 fpga: rfnoc: Add SV packages for use with RFNoC 2024-12-17 22:13:42 +01:00
Wade Fife
079fbe5283 fpga: lib: Add usrp_utils.svh with common macros 2024-12-17 22:13:42 +01:00
Wade Fife
76074ecb31 fpga: lib: Cleanup axi_demux module
- Add documentation
- Add generate block labels
- Remove tabs and fix indentation
- Separate the code into three logical sections
2024-12-17 22:13:42 +01:00
Martin Braun
b7fa3ae87e rfnoc: addsub: Fix USE_IMPL rendering for addsub
When instantiating an addsub block, the quotes would get munged,
rendering the parameter as such:

   .USE_IMPL(Verilog)

The correct rendering should be:

   .USE_IMPL("Verilog")

This leads to Vivado complaining about how the expression `Verilog` is
not known (it should be a string constant).

We fix this by using the recently introduced 'q' filter.

Discussed in https://github.com/EttusResearch/uhd/issues/809.
2024-12-13 16:06:17 +01:00
Lars Amsel
c36e40a5fc cmake: Set classifiers in pyproject.toml
This sets classifiers in pyproject.toml. Most of them
are static except for the development status. The status
is set to 2 (pre alpha) as a default. Only if UHD_RELEASE_MODE
is set it changes to 4 (beta) if we are on a release canditate tag
or 5 (release) if we are on release tag. If we aren't on any tag
or the tag does not meet the correct formatting we stay on 2
and a warning is issued.
2024-12-13 15:53:09 +01:00
Marian Koop
2234786332 ci: win: installer: Use feature -DENABLE_EXTEND_WIN_PACKAGING=ON
Use new optional feature -DENABLE_EXTEND_WIN_PACKAGING=ON
when building UHD Windows installer. Feature enables packaging
of convinience components into a single NSIS build installer
that is intended for distribution to end users.
2024-12-13 15:51:56 +01:00
Marian Koop
57ef1fb88c cmake: Extend Windows Installer w libusb dll & erllc_uhd_winusb_driver
Simplifying the Windows installer experience by reducing the
number of individual downloads from 4 (for USB devices) to 2.
Including the libusb.dll into the installer will remove a common
onboarding error.
This change introduces a now, optional cmake feature called
-DENABLE_EXTEND_WIN_PACKAGING=ON, that defaults to off.
Enabling this feature will cause a number of convenience components
to be included into the windows deployment package (aka. installer).
Enabling this feature has no effect on other platforms.
The changes to the NSIS itself are trivial and limited to another
license dialog (for libusb redistribution). Most changes were in
the cmake code used by cpack (for which NSIS is the utilized Windows
cpack generator option).
These additional components now controlled via the feature
component are currently:
- incl. of MSVC Runtime binaries into ${RUNTIME_DIR}
- incl. of libusb.dll into ${RUNTIME_DIR}
- incl. of erllc_uhd_winusb_driver into ${PKG_DATA_DIR}/usbdriver
2024-12-13 15:51:56 +01:00
Marian Koop
0eb24b3727 cmake: Added MSVC_VERSION definition for VC2022. 2024-12-13 15:51:56 +01:00
Jörg Hofrichter
f5ad71d8a7 ci: hardware test: clean repositories on checkout
... and set the path of the TestResultsFiles explicitly. This
ensures that no unwanted testresult files are picked up.
2024-12-13 11:23:33 +01:00
Clemens Felber
99d2ecae68 host: python: Add version check for UHD Python bindings 2024-12-12 11:43:33 +01:00
Frank Dietze
87820d05d3 ci: streaming tests: fix DPDK version shown in display name
Variable DPDK_VERSION_STRING is resolved during runtime and
cannot be used in display name. Use variable dpdkDir instead.
2024-12-12 11:29:47 +01:00
Jörg Hofrichter
91bba6b156 ci: vcpkg: add pkgconf as dependency
This provides pkgconf.exe which is required for pkgConfig to work
on Windows when using the vcpkg based build flow.
2024-12-11 15:32:55 +01:00
Jörg Hofrichter
1ce99d5e4e ci: win build: refresh vcpkg dependencies using manifest 2024-12-11 15:32:55 +01:00
Martin Braun
e75629c3cf lib: Fix boost::detail::atomic_count header
This fixes a deprecation warning.
2024-12-11 14:37:26 +01:00
Martin Braun
adfe953d96 uhd: Update ASIO usage to modern style, compatible with Boost 1.87
Starting with Boost 1.66 and the corresponding ASIO version, there were
some changes introduced based on the C++ Networking TS. This includes
changes like replacing io_service with io_context, deprecating some
functions, etc. Starting with Boost 1.87, the old style is no longer
supported.

This commit updates all usage of ASIO in a way that makes UHD compatible
with future versions of ASIO. However, this makes UHD no longer
compatible with Boost 1.65 and below.

Summary of changes:
- Replace asio::io_service with asio::io_context
- Replace asio::io_service::strand with
  asio::strand<asio::io_context::executor_type>
  - This implies using asio::post() instead of asio::strand::post()
- Replace asio::buffer_cast<T>(buf) with static_cast<T>(buf.data())
- Update resolve(query) with new API
- Replace references to endpoint_iterator with resolver::results_type
- Replace ip::address::from_string() with ip::make_address()

Co-authored-by: Jörg Hofrichter <joerg.hofrichter@emerson.com>
2024-12-11 14:37:26 +01:00
Joerg Hofrichter
8c56d97970 ci: fix unzipping custom boost if provided as .tar.gz file
This fixes commit 0d9667e696
2024-12-11 14:37:26 +01:00
Lars Amsel
93d3d42af1 docs: Add information about data size restriction in transport
Passing samples in packets adds additional constraints. This change
adds documentation for MTU, SPP, AIS, and how they're related.

Co-authored-by: Martin Braun <martin.braun@ettus.com>
Co-authored-by: Wade Fife <wade.fife@ettus.com>
2024-12-11 09:42:35 +01:00
Wade Fife
abe1d27c07 fpga: ci: Output JUnit XML for testbench run
Co-authored-by: Jörg Hofrichter <joerg.hofrichter@emerson.com>
2024-12-11 09:08:11 +01:00
Wade Fife
f1ef9ada68 fpga: tools: Add JUnit XML support to run_testbenches
Co-authored-by: Jörg Hofrichter <joerg.hofrichter@emerson.com>
2024-12-11 09:08:11 +01:00
Martin Braun
780ce7a724 examples: rfnoc-gain: Remove deprecated FindUnixCommands
In CMake 3.26, find_package(UnixCommands) was deprecated. We therefore
use find_program() to find the Bash executable path.
2024-12-10 13:58:44 +01:00
Martin Braun
44a9ef600d examples: rfnoc-gain: Rename .v to .sv
This patch doesn't actually modify the Verilog source files, but as
rfnoc_modtool generates .sv files, and we recommend that, rfnoc-gain is
aligned with this recommendation.
2024-12-10 13:58:44 +01:00