Commit Graph

11597 Commits

Author SHA1 Message Date
Martin Braun
90b213f2fa mpmd: Enable force_mtu device argument
This device argument can be used where the automatic MTU discovery fails,
e.g., because of a particularly restrictive network configuration. Note
that it should be used with care, because UHD will use this value for
Ethernet frame sizes, even if the underlying network connection does not
support them.

Also, for 1 GbE connections, the default MTU is always 1500 bytes,
regardless of the detected maximum MTU. This means that when attempting
to increase the MTU over a 1 GbE link, the recv_frame_size stream (or
device) argument also needs to be provided.

See the corresponding x300 commit for additional for information. This
enables the same feature for all MPM devices (X4xx, E3xx, N3xx).
Manual pages were also updated in this commit.
2025-12-03 16:55:15 +01:00
Martin Braun
d8c8e7f6a1 x300: Enable force_mtu device argument
This device argument can be used where the automatic MTU discovery fails,
e.g., because of a particularly restrictive network configuration. Note
that it should be used with care, because UHD will use this value for
Ethernet frame sizes, even if the underlying network connection does not
support them.

If the desired goal is to override the MTU for a particular link, then
it may be more sensible to provide an `mtu` stream argument, or,
depending on the situation, a `recv_frame_size` or `send_frame_size`
stream argument instead. The main purpose of the `force_mtu` device
argument is to disable the automatic MTU discovery, and provide UHD with
a substitute value instead.

It may be used as follows:

```cpp
auto my_usrp =
  uhd::usrp::multi_usrp("type=x300,addr=192.168.30.2,force_mtu=8000");
// UHD will now assume that 8000 is a valid MTU, without further checks
```

Note that it remains possible to configure the Ethernet frame sizes
using the `recv_frame_size` or `send_frame_size` arguments, but those
will not disable the MTU discovery:

```cpp
auto my_usrp =
  uhd::usrp::multi_usrp(
    "type=x300,addr=192.168.30.2,recv_frame_size=8000");
// Path MTU may be smaller than 8000 if the USRP is not able to handle
// this MTU size
```
2025-12-03 16:55:15 +01:00
Martin Braun
6496f6883a rfnoc: Add mtu stream argument
When creating an RFNoC streamer (using rfnoc_graph::create_?x_stream(),
or when calling multi_usrp::get_?x_stream() on an RFNoC device), the
argument `mtu` is now interpreted by the RFNoC infrastructure. It allows
overriding the MTU for a given connection, regardless of what the
underlying link is using.

A good reason to use this is when doing remote streaming, and the path
MTU differs between the USRP and the UHD host computer, and the USRP and
the remote destination. UHD will default to the path MTU between the
host computer and the USRP, but that may be too small (e.g., when
controlling a USRP X410 over its RJ45 port, which typically has an MTU
of 1500, but doing remote streaming over 100 GbE, which typically has an
MTU of 8000 or above).

Depending on the link type used, it may be useful to use
`recv_frame_size` instead (or `send_frame_size`). However, `mtu` is
a true override that will ignore any link settings, whereas
`recv_frame_size`/`send_frame_size` are hints for the underlying link
setup, and may not be honoured.

Use this like any other stream argument:
```cpp
uhd::stream_args_t s_args("sc16", "sc16");
s_args.args = uhd::device_addr_t("mtu=8000");
auto streamer = my_rfnoc_graph->create_rx_streamer(1, s_args);
```

The relevant manual pages are also updated.
2025-12-03 16:55:07 +01:00
Jörg Hofrichter
dab43267a1 ci: rfnoc block test: limit to fft block tests 2025-12-03 16:41:01 +01:00
Meghana Halladamath
6ddcb98a62 devtest: Increase offset cycles by complex gain latency for trigger_test 2025-12-03 16:41:01 +01:00
Niels Garibaldi
956f3a7b1a docs: Add timed complex gain to documentation
Add a new section to the changelog regarding changed bitfile
behavior, specifically regarding the crossbar changes between
radio and replay block connections of the x440_X4_400 bitfile.

