Thanks Jonathon,
OK. I will give 'master' a try. But, I would really like to understand why
this is happening so that I have a better understanding of how the
action/property forwarding works. Given the two things I mentioned, the
radio's policy of Drop and the fact that the Replay block uses different
ports, it seems to me that either of these should allow a resolvable
propagation.  Let me know if you have any thoughts on this.

Maybe there are some things that are block-related rather than port-related
(perhaps MTU policy?).  If that is the case, then for me it is a good
argument for having four 1-port Replay blocks rather than one 4-port Replay
block (and the same for DDC/DUC/Radio or any multi-port block).

Rob

On Wed, Feb 9, 2022 at 1:25 AM Jonathon Pendlum <[email protected]>
wrote:

> Hi Rob,
>
> 3) I see that on 'master', the Replay block was modified to change the
>> default forwarding to Drop. Perhaps this would fix the issue, but it
>> doesn't seem like it given that the Radio is already set to Drop.
>
>
> I can't explain why when using different ports you still get the
> propagation error, but I'd highly suggest giving the master branch a try.
> It fixed the case you are describing when using the same port.
>
> Jonathon
>
> On Wed, Feb 9, 2022 at 12:22 AM Rob Kossler <[email protected]> wrote:
>
>> Hi,
>> I created a simple example that implements an RFNoC graph between the
>> Replay block and the Radio block on an N310 using UHD 4.1.0.5.  The idea is
>> that Replay Port 0 connects to the Tx Radio for playing out samples and
>> then the same Rx Radio connects to Replay Port 1 for capturing the Rx
>> samples.  The simple source code is included at the bottom of this email
>> with the relevant part highlighted.
>>
>> The example produces the error message below which indicates a circular
>> graph, I think. I can fix it by replacing the "connect_through_blocks()"
>> with "graph->connect()" and skipping property propagation on one connection.
>>
>> I do not understand why this graph as-is causes a propagation error. Here
>> are some remarks:
>> 1) The Replay port numbers are different.  Given that the Replay
>> controller on branch 4.1 does not modify the default forwarding and that
>> the default forwarding is One-to-One, it seems that different port numbers
>> should not cause a circular propagation.
>> 2) Additionally, given that the Radio block sets its forwarding to Drop,
>> it seems that there shouldn't be an issue even if the Replay block port
>> numbers were the same.
>> 3) I see that on 'master', the Replay block was modified to change the
>> default forwarding to Drop. Perhaps this would fix the issue, but it
>> doesn't seem like it given that the Radio is already set to Drop.
>>
>> Please let me know if you know why this graph causes an error.
>> Rob
>>
>> // Console ERROR
>> [ERROR] [RFNOC::GRAPH::DETAIL] Adding edge 0/DDC#0:0 -> 0/Replay#0:1
>> without disabling property_propagation_active will lead to unresolvable
>> graph!
>> Error: RfnocError: Adding edge without disabling
>> property_propagation_active will lead to unresolvable graph!
>>
>> // Example APPLICATION
>> #include <uhd/rfnoc/block_id.hpp>
>> #include <uhd/rfnoc/radio_control.hpp>
>> #include <uhd/rfnoc/replay_block_control.hpp>
>> #include <uhd/rfnoc_graph.hpp>
>> #include <uhd/utils/graph_utils.hpp>
>> #include <uhd/utils/safe_main.hpp>
>> #include <boost/program_options.hpp>
>>
>> namespace po = boost::program_options;
>>
>> using std::cout;
>> using std::endl;
>>
>> int UHD_SAFE_MAIN(int argc, char* argv[])
>> {
>> std::string args;
>>
>> po::options_description desc("Allowed Options");
>> // clang-format off
>> desc.add_options()
>> ("help", "help message")
>> ("args", po::value<std::string>(&args)->default_value(""), "multi uhd
>> device address args")
>> ;
>>
>> po::variables_map vm;
>> po::store(po::parse_command_line(argc, argv, desc), vm);
>> po::notify(vm);
>>
>> // Print help message
>> if (vm.count("help"))
>> {
>> cout << "Replay graph test " << desc << endl;
>> return EXIT_FAILURE;
>> }
>>
>> /************************************************************************
>> * Create device and block controls
>> ***********************************************************************/
>> cout << endl;
>> cout << "Creating the RFNoC graph with args: " << args << endl << endl;
>> uhd::rfnoc::rfnoc_graph::sptr graph = uhd::rfnoc::rfnoc_graph::make(args);
>>
>> // Create handle for radio object
>> uhd::rfnoc::block_id_t radio_ctrl_id(0, "Radio", 0);
>> auto radio_ctrl =
>> graph->get_block<uhd::rfnoc::radio_control>(radio_ctrl_id);
>>
>> uhd::rfnoc::block_id_t replay_ctrl_id(0, "Replay", 0);
>> auto replay_ctrl =
>> graph->get_block<uhd::rfnoc::replay_block_control>(replay_ctrl_id);
>>
>> // Connect the Replay Port 0 to Tx Radio Port 0
>> connect_through_blocks(graph, replay_ctrl_id, 0, radio_ctrl_id, 0);
>>
>> // Connect the Rx Radio Port 0 to Replay Port 1
>> connect_through_blocks(graph, radio_ctrl_id, 0, replay_ctrl_id, 1);
>>
>> graph->commit();
>>
>> cout << "Active graph connections:" << endl;
>> for (auto& edge : graph->enumerate_active_connections())
>> cout << "* " << edge.to_string() << endl;
>> cout << endl;
>>
>> return EXIT_SUCCESS;
>> }
>> _______________________________________________
>> USRP-users mailing list -- [email protected]
>> To unsubscribe send an email to [email protected]
>>
>
_______________________________________________
USRP-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to