Commit Graph

12093 Commits

Author SHA1 Message Date
Niels Garibaldi
a1f558f16a fpga: add wideband ddc and duc blocks to default fpga images
Adding the RFNoC DDC and DUC blocks to our shipping bitfiles.

The new wideband DxC implementation allow processing input/output
rates up to a maximum of 2000MSps.
This commit adds the DDC/DUC blocks to some of our shipping
bitfiles for all channels.

Co-authored-by: Niels Garibaldi <niels.steffen.garibaldi@emerson.com>
Co-authored-by: André Zoch <andre.zoch@emerson.com>
Co-authored-by: Meghana Halladamath <meghana.halladamath@emerson.com>
Co-authored-by: Wade Fife <wade.fife@ettus.com>
Co-authored-by: Max Köhler <max.koehler@emerson.com>
2026-08-05 08:43:42 +02:00
Niels Garibaldi
66769905bb fpga: x400 add faster ce_clk variant
Add a new faster ce clock called fast_ce to x4xx that runs at
333.33MHz.

Co-authored-by: Max Köhler <max.koehler@emerson.com>
2026-08-05 08:43:42 +02:00
Niels Garibaldi
e466f427fd host: dsp: add wideband ddc and duc rfnoc blocks
Updated the host related files to support wideband DxC block
variants.
The singlesample and multisample variants both have the same API,
but internally they are using different register address spaces to
interact with the FPGA implementation.
The host implementation checks which implementation a RFNoC DxC
block is using by checking the block version number and will then
automatically choose the correct register address scheme.
This is all transparent to the user, the Block API stays the same.

Co-authored-by: Niels Garibaldi <niels.steffen.garibaldi@emerson.com>
Co-authored-by: André Zoch <andre.zoch@emerson.com>
Co-authored-by: Meghana Halladamath <meghana.halladamath@emerson.com>
Co-authored-by: Wade Fife <wade.fife@ettus.com>
Co-authored-by: Max Köhler <max.koehler@emerson.com>
2026-08-05 08:43:42 +02:00
Niels Garibaldi
b4aeb78438 fpga: dsp: add wideband ddc and duc rfnoc blocks
Added variants for the DDC/DUC blocks that can process multiple
samples per cycle and can be used for bandwidths higher than
200Mhz.
This new feature is integrated into the existing RFNoC DDC/DUC
blocks. Depending on the Radio bandwidth specified for the USRP
variant, the DxC blocks will instantiate the existing singlesample
implementation(for FPGA image variants <= 200MHz) or instantiate
the multisample implementation(for FPGA image variants > 200MHz).