Change the standard bitfile description in manual to reflect
changes in x440_X4_400 bitfile behaviour changes. Add comment
to x440_X4_400 config regarding how to revert changes.
2025-12-03 16:41:01 +01:00
Meghana Halladamath
73022fb6d7 examples: Complex gain example using multi_usrp
host: lib: Extend multi_usrp API to fetch TX & RX block channel
2025-12-03 16:41:01 +01:00
Jörg Hofrichter
a6f659eb04 rfnoc: Add tests for complex gain feature
rfnoc: add test_radio_control_complex_gain.py
rfnoc: block tests: test_timed_complex_gain function
- The time corresponding to a random sample is computed and
  passed as the timestamp to the set_gain_coeff method
rfnoc: Documentation for timed operation of set_gain_coeff
2025-12-03 16:41:01 +01:00
Martin Braun
8cf1268f3c host: Add complex gain feature
lib: cores: Add complex_gain_3000 core
- This core can control complex gain settings.
rfnoc: Add discoverable feature - complex gain
- New discoverable feature for RX and TX complex gain. Allows
  configuring phase and amplitude of any radio channel.
python: Add tx_/rx_complex_gain functions to radio_control

Co-authored-by: Meghana Halladamath <meghana.halladamath@emerson.com>
Co-authored-by: Martin Braun <martin.braun@ettus.com>
Co-authored-by: Jörg Hofrichter <joerg.hofrichter@emerson.com>
2025-12-03 16:41:01 +01:00
Niels Garibaldi
8d67f1baf1 rfnoc: fpga: radio: Add complex multiplier
Add TX/RX timed complex gain to radio core.
Update testbench for complex gain functionality.

In order to make room for the new complex gain registers,
the radio core register address space was extended.

The address space has changed in the following way:

- per port address space extended from 7bit(128 bytes) to
 10bit(1024 bytes) port register address space.
- split the new port register address space in the following
 subsections into the following subsections:
  - 0x000 - 0x0FF General Radio Registers
  - 0x100 - 0x1FF RX Core Control Registers
  - 0x200 - 0x2FF TX Core Control Registers
  - 0x300 - 0x3FF Feature Control registers

The existing registers have been moved to their corresponding locations
within the new register space.

Within the newly added feature register space,
the new complex gain registers were added.
2025-12-03 16:41:01 +01:00
Martin Braun
8e9790d51d uhd: Replace boost::filesystem with with std::filesystem
- In most cases, the replacements are straightforward:
  boost::filesystem::* can be often simply replaced by
  std::filesystem::*, and the include path is changed from
  <boost/filesystem.hpp> to <filesystem>
- boost::filesystem::system_complete() is replaced with
  std::filesystem::absolute().
- Note: For users including uhd/utils/paths.hpp, this is an API change
  because the return value of get_module_paths() is now a vector of
  std::filesystem::path.
- In rx_samples_to_file and fx2_init_eeprom, we keep Boost.Filesystem
  for now because there is no direct equivalent to
  boost::filesystem::unique_path(), but the main goal is to remove
  libboost_filesystem as a link dependency from libuhd.
2025-12-03 15:21:59 +01:00
Martin Braun
6b8ca1c071 docs: Amend section on RFNoC block YAML files 2025-12-01 14:57:03 +01:00
Martin Braun
39d70b060b rfnoc: transport: Fix MTU cap in calculate_udp_link_params()
When creating a UDP link, the function calculate_udp_link_params()
merges stream args, device args, and default values to create a sensible
stream configuration object, which describes the size of send/recv
frames, their number, and some other values.

This function also takes in a send and recv MTU as a cap. However, it
was possible to override the MTU values with stream arguments. It was
not possible to override the MTU values with device arguments, however.

This commit makes the handling of device arguments and stream arguments
consistent. Consider the following snippets:

```cpp
// auto-detects MTU of 1500:
auto my_usrp = uhd::usrp::multi_usrp("recv_frame_size=8000");
uhd::stream_args_t s_args("sc16", "sc16");
auto streamer = my_usrp->get_rx_stream();
// streamer now has frame size of 1500, because the autodetected MTU
// overrides the device argument frame size
```

