aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/rfnoc
Commit message (Collapse)AuthorAgeFilesLines
* rfnoc: Add default block controllerMartin Braun2019-11-264-2/+28
| | | | | The default block controller should get instantiated when no other suitable block controller can be found.
* rfnoc: Add DDC block controllerMartin Braun2019-11-262-0/+558
|
* rfnoc: Added clock_iface to convey info about clocksAshish Chaudhari2019-11-262-19/+26
| | | | | The inteface provides a mechanism for users of clocks to query information such as the running status or rate
* rfnoc: Use RTTI "serialization" for stream commandsMartin Braun2019-11-261-0/+24
| | | | | | | | 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.
* rfnoc: Support for new backend iface plus fixesAshish Chaudhari2019-11-261-10/+12
| | | | | | - Add support for new backend iface with max_async_msgs and mtu moved to after the noc ID - Fixed offsets for block info registers
* rfnoc: Add rfnoc_graph classMartin Braun2019-11-262-0/+161
| | | | This replaces device3() for RFNoC applications.
* rfnoc: Change Block-ID format to 0/FFT#1Martin Braun2019-11-261-1/+1
| | | | | | | 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.
* rfnoc: Add block registry/factory and make_argsMartin Braun2019-11-263-0/+108
| | | | | | - noc_block_base now has a ctor defined - The registry stores factory functions to the individual Noc-Block implementations
* rfnoc: Add block_poke support to reg_iface async msgAshish Chaudhari2019-11-261-4/+4
| | | | | The async message callback now has a vector of data words instead of a single one
* rfnoc: adding client_zeroBrent Stapleton2019-11-262-0/+214
| | | | | | | | | | - 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>
* rfnoc: Added impl for reg_iface and ctrl_endpointAshish Chaudhari2019-11-264-1/+655
| | | | | | | | - 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
* rfnoc: node: Add default command time APIMartin Braun2019-11-261-0/+23
|
* rfnoc: Add action APIMartin Braun2019-11-264-0/+187
| | | | | | | | - 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
* rfnoc: Added initial impl for mgmt_portalAshish Chaudhari2019-11-262-1/+998
| | | | | | | - 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
* rfnoc: Refactored CHDR packet interfacesAshish Chaudhari2019-11-264-0/+656
| | | | | | | - 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
* rfnoc: Add property propagation, Boost.Graph storageMartin Braun2019-11-263-9/+764
| | | | | | | | | | | | - 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
* rfnoc: Add detail::block_container_t classMartin Braun2019-11-262-0/+75
| | | | | This is a storage for the noc_block_base derivatives. It supports finding blocks.
* rfnoc: Add noc_block_base classMartin Braun2019-11-262-0/+12
| | | | This is a parent class for all block controllers.
* rfnoc: Add properties, nodes, and accessorsMartin Braun2019-11-262-0/+120
| | | | | | | | | | | | | | 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.
* rfnoc: block_id: Add more info when ctor failsMartin Braun2019-11-261-1/+2
|
* rfnoc: Read cmd FIFO size from blocks & configure ctrl_ifaceMartin Braun2019-09-042-4/+18
| | | | | | | | | | This requires noc_shell compat number 6.0. It will allow sending as many command packets, but no more, than there is space. Updated FPGA images for devices: - X310/X300 - N300/N310/N320 - E310/E320
* RFNoC: Re-enable flow ctrl for blocks on same xbarMichael West2019-08-141-1/+1
| | | | | | | | | | | Prior commit disabled flow control for all lossless links, including links between blocks on the same crossbar. That caused packets to jam up the crossbar leading to control packets failing to ACK under certain conditions. This reverts it so flow control is enabled and the crossbar is kept clear. Signed-off-by: Michael West <michael.west@ettus.com>
* rfnoc: fix multidevice graph connectionsMark Meserve2019-08-061-96/+107
| | | | | | | - Fixes an issue where a multi-device device3 object would cause connections to be generated across devices in legacy_compat - The connect_blocks function previously assumed that find_blocks would always return blocks in the same device number order
* rfnoc: Add update_graph() API callMartin Braun2019-07-153-12/+9
| | | | | | Blocks that change scaling, tick rate, or sampling rate can now notify the graph to update streamers. Before, this was handled only by mult_usrp, and only for DDC and DUC blocks.
* device3: Remove unused 'rate' argument from update_?x_streamers()Martin Braun2019-07-151-2/+2
|
* device3: rfnoc: formatting changesBrent Stapleton2019-07-152-9/+10
| | | | | | | | | | | | | Applying clang-format to files used in upcoming changes. clang-format -i --style=file host/include/uhd/rfnoc/node_ctrl_base.hpp clang-format -i --style=file host/lib/rfnoc/ddc_block_ctrl_impl.cpp \ host/lib/rfnoc/duc_block_ctrl_impl.cpp \ host/lib/rfnoc/legacy_compat.cpp \ host/lib/usrp/device3/device3_impl.cpp \ host/lib/usrp/device3/device3_impl.hpp \ host/lib/usrp/device3/device3_io_impl.cpp \ host/lib/usrp/x300/x300_impl.cpp
* nocscript: add optional port argument to block sr_writeMark Meserve2019-07-101-4/+15
|
* rfnoc: tick_node: Search all nodes for tick ratesMartin Braun2019-05-081-3/+5
| | | | | | | | | | | | | | | | | The tick_node was trying to find the current tick rate by only querying active blocks (i.e., blocks that were flagged active-streaming). However, this is not necessary since we require all blocks to run at the same tick rate. In theory, querying active-only ports should be fine, but due to some idiosyncrasies in our current graph code, connecting a single streamer to channel 1 (out of 0, 1) would try and get the info from the wrong port. This is not a fix to the graph code, but the change to tick_node is also appropriate and is sufficient to fix the "late packets on channel 1" issue. This issue would manifest when sending timed packats to channel 1 in a single-channel streamer. The problem is that it wouldn't be able to read the correct tick rate.
* device3: Constraint send/recv_frame_size based on down/upstream MTUSugandha Gupta2019-05-013-5/+27
| | | | | | We need to properly contraint the send/recv_frame_size based on the minimum MTU of all the down/upstream blocks. This fixes the issue with E310 tx/rx streaming as it has smaller MTU sizes than the other usrps.
* TwinRX: Fix duplicate write to N value in DDCmichael-west2019-03-261-2/+1
| | | | | | | The N value was getting written twice and the second value being written was 1, which works for all use cases except when using TwinRX. This change fixes several issues with TwinRX including streaming failing to stop cleanly and incorrect decimation.
* uhd: mpm: update all license header w/ "-or-later"Brent Stapleton2019-03-082-2/+2
| | | | Updating all SPDX license identifiers to include "-or-later"
* RFNoC: Remove incorrect flushMichael West2019-03-051-19/+0
| | | | | | | | | | | | Removing the flush in configure_flow_control_out(). The flush is done incorrectly because it just disables flow control and allows packets to dump onto the crossbar, which could lock it up. It is also incorrect to flush when connecting blocks. A connect should just configure the SID and flow control and let any existing data flow to the newly connected block. Flushing of a block should only be done during creation or destruction of the block. Signed-off-by: Michael West <michael.west@ettus.com>
* Revert "RFNoC: Fix flush in source_block_ctrl_base"Michael West2019-03-051-1/+18
| | | | | | This reverts commit 655b9b0f8e8f8556d434404da51aaccd124bbc3a. Signed-off-by: Michael West <michael.west@ettus.com>
* lib: Fix various type-conversion compiler warningsMartin Braun2019-02-284-5/+7
| | | | | This makes more type-conversions explicit, to reduce the number of warnings specifically for MSVC.
* RFNoC: Fix flush in source_block_ctrl_baseMichael West2019-02-181-18/+1
| | | | | | | | | | The configure_flow_control_out function was set to dump any packets onto the crossbar, which could cause issues on the crossbar and in downstream blocks. Replacing wil a call to the _flush() function in the block_ctrl_base parent class, which drops the packets so they do not get put onto the crossbar. Signed-off-by: Michael West <michael.west@ettus.com>
* RFNoC: Disable FC ACK packets for lossless linksMichael West2019-02-182-8/+15
| | | | | | | FC ACK packets are unnecessary on lossless links and degrade overall performance. This change disables those packets on all lossless links. Signed-off-by: Michael West <michael.west@ettus.com>
* fixup! RFNoC: Fix scaling of M and N values in DDC/DUCMark Meserve2019-02-081-1/+1
|
* RFNoC: Limit number of control packets in flightmichael-west2019-01-311-2/+2
| | | | | | | | Limit number of unacknowledged control packets to the number of receive frames in the transport to prevent the transport from getting locked up or being overrun by ACK packets. Signed-off-by: michael-west <michael.west@ettus.com>
* RFNoC: Fix typos in legacy_compatmichael-west2019-01-311-2/+2
| | | | Signed-off-by: michael-west <michael.west@ettus.com>
* X300: Fix tick and sample rate settingmichael-west2019-01-311-6/+8
| | | | | | | | | | | | - Removed incorrect function call to set tick rate in x300_radio_ctrl_impl. - Modified legacy compat layer to properly set tick and sample rates. These changes eliminate the tick and sample rate warnings during X300 initialization if TwinRX is used and allow for TwinRX to be used alongside other types of daughterboards in the same X300. Signed-off-by: michael-west <michael.west@ettus.com>
* RFNoC: Fix scaling of M and N values in DDC/DUCmichael-west2019-01-312-3/+10
| | | | | | | Scale the M and N values if the tick_rate differs from the sample rate. Fixes timestamps in packets when using TwinRX on X300. Signed-off-by: michael-west <michael.west@ettus.com>
* fixup! RFNoC: More graph traversal fixesmichael-west2019-01-312-4/+4
|
* RFNoC: More graph traversal fixesmichael-west2019-01-312-1/+3
| | | | | | | | | | - Store number of input and ouptput ports from block definition. - Use number of input and ouptut ports for graph traversal rather than number of connected blocks. - Fixes DAC synchronization failure errors when using only one TX channel on X300. Signed-off-by: michael-west <michael.west@ettus.com>
* lib: rfnoc: Add some missing virtual destructorsMartin Braun2019-01-223-2/+8
|
* formatting: Apply clang-format to nocscript filesMartin Braun2019-01-228-557/+499
|
* transport: muxed_zero_copy_if fixesmichael-west2019-01-211-1/+1
| | | | | | | | | | Changed muxed_zero_copy_if to make each stream buffer the same number of frames as the underlying transport and changed the size of the underlying control transport for X300 and MPMD devices to match the size of the command FIFO in order to prevent starvation of any single control transport. Added some constants to remove hard coded values. Signed-off-by: michael-west <michael.west@ettus.com>
* rfnoc: Fix detection of outstanding acks by ctrl_ifaceMartin Braun2019-01-171-4/+3
| | | | | | | There was a bug where the number of outstanding ACKS in RFNoC's ctrl_iface was derived from the number of recv frames, which was wrong. A number that was too low would effectively break timed commands on tune, which would, e.g., affect phase alignment.
* lib: rfnoc: apply clang-formatMartin Braun2019-01-1729-1905/+1859
| | | | | | This is a continuation of 967be2a4. $ clang-format -i -style=file host/lib/rfnoc/*.cpp
* formatting: remove vim hints in headersBrent Stapleton2019-01-164-4/+0
| | | | | Remove trailing vim hints in header files. This functionality will be replaced by clang-format.
* RFNoC: Fix stream command propagationmichael-west2018-12-201-1/+1
| | | | | | - Corrects parameter from output port to input port of node - Fixes issue on nodes with different number of input and output connections