Co-authored-by: Niels Garibaldi <niels.steffen.garibaldi@emerson.com>
Co-authored-by: André Zoch <andre.zoch@emerson.com>
Co-authored-by: Meghana Halladamath <meghana.halladamath@emerson.com>
Co-authored-by: Wade Fife <wade.fife@ettus.com>
Co-authored-by: Max Köhler <max.koehler@emerson.com>
2026-08-05 08:43:42 +02:00
Frank Dietze
4ef8c18981 ci: pipeline: separate embedded filesystem builds 2026-08-04 13:53:05 +02:00
Grant Meyerhoff
a18579e3e5 ci: Add support for USRP B310
Co-authored-by: Virendra Kakade <virendra.kakade@ni.com>
Co-authored-by: Wade Fife <wade.fife@ettus.com>
Co-authored-by: Javier Valenzuela <javier.j.valenzuela@emerson.com>
2026-08-04 12:00:49 +02:00
Grant Meyerhoff
e0f685a4aa usrp: Add support for USRP B310
Co-authored-by: Virendra Kakade <virendra.kakade@ni.com>
Co-authored-by: Javier Valenzuela <javier.j.valenzuela@emerson.com>
Co-authored-by: Aki Tomita <aki.tomita@emerson.com>
Co-authored-by: Tony Liecthy <tony.liechty@ni.com>
Co-authored-by: Wade Fife <wade.fife@ettus.com>
2026-08-04 12:00:48 +02:00
Javier Valenzuela
b6286bab13 fpga: Add support for USRP B310
Co-authored-by: Wade Fife <wade.fife@ettus.com>
Co-authored-by: Tony Liecthy <tony.liechty@ni.com>
Co-authored-by: Grant Meyerhoff <grant.meyerhoff@emerson.com>
Co-authored-by: Christopher Oeltjen <christopher.oeltjen@emerson.com>
2026-08-04 10:40:54 +02:00
Javier Valenzuela
2cde73ab6f fpga: lib: add scalability to pcie host datapath components 2026-08-04 10:40:40 +02:00
Javier Valenzuela
d4b827abea fpga: lib: add SV wrapper for ctrlport_timer 2026-08-04 10:40:34 +02:00
Javier Valenzuela
dd708a46f4 fpga: lib: add ctrlport endpoints for I2C, UART and high-throughput SPI
Co-authored-by: Wade Fife <wade.fife@ettus.com>
Co-authored-by: Tony Liecthy <tony.liechty@ni.com>
2026-08-04 10:40:31 +02:00
Aki Tomita
e98bf35840 platform: Move get_page_size so it's shareable 2026-08-04 09:45:33 +02:00
Grant Meyerhoff
83553e2dd5 common: Add ADRV903x code from API version 2.12.1.4
- Includes all needed files from the ADI-provided software drop, intentionally only including the files needed for the ADRV9032.
- Adds a LICENSE.pdf file that points to ADIs Software License Agreement
- Includes CMakeLists.txt files for building and a .clang-format file to ignore changing format that were not provided by ADI.
2026-08-04 09:45:33 +02:00
Grant Meyerhoff
5bfe6a47ce ci: don't require inputs for non-mandatory args 2026-08-04 09:45:33 +02:00
Martin Anderseck
de040602ee ci: Include *.cmake and *.cmake.in detection in changeset analyzer.
This makes the pipeline trigger tests when *.cmake and *.cmake.in files
have been changed.
2026-08-03 14:43:10 +02:00
Martin Anderseck
c8a8a3d931 ci/tools: Enable Ubuntu 26.04 build
This enables building UHD in Ubuntu 26.04 in the test pipeline.
2026-08-03 12:55:00 +02:00
Martin Anderseck
1af4625e84 cmake: Enable Ubuntu 26.04
These changes are required to build on Ubuntu 26.04 cleanly while still
maintaining backwards compatibility until Ubuntu 22.04.

- Set CMP0167 to NEW in UHD CMake paths that resolve Boost
- Scope policy changes with guard checks so older CMake versions remain
  compatible
- Ensure dependency resolution order applies policy before Boost
  discovery in package config
- Reduce CMake 3.30+ FindBoost policy warnings without breaking Ubuntu
  22.04-era toolchains
2026-08-03 12:55:00 +02:00
Doron Behar
26c0033d1e cmake: Remove Boost::system from UHDConfig.cmake component list
Boost.System has been header-only since Boost 1.69, and as of Boost 1.89
its CMake package config was removed entirely.[1]

This makes the `find_dependency(Boost ... COMPONENTS ... system ...)`
call in the installed `UHDConfig.cmake` fail on any downstream project
that does `find_package(UHD)` while linked against `Boost >= 1.89`.

Timeline of how this happened, for reference:

- Up to and including v4.9.0.1, UHDConfig.cmake.in had no Boost
  dependency check at all.
- ab724a30ec introduced the
  `find_dependency(Boost ... COMPONENTS ... system ...)` call here, to
  correctly declare Boost as a transitive dependency of the newly added
  `UHD::uhd` imported target.
- c45c296d8f fixed UHD's own build to stop
  requiring `Boost::system`, in response to it being dropped as of Boost
  1.89. That commit did not touch `UHDConfig.cmake.in`, which had only
  just gained its own separate `Boost::system` reference ten days
  earlier via ab724a30ec, and so was
  missed.
- `v4.10.0.0` ships with both commits, making it the first release where
  `UHDConfig.cmake.in`'s Boost dependency check exists but still lists
  `system`, breaking `find_package(UHD)` for any consumer linked against
  Boost >= 1.89.

