| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
A small modification to rfnoc::action_info makes it polymorphic, and
instead of serializing data structures into a string, this allows
creating custom action objects and identifying them via RTTI. The stream
command action object is a good example for how to use this, so all the
usages of stream command action objects were converted to this scheme.
|
| |
|
|
|
|
|
|
| |
- Add support for new backend iface with max_async_msgs and mtu
moved to after the noc ID
- Fixed offsets for block info registers
|
|
|
|
| |
This replaces device3() for RFNoC applications.
|
|
|
|
|
|
|
|
| |
This structure represents information about a graph edge. Required by
detail::graph and rfnoc_graph.
graph_edge_t::to_string() will now provide a textual representation of
the edge.
|
|
|
|
|
| |
All USRP device impls that are RFNoC devices will need to derive from
this (instead of device3).
|
|
|
|
|
|
|
| |
Previously, it was 0/FFT_1. The counter was separated by an underscore.
Now, we separate by a # symbol to allow for underscores in block names.
This means 'FIR_Filter' is now a valid blockname.
|
|
|
|
|
|
| |
- noc_block_base now has a ctor defined
- The registry stores factory functions to the individual Noc-Block
implementations
|
|
|
|
|
| |
The async message callback now has a vector of data words instead
of a single one
|
|
|
|
|
|
|
|
|
|
| |
- Adding client_zero class, which gathers information about our device
form the global registers on port 0 of the RFNoC backend registers.
- adding unit tests to exercise client_zero
- mock_reg_iface class: adding fake register_iface so we can run
unit tests in software only
Co-authored-by: Martin Braun <martin.braun@ettus.com>
|
|
|
|
|
|
|
|
|
| |
Adding mixin class that manages holding onto a register_iface.
Deriving from this new class in noc_block_base, as it needs access to
a register_iface.
Co-authored-by: Brent Stapleton <brent.stapleton@ettus.com>
|
|
|
|
| |
This is a continuation of a76ce96c.
|
|
|
|
|
|
|
|
| |
- Added new register_iface class that translates high-level
peek/poke calls into CHDR control payloads
- Added new chdr_ctrl_endpoint class that emulates a control
stream endpoint in SW. It can create and handle multiple
register interfaces
|
| |
|
|
|
|
|
|
|
|
| |
- Added action_info class
- Allow to send actions from node to node
- Allow to post actions into nodes
- Allow to set default forwarding policies
- Added unit tests
|
|
|
|
|
|
|
| |
- The management portal is the interface for the framework
to allow discovering the data topology, setup routes between
stream endpoints and configure streamers
- Use a zero_copy_if and the mgmt_paylod to send/recv packets
|
|
|
|
|
|
|
| |
- Moved packet interface code from public to private include
- Split packet interface into two files: payload paring and packet iface
- Added support for all CHDR packet types
- Added more test cases to unit test
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Adds a detail::graph_t class, which handles the propagation
- Adds methods to node_t to aid with propagation
- Adds unit tests
- Adds dynamic property forwarding:
Nodes are now able to forward properties they don't know about by
providing a forwarding policy. A good example is the FIFO block which
simply forwards most properties verbatim.
- node: Temporarily disabling consistency check at init
|
|
|
|
|
| |
This is a storage for the noc_block_base derivatives. It supports
finding blocks.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is an initial generator for eRFNoC block.
The script generates the top level block, the shell module, a testbench, and a
Makefile as well as a Makefile.srcs.
To build a block from a yml file one has to invoke
python -c <config> -d <destination folder>
destination folder should be an in tree module folder located in
uhd-fpga/usrp3/lib/erfnoc/blocks
The build tool supports all interface types for control as well as data.
For each interface type there are three templates to generate the variable
block in the top level block and the shell
* declare the wires
* connect the wires
* instantiate the modules
The first two are used in the shell module as well as in the top level block.
The last is for the shell only.
|
|
|
|
|
| |
Its purpose is to provide a device-agnostic back-channel interface into
the device guts for all rfnoc_graph devices.
|
|
|
|
| |
This is a parent class for all block controllers.
|
|
|
|
| |
This is a generic CHDR interface that abstracts out the bus width.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds the following classes:
- uhd::rfnoc::node_t, the base class for RFNoC nodes
- uhd::rfnoc::node_accessor_t, a class to access private properties
- uhd::rfnoc::res_source_info, a struct that identifies where properties
come from
- uhd::rfnoc::property_t, and property_base_t (its parent)
- uhd::rfnoc::prop_accessor_t, a class to access properties
Add always dirty property (dirtifier).
Also adds unit tests for properties.
|
| |
|
| |
|
|
|
|
|
| |
This completely eliminates the need for cmd_time_ctrl in the TwinRX
codebase, reducing the number of dependencies on the X300 codebase.
|
| |
|
|
|
|
|
|
|
| |
uhd::get_system_time() is currently only used in USRP1 code, and it
turns out that our "optimized", platform-dependent implementation still
is a little slower than straight-up chrono. We therefore remove all the
special cases, and replace them with a single, standard solution.
|
|
|
|
|
|
| |
Benchmarks show that using C++ chrono features beats
uhd::get_system_time(), and the latter is simply not appropriate unless
a uhd::time_spec_t is required.
|
| |
|
| |
|
| |
|
|
|
|
| |
Applying formatting in anticipation of upcoming changes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add convenience factory for making a gain group that has a single
zero-valued element. This factory requires a name, which should
probably be ALL_GAINS, or something similar (these constants are
device-specific).
Using this new make_zero factory in the X300 radio control when we
don't find any gain elements so that our gain groups aren't empty. This
simplifies our later setters/getters because we know that we'll always
have _something_ cached.
Note that we only register this zero value gain group for TX, as our
ADC is registered as a gain element, so our RX gain groups are never
empty.
|
|
|
|
|
| |
These differ from the item32 converters in that they don't IQ swap, and
also don't have a BE/LE version.
|
| |
|
|
|
|
|
|
|
|
| |
The difference between the _chdr converters and the _item32_ converters
is that the former do not require item32 boundaries, they do not require
endianness swapping, and they don't use IQ swapping either.
This is possible because the FPGA will do byte-swapping.
|
| |
|
| |
|
|
|
|
|
| |
The new signature uses tuple as the return value, instead of passing in
output variables as references (C-style).
|
|
|
|
|
| |
This is the inverse to std::to_string(), and we can overload it with
UHD-internal types.
|
|
|
|
| |
This is the only occurrence of boost::unordered_map in UHD.
|
|
|
|
|
| |
This mode is never used, and makes it more cumbersome to maintain this
code.
|
|
|
|
|
|
|
| |
The custom copy ctor for dirty_tracked was using the = operator, which
wouldn't necessarily copy the dirty flag. By removing it (and thus using
the default copy ctor), the copied dirty_tracked object now has the same
value *and* dirty flag as the original.
|
| |
|
|
|
|
| |
This is the only occurrence of boost::atomic in UHD.
|
|
|
|
| |
Newer devices may be able to provide more then 32 bits worth of samples.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add the following exception types:
- rfnoc_error
- op_failed
- op_seqerr
- op_timeout
- op_timeerr
- access_error
- It is meant to be used when access violations have taken place,
i.e., when a resource is being accessed without appropriate
permissions.
- resolve_error
- This is a derivative of rfnoc_error, and will be used when a
property resolution fails unexpectedly.
- routing_error
- For use when the framework has path setup issues or general
routing-related errors
|
|
|
|
|
|
|
|
|
| |
This removes the following symbols:
- otw_type_t
- clock_config_t
- Any functions that use those symbols
- Non-standard args from examples (e.g., --total-time is deprecated in
favour of --duration)
|