```cpp
// auto-detects MTU of 1500:
auto my_usrp = uhd::usrp::multi_usrp("");
uhd::stream_args_t s_args("sc16", "sc16");
s_args.args["recv_frame_size"] = "8000";
auto streamer = my_usrp->get_rx_stream();
// Previously, streamer would have a frame size of 8000, because the
// stream args override the autodetected MTU. With this patch, it has
// a frame size of 1500.
```
2025-12-01 10:07:39 +01:00
Martin Braun
768ea58e92 python: Allow SubdevSpec to be implied from a string
This allows the following:

```py
my_usrp.set_rx_subdev_spec("A:0 B:0")
```

Without this change, only the following was possible:

```py
my_usrp.set_rx_subdev_spec(uhd.usrp.SubdevSpec("A:0 B:0"))
```

Because the implicit-from-string version is possible in C++, we now also
enable it in Python.
2025-11-28 13:27:42 +01:00
Jörg Hofrichter
ed2da77bba ci: add Fedora 43 builder 2025-11-28 11:11:45 +01:00
Jörg Hofrichter
3a35224212 ci: drop Fedora 40 builder 2025-11-28 11:11:45 +01:00
David Raeman
ea40e65986 cal: Fix missing input power clamp during RX power calibration 2025-11-28 07:56:29 +01:00
Martin Braun
a8af86d727 cal: Revert E320 tune time
In 66e08ac45, the tune settling time was reduced, probably accidentally.
This sets it back to 0.1s.
2025-11-28 07:56:29 +01:00
David Raeman
ea516ad3ed cal: Fix default E320 LO offset to keep signal within passband 2025-11-28 07:56:29 +01:00
David Raeman
d54a68dc37 cal: Fix support for non-default sampling rate
... when using USRP as signal source
2025-11-28 07:56:29 +01:00
Frank Dietze
184672ec18 ci: devtest: add x310-4 to s175-devtests 2025-11-27 15:01:34 +01:00
Frank Dietze
682516edf4 ci: lvtest: add filesystem and fpga update 2025-11-26 13:39:09 +01:00
Eckhard Ohlmer
a1aa94b056 docs: Add RFNoC specification to the UHD manual.
- Move content from:
  https://files.ettus.com/app_notes/RFNoC_Specification.pdf
  into the RFNoC chapter in the UHD manual.
- Merge the "RFNoC Block Properties" section into the new
  "RFNoC Software Specification" section.
- Replace the RFNoC software API documentation copy with links to
  autogenerated API documentation in the UHD manual.
2025-11-26 08:02:35 +01:00
Wade Fife
cd25ca65e1 host: rfnoc: Add support for NSS finite mode 2025-11-24 07:59:57 +01:00
Wade Fife
063dc4faf4 fpga: rfnoc: Add finite source mode to NSS block 2025-11-21 08:10:29 +01:00
Wade Fife
259ef24cea rfnoc: Increase NSS throttle to 20 bits 2025-11-21 08:10:29 +01:00
Andre Zoch
fbc5ad9eb0 example: cpp: Enhanced documentation for rfnoc_* examples
- Added program documentation string.
- Marked required options as required().
- Added short option strings for required options.
- Made individual option descriptions more descriptive.
- Harmonized naming of options where appropriate.
  Introduced alias options for renamed options to keep
  backward compatibility.
2025-11-18 13:26:26 +01:00
Andre Zoch
981d2d41e1 example: cpp: Enhanced doc for txrx_loopback_to_file.cpp example
- Added program documentation string.
- Marked required options as required().
- Made individual option descriptions more descriptive.
- Harmonized naming of options: renamed ampl into wave-ampl.
2025-11-18 13:26:16 +01:00
Andre Zoch
2304dd21d8 example: cpp: Enhanced documentation for rx_* examples
- Added program documentation string.
- Marked required options as required().
- Added short option strings for required options.
- Made individual option descriptions more descriptive.
- Harmonized naming of options where appropriate.
  Kept old option names as alias options not getting printed by --help.