[1]: 7a495bb46d
2026-08-03 12:52:47 +02:00
Frank Dietze
12d9916fc3 ci: streaming: adapt weekly pipeline 2026-08-03 10:08:50 +02:00
Martin Anderseck
c1b344b732 extension: Fix set_*x_antenna() and update C++
This fixes the segfault when calling into set_*x_antenna() within the
example extension and updates the C++ version to UHD default (20 at the
moment) to be able to build again.
The segfault was caused by the extension example never initializing the
pointers to _*x_antenna. It still doesn't do that but refers to the
radio's setter and getter methods now.
2026-08-03 09:55:38 +02:00
Martin Anderseck
2951e32013 test: Add spi_core_4000 test
This adds a unit test for the spi_core_4000 which checks for the
validation of configurations and arguments and verifies the correct
registers are written during a SPI transaction.
2026-08-03 09:51:20 +02:00
Marian Koop
62aec9a0a0 ci: Replace obsolete pipeline resource 2026-07-30 11:15:15 +02:00
Frank Dietze
74b818000f ci: upgrade pip before installing python dependencies 2026-07-30 08:29:07 +02:00
Martin Braun
63ea9328aa ci: Add Ubuntu 26.04 (resolute) build container
Note: clang-format-14 is no longer available for Ubuntu 26.04, so it is
not available in the build containers.
2026-07-29 14:42:21 +02:00
Martin Braun
2a2ce50abe lib: Fix compiler warning in db_dbsrx.cpp
On modern compilers, this file could cause a warning such as:

warning: ‘void operator delete(void*, std::size_t)’ called on pointer
‘<unknown>’ with nonzero offset [8, 9223372036854775800]
[-Wfree-nonheap-object]

A minor refactoring avoids the warning, even though it was unlikely
a real issue in the first place.
2026-07-29 14:39:22 +02:00
Frank Dietze
e416bffa95 ci: streaming: generic agent selection by capabilities 2026-07-29 11:26:04 +02:00
Abhishek Verma
15264cdc06 Update CHANGELOG 2026-07-28 18:40:13 +02:00
Max Köhler
6d52cf9155 fpga: lib: disconnect reset from axi_fifo_flop ready path 2026-07-28 14:27:27 +02:00
Markus Schill
a68fb6529d host: add sample rate to IQ cal JSON log file name 2026-07-28 14:26:19 +02:00
Wade Fife
90b242eae9 fpga: rfnoc: Reclaim byte in SEP input buffer 2026-07-28 14:25:28 +02:00
Wade Fife
0aaca07efd fpga: rfnoc: Fix null src sink TB description 2026-07-28 14:25:28 +02:00
Wade Fife
19bf6207bd fpga: rfnoc: Support non-power-of-two SEP buffer sizes
Previously it would round up the requested size to the nearest power of
two. Now it will attempt to match the size of the buffer to the
requested size, allowing more control over how many FPGA RAM resources
get consumed.
2026-07-28 14:25:28 +02:00
Wade Fife
34ecf65642 rfnoc: python API: Expose sleep control op 2026-07-28 14:24:19 +02:00
Wade Fife
3a10834521 tools: Update RFNoC dissectors for 8-bit SeqNum 2026-07-28 14:24:19 +02:00
Wade Fife
19d7d1a6a5 rfnoc: Increase Ctrl SeqNum to 8 bits
Increase the control SeqNum field width from 6 bits to 8 bits. See the
updates to rfnoc_fpga.md for details.
2026-07-28 14:24:19 +02:00
Wade Fife
8c2a20de50 fpga: rfnoc: Increase Ctrl SeqNum to 8 bits
Increase the control SeqNum field width from 6 bits to 8 bits. See the
changes to rfnoc_fpga.md for details.
2026-07-28 14:24:19 +02:00
Wade Fife
d0a97670fa docs: rfnoc: Increase Ctrl SeqNum to 8 bits
This change updates the RFNoC specification to increase the SeqNum
field from 6 bits to 8 bits. This helps reduce control packet response
sequence number aliasing in cases where packets may be dropped or
reordered. To make this change while keeping the implementation
efficient, the control packet fields have been rearranged to place the
most critical information first and to avoid splitting fields across
word boundaries.

Additionally, compared to the previous version of the specification (as
of UHD 4.10), a new ReqSize field has been added. This field represents
the read request size.

