| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
This is a cal container for all types of power cal (RX or TX) that rely
on a single, overall gain value.
Includes Python API.
|
|
|
|
|
|
| |
This allows to treat a std::map<KeyType<std::map<KeyType, ValueType>> as
a set of x-y coordinates, and bilinearly interpolate a z-value given
four x/y pairs.
|
|
|
|
| |
This reverts commit 49ca8112c2777fcc4b81eff72ce59fb40fa0024d.
|
|
|
|
|
|
|
| |
This script replaces CMake's package_source implementation to allow
for pulling in the firmware, fpga, mpm, host, and tools folders.
This builds two tarballs, one with and one without the firmware,
fpga, and mpm folders.
|
|
|
|
|
|
| |
The usrp_burn_mb_eeprom previously updated the EEPROM at the end of the
script, regardless of whether any values were actually specified for
write. This skips the EEPROM write for read only usage.
|
|
|
|
|
|
|
|
|
|
|
| |
Starting with 1.0.22, libusb considers libusb_set_debug() deprecated.
This replaces said call with libusb_set_option(), conditionally on the
libusb version. This has no effect on the execution, but will remove
some compiler versions, and make this code more future-proof.
Note that Ubuntu 18.04 ships libusb 1.0.21, so this conditional code
needs to remain until that version is deprecated and libusb version is
bumped higher.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The existing implementation would create a real signal for any type of
signal (CONST, RAMP, SQUARE, and SINE), and then create the complex
signal by simply delaying the Q value by a 90 degree phase. This had
surprising results for all waveforms:
- CONST waveforms would have a baseband value of ampl + j ampl, thus
increasing the output power by 3 dB vs. what one would expect when
setting an amplitude. It is now ampl + j * 0, and the power is
ampl**2. This now makes the power consistent with SINE, which it was
not, even though a const signal is a sine signal with a frequency of
zero.
- SQUARE waveforms would phase-delay the Q part, thus resulting in three
power output levels (when both phases are zero, when both phases are
ampl, and when one of them is zero and other is ampl). However, the
square signal is useful for watching it in the scope, and there, it
helps if the power is predictably either high or low within the
selected frequency. The Q value is now always zero.
- RAMP waveforms had the same issue and were also resolved by setting
Q to zero.
- SINE signals were fine, although the implementation used sin + j cos
to calculate a complex sine, not cos + j sin according to Euler's
formula.
To make this wavetable more useful with absolute power settings, the
changes mentioned above were implemented. The dBFs power of CONST and
SINE can now be calculated by using ampl**2, SQUARE by using
(ampl**2)/2, and RAMP by solving the integral over a ramp from -1 to 1.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
The axis_data_to_chdr block previously only sampled the sideband
information at the end of the packet. This adds a parameter that
controls if the sideband information should be sampled at the beginning
of the packet or the end of the packet. In the former case, large
internal packet buffers are not required.
|
|
|
|
|
|
| |
Add -voptargs=+acc to the default options when running vsim. This
option enables debug command access to objects in the design, which is
generally needed for debugging in the GUI.
|
| |
|
|
|
|
|
|
|
| |
The axis_split module takes a single AXI-Stream input and duplicates it
onto multiple AXI-Stream outputs. This block correctly handles the
somewhat tricky flow-control logic so that the AXI-Stream handshake
protocol is honored at all top-level ports.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commits enables the FPGA build infrastructure to require a very
specific Vivado version, all the way to the patch level.
Vivado typically has the following version format:
Year.release.update_patch
This commit enables setupenv_base.sh to optionally look for the
environment variable VIVADO_VER_FULL, which should contain the
full Vivado version in the format specified above.
Vivado is directly used to retrieve the installed version, returning
an error if the requested version is not found.
Example in setupenv.sh (which calls setupenv_base.sh):
VIVADO_VER=2019.1
VIVADO_VER_FULL=2019.1.1_AR73068
The setupenv.sh script will setup Vivado 2019.1, but it will also
verify that both Update 1 and patch AR73068 are installed.
|
|
|
|
|
|
|
| |
It was possible that output to cout would become interleaved inside of the
uhd log messages.
Signed-off-by: mattprost <matt.prost@ni.com>
|
|
|
|
|
| |
This removes -Wmaybe-uninitialized and -Wclass-memaccess from this file
when using gcc.
|
|
|
|
|
| |
At /mboards/0/usb_version, we can now read back an int. It's either 2 or
3, depending on what we're using.
|
|
|
|
|
|
|
|
| |
This separates the rfnoc block tests into files for each specific block.
This was done to improve the readability of these files and declutter
the tests directory.
Signed-off-by: mattprost <matt.prost@ni.com>
|
|
|
|
|
|
| |
Add some additional documentation to the Configuration Devices and
Streamers and Transport Notes pages regarding stream arguments and
their use.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When using multi_usrp with an RFNoC device, the previous behaviour was
to throw an exception when calling recv_async_msg() so users would know
they're not supposed to call it (calling tx_stream::recv_async_msg is
preferred). However, this breaks too many existing applications.
Instead, we keep a weak pointer to the streamer, the same way that older
devices do, and query the async message from that. This means that
calling recv_async_msg() when there are multiple streamers can lead to
unexpected behaviour, but that's a general issue with
multi_usrp::recv_async_msg() and this way, the RFNoC devices now behave
like older devices do.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds (and calls) methods to manually pass radio block sample rate
to the input/output properties of the ddc/duc during creation of the
multi_usrp_rfnoc object. The ddc/duc require this information in order
to return valid, possible output/input sample rates in
get_rx_rates()/get_tx_rates().
Before, the ddc/duc wouldn't have this rate until the rfnoc_graph had
been connected and committed, which happens in
get_rx_stream()/get_tx_stream(). Thus, this fixes an issue where a user
was unable to query possible sample rates prior to specifying a sample
rate and creating a stream.
|
|
|
|
|
| |
This replaces incorrect code with the proper function calls to retrieve
the range of possible sample rates.
|
| |
|
|
|
|
|
| |
The current reset routines write a '1' twice for reset, instead of '0'
then '1' (resets get triggered on a rising edge).
|
|
|
|
|
|
|
| |
Xilinx changed the way [all_registers -edge_triggered] is treated such
that set_max_delay constraints that use it can cause segmentation and
cause clocks to not be propagated to all endpoints. Changing to
[all_ffs] avoids this potential issue.
|
|
|
|
|
| |
A test to check the address was using a & instead of a %, resulting in
a -Wtautological-compare.
|
|
|
|
|
|
|
| |
If a user specifies a multi-device query, such as "serial0=1234,serial1=4321",
we have to look up the preferences for each device. To minimize the
impact to non-x400 devices, I simply push the get_usrp_args call down
into mpmd_impl and mpmd_find.
|
| |
|
|
|
|
|
| |
Pragma once is the more modern version of include guards, eliminating
any potential problems with mistyping include guards. Let's use those.
|
|
|
|
|
|
|
|
|
| |
We have integer 32-bit serial numbers for MPM devices, for example
"1234abcd". For serial numbers which have less than eight digits,
e.g. "123abcd", a user may feel inclined to prefix this number with
a 0 when they are searching for devices, e.g. "0123abcd". This change
makes it so that specifying "0123abcd" will match a device with serial
number "123ABCD".
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
On systems which have spaces in the environment variables, such as
$PATH, attempting to run the generated test scripts will throw an error
about a bad variable name. Adding quotes around the values prevents
this error.
|
| |
|
|
|
|
|
|
|
|
| |
- Moves linear_interp from cal to utils
- Moves the interp_mode enum class to interpolation.hpp
- Adds three interpolation methods for maps: at_interpolate_1d(),
at_nearest(), at_lin_interp()
- Adds unit tests
|
| |
|
|
|
|
|
| |
There were spurious boost includes left in here after applying 7ad64600f
and a1f96194.
|
|
|
|
| |
CMAKE_CXX_FLAGS will now respect $CXX_FLAGS.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Up until now, we completely ignore the XDG specification.
This commit does the following to change that:
- It uses XDG_DATA_HOME and XDG_CONFIG_HOME for cal and config data,
respectively.
- If config data is in ~/.uhd/uhd.conf, that is still accepted, but if
it conflicts with $XDG_CONFIG_HOME/uhd.conf, it is ignored and a
warning is displayed
- The default location for cal data is thus ${HOME}/.local/share/uhd/cal
on Unix, and %LOCALAPPDATA%\uhd\cal on Windows. This is a change in
location!
- The UHD_CONFIG_DIR environment variable was confusingly named and is
now removed. It provided an alternative location than the home
directory. The same purpose is now much better served by XDG_DATA_HOME
and XDG_CONFIG_HOME.
The specification can be found here:
specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
|
|
|
|
|
|
|
| |
Allows RFNoC blocks to perform register peeks and pokes on blocks with
multiple channels without having to worry about handling register address
translation every time.
Signed-off-by: mattprost <matt.prost@ni.com>
|
|
|
|
|
|
|
|
|
|
|
| |
This utility class implements the register access methods of reg_iface
but adds built-in address translation features for consecutive instances of
an RFNoC block. The register peek and poke methods accept an extra 'instance'
parameter which is used to calculate the absolute address for the register
access. This can be used for accessing registers for the different channels
of a multi-channel block (i.e. Radio, DDC, DUC, etc).
Signed-off-by: mattprost <matt.prost@ni.com>
|
|
|
|
|
|
|
|
|
|
|
| |
The utilities uhd_cal_rx_iq_balance, uhd_cal_tx_iq_balance, and
uhd_cal_tx_dc_offset now add the flags to ignore cal files. Otherwise,
the utility would load existing cal data before generating new cal data.
Note that this is not a huge problem, because the cal coefficients get
overwritten during the cal process, but is unnecessary disk I/O.
This commit also happens to remove all boost::format uses within
usrp_cal_utils.hpp.
|
|
|
|
|
|
|
|
|
| |
This will convert cal data files based on CSV to the new binary format.
In most cases, running
./convert_cal_data.py
is sufficient.
|
|
|
|
|
|
|
|
|
| |
Now that we have cal::iq_cal and cal::database, there's no need to
manually wrangle CSV files for calibration data. This commit replaces
all CSV operations with cal::database calls and uses cal::iq_cal as
a container.
CSV files can still be read, but are considered deprecated.
|
|
|
|
|
|
|
|
| |
This class can be used to store calibration coefficients for the X300
DC offset and IQ imbalance calibration.
Note: This also modifies Doxyfile.in to not document files generated by
flatc.
|
|
|
|
|
|
|
| |
This adds uhd::usrp::cal::container, which serves as a base class for
calibration data.
It also provides the interp_mode enum class which can be useful for
future calibration classes.
|
|
|
|
|
|
| |
viv_utils.tcl will now read files with the .sdc suffix using the
read_xdc Vivado command. This is especially useful when I/O timing
constraints in the FPGA and CPLD need to depend on a common constant.
|