2025-11-18 13:26:05 +01:00
Martin Braun
66e08ac458 python: Apply minor formatting fixes
To signals.py and usrp_calibrator.py.
2025-11-18 11:40:55 +01:00
Martin Braun
666e02ccd5 ci: Specify tests for ad936x-based devices 2025-11-18 11:40:10 +01:00
David Raeman
f24a30333c lib: ad9361: fix rounding bug on RF PLL tuning calculations 2025-11-18 11:40:10 +01:00
Martin Anderseck
b3f4a54627 python: Split waiting for buffer from issue_stream_cmd()
This takes issue_stream_cmd() apart in a way that it can be used to
arm the trigger that waits for the TX, then return, so that the TX can
be issued. Afterwards the received data needs to be collected with the
wait_for_buffer_full() method. The default behavior when not using the
new trigger is unchanged.
2025-11-18 11:39:24 +01:00
Niels Garibaldi
fdc2872786 ci: increase fpga build timeout for X440 variants
Fixes an issue that was recently introduced with commit 2a77ec9,
which fixed the per attempt timeout of FPGA builds. Some of the
x440 FPGA builds can take longer than the default 6h timeout to
successfully compile. After the per attempt timeout bug was fixed
some of our most crowded FPGA targets were prematurely terminated,
significantly reducing compile success rate. This commit increases
the per attempt timeout from 6h to 9h.
2025-11-18 08:52:54 +01:00
Eckhard Ohlmer
bed2601c4e docs: improved getting started content
- Update link for Video RFNoC FPGA Design in GNURadio Companion
- call out devices in the Getting Started Guide TOC
2025-11-14 17:52:31 +01:00
Martin Anderseck
340b8b6c1f ci: Enable passing CMake arguments
This adds the option to pass CMake arguments to the pipeline, so that
for instance installers with more detailed logging can be built.
2025-11-14 17:50:51 +01:00
Wade Fife
89a151b873 fpga: sim: Add CHDR reset to Ctrl-only BFM
While the Ctrl-only BFM doesn't necessarily have CHDR data, it can
still use the CHDR clock. This means we need to be able to control the
reset for that clock. Without this, blocks that use the rfnoc_chdr_clk
will hang in simulation.
2025-11-13 17:03:46 -06:00
Wade Fife
550fac791f fpga: lib: Fix lint warnings about oversized constants 2025-11-12 15:11:11 -06:00
Wade Fife
3f2b1d9c32 fpga: tools: Turn off cs_server version check
The version check causes an error in Vivado that prevents the use of
JTAG/debug when users have a patch installed. This disables the error,
but it will still give a warning in case they really do have a
legitimate mismatch. This change fixes the issue when users use our
tooling to launch a build in the GUI then launch the hardware manager,
but it may still occur if they launch the GUI themselves outside of our
tooling.
2025-11-12 15:10:38 -06:00
Aki Tomita
4706e33232 host: include chrono to files using chrono_literals and other components 2025-11-07 14:56:42 +01:00
Max Köhler
34ece31af4 ci: fpga: add xsim simulation job 2025-11-04 16:48:29 -06:00
Max Köhler
9cc9fe81b7 fpga: tools: update Vivado simulator exclusions 2025-11-04 16:48:29 -06:00
Max Köhler
fbd517c65a fpga: rfnoc: enable chdr_channel_demux_tb to run in Vivado 2025-11-04 16:48:29 -06:00
azoch
ac0cd1d4df example: cpp: Enhanced documentation for tx_* examples
- Added program documentation string.
- Marked required options as required().
- Added short option strings for required options.
- Made individual option descriptions more descriptive.
- Harmonized naming of options where appropriate.
2025-11-03 17:01:29 +01:00
Martin Anderseck
0a2c16040a log: Fix C++ 20 warnings
This fixes warnings that appeared after the dependency update from C++
17 to 20.
2025-11-03 17:00:21 +01:00
Max Köhler
a5145f597f devtest: add x440 testcase for TX to RX trigger 2025-10-30 21:38:27 -05:00
Max Köhler
35e42af73a host: extend stream cmd to support TX to RX trigger 2025-10-30 21:38:27 -05:00
Max Köhler
3839c0fb2e fpga: rfnoc: add TX to RX trigger in radio core 2025-10-30 21:38:27 -05:00
Marian Koop
0f522267b4 doc: Fix B206 getting started link name
Correct link name "Getting Started with USRP B206mini-i and Python on Windows"
2025-10-29 13:09:27 +01:00
Eckhard Ohlmer
0d34f72af1 docs: moved manpages from host/docs to host/docs/manpages
Manpages have been moved into a dedicated subfolder to make it easier
to maintain uhd documentation.
2025-10-27 14:32:55 +01:00