The DataLength field that briefly existed in the change history has
been removed. In the new version, NumData represents the number of data
words present in the control packet (the same meaning as in the
original RFNoC specification), while ReqSize indicates the number of
words requested to be read. This means that a large read request can be
issued without including dummy data in the request (e.g., ReqSize = 15
while NumData = 0).

See separate commits for the corresponding FPGA and host code changes.
2026-07-28 14:24:19 +02:00
Abhishek Verma
a7e2679cfe host: cmake: add gprc/protobuf min version 2026-07-28 14:10:47 +02:00
Abhishek Verma
85523485c7 CHANGELOG: add RPC migration to gRPC 2026-07-28 14:10:47 +02:00
Abhishek Verma
cff6c9f643 ci: docker: add gRPC/protobuf version in vcpkg.txt 2026-07-28 14:10:47 +02:00
Abhishek Verma
5784b7e080 docs: update with gRPC documentation 2026-07-28 14:10:47 +02:00
Max Köhler
cb7ed8accd rfnoc_image_core: configurable CHDR block width per streaming endpoint 2026-07-28 09:37:08 +02:00
Zsolt Gaál
ddc67b681e examples: Fix cleanup waterfall memory leak in rx_samples_c
This PR fixes a bug in the goto cleanup waterfall within rx_samples_c.

Previously, the free_rx_streamer label was positioned above the
free_rx_metadata label. Because C executes sequentially, if an error
occurred after the metadata was successfully created (for example,
during uhd_usrp_set_rx_rate or uhd_usrp_get_rx_stream), the code would
jump to free_rx_metadata, fall through to free_usrp, and exit. It
completely skipped free_rx_streamer, silently leaking the streamer
memory and leaving the hardware handles dangling.

Changes:

- Reordered the cleanup labels to strictly follow the reverse-chronological
  order of resource creation (Metadata -> Streamer -> USRP).
- Updated the corresponding EXECUTE_OR_GOTO jump targets for the stream
  setup functions to match the new waterfall order.
2026-07-28 09:23:21 +02:00
Max Köhler
3ed843791b fpga: lib: add Xilinx parameterized macro version of axi_fifo_2clk
The axi_fifo_2clk module uses a generic FIFO macro from Xilinx. This allows
custom widths and depths to be specified. It removes the need for combinatorial
logic to connect multiple smaller IP blocks to form a wider data path FIFO.
2026-07-28 09:13:27 +02:00
Marian Koop
ed831f68e1 ci: Use python script to create some filtered matrix variable values 2026-07-27 17:01:39 +02:00
Marian Koop
28afccc490 ci: Add script to dynamically derive subsets of matrix variables 2026-07-27 17:01:39 +02:00
Max Köhler
5b9c55c5df fpga: x420: lower FPGA max input delay on GPIO interface 2026-07-24 15:13:25 +02:00
Martin Anderseck
0ef82247ab host: Fix SPI pin offset for Port B
While in all GPIO code, 12 is the offset from Port A to Port B, the
SPI engine for X4xx used to have 16 since the last rework of this
code, directly reflecting addresses from the FPGA. This commit fixes
this.
2026-07-24 13:48:00 +02:00
Abhishek Verma
cfde75d5e8 ci: enable phase-coherency test 2026-07-24 10:13:27 +02:00
Abhishek Verma
69bdf4d34f host: fix intermittent "Socket closed" / "Invalid token" RPC failures
UHD creates two gRPC clients per MPM session (main rpc + claimer)
against the same address with identical ChannelArguments. Under
gRPC's default global subchannel pool they share one HTTP/2 transport,
so destroying any one client (an old claimer from reset_claim_loop(),
a discovery probe, or a freed prior session) can tear down the
connection under the active claimer. Its next Reclaim then fails
with error "Socket closed", the claim loop exits, MPM expires the
claim, and the main client's next RPC fails with "Invalid token"
-- causing tests like PhaseCoherence to fail.

Fix: set GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL=1 in the rpc_client_impl
constructor so each channel owns its own subchannel/transport.
Destroying any client now tears down only its own connection; the
active claimer's transport and claim are untouched. This eliminates
both the Socket closed and the follow-up Invalid token.

Also add MPM_CLIENT client-id/thread-id diagnostic debug/trace logs.
2026-07-24 10:13:27 +02:00