aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* mpm/mpmd: Remove token requirement for device infoMartin Braun2019-11-262-3/+4
| | | | | This removes the token requirement for get_proto_ver() and get_chdr_width().
* examples: Update x310_rfnoc_image_core.yml exampleWade Fife2019-11-261-82/+99
|
* rfnoc: Update YAML to expose memory clock to blocksWade Fife2019-11-268-71/+71
|
* rfnoc: Replace DDC/DUC YAML variants with single versionWade Fife2019-11-264-144/+10
|
* rfnoc: Fix YAML block settingsWade Fife2019-11-2611-278/+199
|
* rfnoc: Add FIR block YAMLWade Fife2019-11-261-0/+61
|
* rfnoc: Rename thread affinity argsCiro Nishiguchi2019-11-263-73/+73
| | | | | | Rename thread affinity args such that they do not end with an integer. Arg names ending with an integer are interpreted as being targeted at a specific motherboard index in device_addr methods.
* uhd: Allow device args that have an integer in the nameCiro Nishiguchi2019-11-261-1/+5
| | | | | | Allow device args that contain an integer within the name, such as recv_offload_thread_0_cpu. Previously this would cause an invalid format exception.
* mpm: Move common mboard regs code to common locationMartin Braun2019-11-269-736/+272
| | | | | | | | | | | | | This assumes an existence of mboard_regs_control in PeriphManagerBase and implements most TK controls there. All the *_periphs.py files can now use a common class for registers, including the TK access, but also git hash, build date, and device ID access. This also fixes two issues: - set_timekeeper_time() and set_tick_period() had a bug that would incorrectly calculate the upper 32 bits of their respective registers. - N3xx had a bug that would swap around set time now and next PPS. This got auto-fixed because the common code never had this bug.
* mpm: n3xx: Improve Pylint scoreMartin Braun2019-11-262-16/+19
| | | | | | | - Replace some `if len(seq)` with `if seq` - Replace some `lambda: f()` with `f` - Formatting - Add some pylint: disable where appropriate
* tests: Add check for life on DPDK portAlex Williams2019-11-262-0/+62
|
* lib,tests: Remove old DPDK files from buildAlex Williams2019-11-264-40/+8
| | | | The DPDK files are left behind as a reference, for now.
* transport: Add new base for DPDK links, based on 18.11Alex Williams2019-11-263-0/+956
| | | | | | | | | | | | dpdk_ctx represents the central context and manager of all memory and threads allocated via the DPDK EAL. In this commit, it parses the user's arguments, configures all the ports, and brings them up. dpdk_port represents each DPDK NIC port's configuration, and it manages the allocation of individual queues and their flow rules. It also would provide access to an ARP table and functions for handling ARP requests and responses. The flow rules and ARP functions are not yet implemented.
* docs: Change DPDK version to 18.11 and make args use underscoresAlex Williams2019-11-264-33/+52
| | | | | Swap out hyphens for underscores in the DPDK args. Also update list of distributions with the correct DPDK version in the repos.
* rfnoc_graph: Modify find_blocks() to sort return valueMartin Braun2019-11-263-38/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With this patch, the elements of of the return value of find_blocks() are sorted lexicographically (specifically, using uhd::rfnoc::block_id_it::operator<()). The underlying block_container class stores the blocks in an unordered set, so the return value for find_blocks() was always sorted randomly. multi_usrp_rfnoc had to sort the return values every time find_blocks() was used to get a useful return value. Because find_blocks() had no contract for the order of returned blocks, this change simply sorts the return value before returning it. multi_usrp_rfnoc is modified to remove all the sorts that are now superfluous. A good way to see the change is to run uhd_usrp_probe, which will now contain content like this: | _____________________________________________________ | / | | RFNoC blocks on this device: | | | | * 0/DDC#0 | | * 0/DDC#1 | | * 0/DUC#0 | | * 0/DUC#1 | | * 0/DmaFIFO#0 | | * 0/Radio#0 | | * 0/Radio#1 Assuming the blocks don't change, the order of this list will always be the same following this patch. Note that the order is unrelated to the order on the control crossbar, which it never was.
* multi_usrp: Fix GPIO bank selectionMartin Braun2019-11-261-11/+68
| | | | | | | | | | When calling a multi_usrp object like this: usrp->set_gpio_attr("TXB", "CTRL", 0xFFFF); Previously, it would only be able to address daughterboard A. Now, there is a full backward-compatible solution (compatible with 3.15), that will address either daughterboard's GPIOs.
* examples: gpio: Add --list-banks optionMartin Braun2019-11-261-0/+9
| | | | | | | The gpio example can now list all available banks before running tests. Use like this: gpio --args $args --list-banks
* image builder: Add ability to pick up extra Makefile.srcs from YAMLSMartin Braun2019-11-263-1/+24
| | | | | | | | | | | | | | The blocks that are neither OOT, nor core blocks (like the DDC/DUC, etc.) require additional info to find their appropriate Makefile.srcs files. We don't include them in every build, to avoid building IP for the FFT, FIR, and other blocks when they're not needed. However, those blocks are in-tree, and don't follow the same directory structure as out-of-tree modules, either. We therefore allow the YAML files for those blocks (which are shipped with UHD) to contain a path hint to their appropriate Makefile.srcs. The image builder uses those paths to amend the `make` command appropriately.
* utils: image builder: Factor out some data to top of image_builder.pyMartin Braun2019-11-261-31/+41
| | | | | For easier maintenance, some constants like paths and maps were moved to the top of the Python file.
* liberio: porting to I/O servicesBrent Stapleton2019-11-261-11/+2
| | | | Fixes 85f0551 ("rfnoc: Add I/O service manager to X300 and MPMD")
* rfnoc: Make polling I/O service not block on flow controlCiro Nishiguchi2019-11-2611-86/+193
| | | | | | Add a new method to io_service::send_io to check whether the destination is ready for data, to make it possible to poll send_io rather than block waiting for flow control credits.
* rfnoc: Make I/O services relinquish CPU while waitingCiro Nishiguchi2019-11-264-25/+140
|
* rfnoc: image builder: Fix include pathsMartin Braun2019-11-262-6/+16
| | | | | | The -I option was broken in multiple ways: - Multiple -I options would only keep the last one - The call to make did not actually append RFNOC_OOT_MAKEFILE_SRCS
* utils: blocktool: Fix blocktoolWade Fife2019-11-2625-585/+1402
| | | | | | | | | | - Fix mako paths to run from anywhere - Correct code errors and clean up generated code - Add support for port parameters - Add support for axis_data interface - Fix NoC shell reset handling - Replace Python functions with Verilog $clog2 - Allow input and output to share port name
* examples: benchmark_rate: Add --rx_spp and --tx_sppMartin Braun2019-11-261-5/+23
| | | | These command line arguments control the spp values used for streaming.
* multi_usrp: Add set_rx_spp() callMartin Braun2019-11-263-2/+45
| | | | | | | | This API call is a more explicit way of setting the spp than passing in an spp value in the args of the stream args when creating streamers. For pre-RFNoC devices, this is done by injecting the spp arg back into the stream args. For RFNoC devices, the set_property() call on the radio is called.
* utils: image_builder: Support parameterized number of ports on blocksWade Fife2019-11-265-47/+144
|
* rfnoc: xports: Count FC bytes as multiples of CHDR widthMartin Braun2019-11-266-17/+43
| | | | | | | | SEPs on the FPGA can only occupy multiples of the CHDR width in their FIFOs, unlike SW, where buffers are stored in RAM and can be aligned anyhow. Therefore, we align the counting of bytes for FC purpose and count multiples of CHDR width instead of the true number of bytes per packet.
* rfnoc: Restrict to inline I/O service based on link restrictionsCiro Nishiguchi2019-11-263-1/+69
| | | | | For links that do not support releasing buffers out of order, restrict the I/O service manager to always select the inline I/O service.
* rfnoc: Use graph_utils in multi_usrp chan generationBrent Stapleton2019-11-261-113/+142
|
* rfnoc: Merge I/O service device args with stream argsCiro Nishiguchi2019-11-266-45/+131
| | | | | This makes it possible for users to put I/O service-related args in either the device args or stream args.
* examples: Add example out-of-tree module for RFNoC modulesSugandha Gupta2019-11-2624-0/+1811
| | | | | | | | This subdirectory is its own, self-contained project. It is supposed to work against the UHD version it is shipped with. Co-Authored-By: Martin Braun <martin.braun@ettus.com> Co-Authored-By: Wade Fife <wade.fife@ni.com>
* rfnoc: image_builder: Fix -I, allow devices/targets to bet set in YAMLMartin Braun2019-11-263-20/+23
| | | | | | | - The -I switch now allows pointing to an OOT - The image core file may now contain keys 'device' and 'default_target', which the image builder can use as default values. Command line switches --device and --target are still honoured.
* rfnoc: Split up offload I/O service into multiple filesCiro Nishiguchi2019-11-264-297/+351
|
* utils: image_builder: Fix ordering of noc_blocks, portsSugandha Gupta2019-11-261-6/+25
| | | | | | The ports in the fpga need to be ordered to make correct connections in verilog. This also keeps generated verilog constant across runs.
* mpm: Fix calculation of link_rate for UDP xportsAaron Rossetto2019-11-261-1/+1
|
* uhd: Remove all usages of boost::tuple and friendsMartin Braun2019-11-268-41/+40
| | | | | | | | | | | | | This replaces all of the following with standard C++ features: - boost::tuple - boost::make_tuple - boost::tuple::get - #include <boost/tuple/tuple.hpp> All usages were replaced with search-and-replace scripts (the usages of get could be automatically replaced with a vim macro, the rest was straightforward search-and-replace).
* uhd: Replace all occurrences of boost::bind with std::bindMartin Braun2019-11-2665-565/+572
| | | | | | | | | | | | | | | | | | | | | Note: Replacing everything with a lambda would be even better, but that can't be easily scripted so we'll do this as a first step to reduce the Boost footprint. This also removes occurences of #include <boost/bind.hpp>, and makes sure all usages of std::bind have an #include <functional>. clang-format wasn't always applied to minimize the changeset in this commit, however, it was applied to the blocks of #includes. Due to conflicts with other Boost libraries, the placeholders _1, _2, etc. could not be directly used, but had to be explicitly called out (as std::placeholders::_1, etc.). This makes the use of std::bind even uglier, which serves as another reminder that using std::bind (and even more so, boost::bind) should be avoided. nirio/rpc/rpc_client.cpp still contains a reference to boost::bind. It was not possible to remove it by simply doing a search and replace, so it will be removed in a separate commit.
* examples: updating radio loopbackBrent Stapleton2019-11-262-113/+155
| | | | Modified to run with the new RFNoC API.
* rfnoc: Adding rfnoc_graph utilitiesBrent Stapleton2019-11-264-0/+203
| | | | | | | Adding graph_utils to keep rfnoc_graph utilities to contain helper function and commonly used algorithms for the rfnoc_graph. These functions aren't core to the rfnoc_graph's functionality, so we'll keep them out of its API.
* tools: rfnoc dissector: Add EOB and EOV into treeMartin Braun2019-11-261-4/+13
| | | | This will display EOB and EOV flags in the Wireshark dissector window.
* examples: benchmark_rate: Remove usage of boost::posix_timeMartin Braun2019-11-261-18/+25
| | | | | Replace with std::chrono functions instead, in our effort to reduce Boost footprint.
* mpmd: Add skip_oldlog device argMartin Braun2019-11-261-0/+8
| | | | | | | | | | This device arg will avoid printing old log messages by dumping all log messages in the buffer immediately after claiming a device. This can be helpful because reading old log messages can be confusing during debug situations, or simply during situations where we expect errors to contain warnings or errors, but we want to hide them. skip_oldlog defaults to off, i.e., the previous behaviour.
* mpmd: Skip generation of mb_controller and mb_iface for skip_init=1Martin Braun2019-11-261-3/+6
| | | | | | | | | The mpmd_mb_controller requires access to the fully functional FPGA, which in turn assumes flawless initialization. skip_init doesn't init at all, so inializing an mb_controller may not be possible, and shouldn't be attempted. This skips init of both mb_iface and mb_controller for skip_init, leaving it to the other code to figure out if they are initialized.
* examples: Add Rx/Tx stream args parameters to benchmark_rateAaron Rossetto2019-11-261-0/+5
|
* uhd: Introduce I/O service managerAaron Rossetto2019-11-2627-183/+1341
| | | | | | | | | | | | | | | | | | | | | | | | | | - Implement I/O service detach link methods - The I/O service manager instantiates new I/O services or connects links to existing I/O services based on options provided by the user in stream_args. - Add a streamer ID parameter to methods to create transports so that the I/O service manager can group transports appropriately when using offload threads. - Change X300 and MPMD to use I/O service manager to connect links to I/O services. - There is now a single I/O service manager per rfnoc_graph (and it is also stored in the graph) - The I/O service manager now also knows the device args for the rfnoc_graph it was created with, and can make decisions based upon those (e.g, use a specific I/O service for DPDK, share cores between streamers, etc.) - The I/O Service Manager does not get any decision logic with this commit, though - The MB ifaces for mpmd and x300 now access this global I/O service manager - Add configuration of link parameters with overrides Co-Authored-By: Martin Braun <martin.braun@ettus.com> Co-Authored-By: Aaron Rossetto <aaron.rossetto@ni.com>
* rfnoc: Make trasnport safe to use with offload threadsCiro Nishiguchi2019-11-266-9/+43
| | | | | | | Make transports safe to use with an offload thread by ensuring that the callbacks and the API methods can execute concurrently. Also, ensure that the transports release their I/O service clients prior to allowing their other member variables be destroyed.
* transport: Implement eov indications for Rx and Tx streamsAaron Rossetto2019-11-2611-58/+711
|
* tests: Change Python YAML moduleBrent Stapleton2019-11-261-1/+6
| | | | Use Python's `ruamel.yaml` module instead of `yaml`
* rfnoc: rename block clocks to ce_clkPaul Butler2019-11-265-15/+15
| | | | | | Renaming the CE clock in the RFNoC block YAML files so that the name is consistent across blocks. Corresponding `fpga` changes can be found in `rfnoc: rename block clocks to ce_clk`.