Ok Rob, I will check everything you've said and give you an answer if I find the solution. Many thanks for the help!
Maria El lun., 21 feb. 2022 18:25, Rob Kossler <rkoss...@nd.edu> escribió: > I'm not sure. Yes, it seems the first line could be a problem. Maybe your > OOT rfnoc_mod_tool is correctly registering your block AND the in-tree > block is being registered. I don't see why that would be a problem (given > that they should both be the same anyway), but you should probably try to > fix it. > > Another idea is to enable UHD "debug" logging by setting environment > variables as shown here > <https://files.ettus.com/manual/log_8hpp.html#loghpp_levels>. This may > show useful information. > > Another idea is to specifically set the policy to ONE_TO_ONE in your > custom block controller constructor as is done with several Ettus RFNoC > blocks like this > <https://github.com/EttusResearch/uhd/blob/master/host/lib/rfnoc/fft_block_control.cpp>FFT > controller. But, really, this shouldn't be needed since it should be the > default. > > And, again, maybe see about calling issue_stream_cmd() from the DDC > controller instead of the rx_streamer. > > Rob > > > > On Mon, Feb 21, 2022 at 11:52 AM Maria Muñoz <mamuk...@gmail.com> wrote: > >> This is my output for gnuradio: >> >> *REGISTRY] WARNING: Attempting to overwrite previously registered RFNoC >> block with noc_id,device_id: 0x29106060, 0xffff* >> [INFO] [UHD] linux; GNU C++ version 9.3.0; Boost_107100; >> UHD_4.0.0.HEAD-0-g90ce6062 >> [INFO] [MPMD] Initializing 1 device(s) in parallel with args: >> mgmt_addr=192.168.1.23,type=e3xx,product=e320,serial=31DFBB7,claimed=False,addr=192.168.1.23 >> [INFO] [MPM.main] Launching USRP/MPM, version: 4.0.0.0-g57ca4235 >> [INFO] [MPM.main] Spawning RPC process... >> [INFO] [MPM.PeriphManager] Device serial number: 31DFBB7 >> [INFO] [MPM.PeriphManager] Found 1 daughterboard(s). >> [INFO] [MPM.RPCServer] RPC server ready! >> [INFO] [MPM.RPCServer] Spawning watchdog task... >> [INFO] [MPM.PeriphManager] iniciando mpm >> [INFO] [MPM.PeriphManager] init() called with device args >> `mgmt_addr=192.168.1.23,product=e320'. >> [INFO] [0/DmaFIFO#0] BIST passed (Estimated Minimum Throughput: 1361 MB/s) >> [INFO] [0/DmaFIFO#0] BIST passed (Estimated Minimum Throughput: 1361 MB/s) >> [INFO] [0/Radio#0] Performing CODEC loopback test on channel 0 ... >> [INFO] [0/Radio#0] CODEC loopback test passed >> [INFO] [0/Radio#0] Performing CODEC loopback test on channel 1 ... >> [INFO] [0/Radio#0] CODEC loopback test passed >> gr::log :DEBUG: rfnoc_rx_streamer0 - Committing graph... >> [WARNING] [0/Radio#0] Attempting to set tick rate to 0. Skipping. >> gr::log :DEBUG: rfnoc_rx_streamer0 - Sending start stream command... >> Ogr::log :DEBUG: rfnoc_rx_streamer0 - UHD recv() call timed out. >> >> Seems that the first line is the problem. The 0x29106060 is my rfnoc >> block. Should I recompile also gnuradio to catch the controller I install >> in UHD? >> >> El lun, 21 feb 2022 a las 17:38, Rob Kossler (<rkoss...@nd.edu>) >> escribió: >> >>> This looks all correct when using uhd_usrp_probe. How about when you >>> run from gnuradio - does the UHD console log show "anc2#0" or "Block#0" (or >>> neither)? >>> >>> Regarding your question about issue_stream_cmd() from the DDC controller >>> in gnuradio, I've forgotten how things are done in gnuradio - could you >>> send your python file and maybe I can suggest a modification? >>> >>> By the way, each FPGA block (such as DDC) has a corresponding UHD block >>> controller (running on the host side). So, it is possible to run >>> issue_stream_cmd from the DDC controller rather than the rx_streamer. I >>> just don't remember how exactly to do that from gnuradio. >>> Rob >>> >>> On Mon, Feb 21, 2022 at 11:27 AM Maria Muñoz <mamuk...@gmail.com> wrote: >>> >>>> Hi Rob, >>>> >>>> I have compiled the default cpp and hpp files in-tree, as I read that >>>> this could be the issue. And uhd_usrp_probe identifies my block controller >>>> name (anc2): >>>> >>>> uhd_usrp_probe >>>> [INFO] [UHD] linux; GNU C++ version 9.3.0; Boost_107100; >>>> UHD_4.0.0.HEAD-0-g90ce6062 >>>> [INFO] [MPMD] Initializing 1 device(s) in parallel with args: >>>> mgmt_addr=,type=e3xx,product=e320,serial=31DFBB7,claimed=False,addr= >>>> [INFO] [MPM.PeriphManager] iniciando mpm >>>> [INFO] [MPM.PeriphManager] init() called with device args >>>> `mgmt_addr=,product=e320'. >>>> [INFO] [0/DmaFIFO#0] BIST passed (Estimated Minimum Throughput: 1361 >>>> MB/s) >>>> [INFO] [0/DmaFIFO#0] BIST passed (Estimated Minimum Throughput: 1361 >>>> MB/s) >>>> [INFO] [0/Radio#0] Performing CODEC loopback test on channel 0 ... >>>> [INFO] [0/Radio#0] CODEC loopback test passed >>>> [INFO] [0/Radio#0] Performing CODEC loopback test on channel 1 ... >>>> [INFO] [0/Radio#0] CODEC loopback test passed >>>> _____________________________________________________ >>>> / >>>> | Device: E300-Series Device >>>> | _____________________________________________________ >>>> | / >>>> | | Mboard: ni-e320-31DFBB7 >>>> | | eeprom_version: 3 >>>> | | fs_version: 20200914014807 >>>> | | mender_artifact: v4.0.0.0_e320 >>>> | | mpm_sw_version: 4.0.0.0-g57ca4235 >>>> | | pid: 58144 >>>> | | product: e320 >>>> | | rev: 5 >>>> | | rpc_connection: remote >>>> | | serial: 31DFBB7 >>>> | | type: e3xx >>>> | | MPM Version: 3.0 >>>> | | FPGA Version: 6.0 >>>> | | FPGA git hash: 90ce606.dirty >>>> | | >>>> | | Time sources: internal, external, gpsdo >>>> | | Clock sources: external, internal, gpsdo >>>> | | Sensors: ref_locked, gps_locked, fan, temp_fpga, temp_internal, >>>> temp_rf_channelA, temp_rf_channelB, temp_main_power, gps_gpgga, gps_sky, >>>> gps_time, gps_tpv >>>> | _____________________________________________________ >>>> | / >>>> | | RFNoC blocks on this device: >>>> | | >>>> | | * 0/DDC#0 >>>> | | * 0/DUC#0 >>>> | | * 0/DmaFIFO#0 >>>> | | * 0/Radio#0 >>>> | | ** 0/anc2#0* >>>> | _____________________________________________________ >>>> | / >>>> | | Static connections on this device: >>>> | | >>>> | | * 0/SEP#0:0==>0/DUC#0:0 >>>> | | * 0/DUC#0:0==>0/Radio#0:0 >>>> | | * 0/Radio#0:0==>0/DDC#0:0 >>>> | | * 0/DDC#0:0==>0/SEP#0:0 >>>> | | * 0/SEP#1:0==>0/DUC#0:1 >>>> | | * 0/DUC#0:1==>0/Radio#0:1 >>>> | | * 0/Radio#0:1==>0/DDC#0:1 >>>> | | * 0/DDC#0:1==>0/SEP#1:0 >>>> | | * 0/SEP#2:0==>0/DmaFIFO#0:0 >>>> | | * 0/DmaFIFO#0:0==>0/SEP#2:0 >>>> | | * 0/SEP#3:0==>0/DmaFIFO#0:1 >>>> | | * 0/DmaFIFO#0:1==>0/SEP#3:0 >>>> | | * 0/SEP#4:0==>0/anc2#0:0 >>>> | | * 0/anc2#0:0==>0/SEP#4:0 >>>> | _____________________________________________________ >>>> | / >>>> | | TX Dboard: dboard >>>> | | _____________________________________________________ >>>> | | / >>>> | | | TX Frontend: 0 >>>> | | | Name: E3xx >>>> | | | Antennas: TX/RX >>>> | | | Freq range: 47.000 to 6000.000 MHz >>>> | | | Gain range PGA: 0.0 to 89.8 step 0.2 dB >>>> | | | Bandwidth range: 20000000.0 to 40000000.0 step 0.0 Hz >>>> | | | Connection Type: IQ >>>> | | | Uses LO offset: No >>>> | | _____________________________________________________ >>>> | | / >>>> | | | TX Frontend: 1 >>>> | | | Name: E3xx >>>> | | | Antennas: TX/RX >>>> | | | Freq range: 47.000 to 6000.000 MHz >>>> | | | Gain range PGA: 0.0 to 89.8 step 0.2 dB >>>> | | | Bandwidth range: 20000000.0 to 40000000.0 step 0.0 Hz >>>> | | | Connection Type: IQ >>>> | | | Uses LO offset: No >>>> | _____________________________________________________ >>>> | / >>>> | | RX Dboard: dboard >>>> | | _____________________________________________________ >>>> | | / >>>> | | | RX Frontend: 0 >>>> | | | Name: E3xx >>>> | | | Antennas: RX2, TX/RX >>>> | | | Freq range: 70.000 to 6000.000 MHz >>>> | | | Gain range PGA: 0.0 to 76.0 step 1.0 dB >>>> | | | Bandwidth range: 20000000.0 to 40000000.0 step 0.0 Hz >>>> | | | Connection Type: IQ >>>> | | | Uses LO offset: No >>>> | | _____________________________________________________ >>>> | | / >>>> | | | RX Frontend: 1 >>>> | | | Name: E3xx >>>> | | | Antennas: RX2, TX/RX >>>> | | | Freq range: 70.000 to 6000.000 MHz >>>> | | | Gain range PGA: 0.0 to 76.0 step 1.0 dB >>>> | | | Bandwidth range: 20000000.0 to 40000000.0 step 0.0 Hz >>>> | | | Connection Type: IQ >>>> | | | Uses LO offset: No >>>> >>>> >>>> >>>> But besides that, Radio does not stream anything. I attach my block >>>> controller (which I haven't modified and has been generated with >>>> rfnocmodtool). >>>> I guess the problem could be what you said about the forwarding policy >>>> set as drop by default, but I do not see any parameter like "one-to-one" or >>>> "drop" anywhere. I use UHD 4.0 but not sure if this issue was fixed when I >>>> installed it. >>>> Do you see any problem with the controller I am using? >>>> >>>> Thanks again for the help, >>>> >>>> Maria. >>>> >>>> El lun, 21 feb 2022 a las 16:49, Rob Kossler (<rkoss...@nd.edu>) >>>> escribió: >>>> >>>>> Hi Maria, >>>>> A few remarks: >>>>> >>>>> - If you wrote a custom block controller for your custom block, >>>>> then the forwarding policy should already be correct (one-to-one) by >>>>> default (unless your custom block controller specifically set the >>>>> policy to >>>>> DROP). On the other hand, if you did not write a custom block >>>>> controller >>>>> (thus relying on the UHD default block controller), then this explains >>>>> the >>>>> issue because in that case the default policy is "drop" (which will >>>>> cause >>>>> the issue you are seeing). Note that the default behavior of DROP for >>>>> the >>>>> default block controller has been changed to ONE_TO_ONE on the 'master' >>>>> branch of UHD but has not yet been changed on branch UHD-4.1. >>>>> - So, you don't need to implement "issue_stream_cmd". You just >>>>> need to verify that your block's action & properties forwarding >>>>> policies >>>>> are ONE_TO_ONE (which as I mentioned should be automatic if you create >>>>> your >>>>> own custom controller). >>>>> - You mentioned that you used rfnocmodtool to create your block >>>>> controller. But, my concern is that this block controller is not really >>>>> being used. If you run uhd_usrp_probe, does your block show up with a >>>>> custom name (that you specified) or does it show up as "Block#0". If it >>>>> shows with the generic name "Block#0" it means that UHD is not using >>>>> your >>>>> block controller and instead using the default block controller (which >>>>> DROPs forwarding on UHD 4.1). So, if this is the case for you, that >>>>> is the >>>>> issue that needs to be solved. Unfortunately, I don't know the best >>>>> way to >>>>> solve this because I don't use rfnoc_mod_tool. Take a look at the gain >>>>> block controller >>>>> >>>>> <https://github.com/EttusResearch/uhd/blob/UHD-4.1/host/examples/rfnoc-example/lib/gain_block_control.cpp> >>>>> in the uhd/host/examples/rfnoc-example/ folder. Note that this example >>>>> does very little (empty constructor). At the bottom is a string >>>>> identifying the block which is the string that will be shown with >>>>> uhd_usrp_probe if UHD is using your block controller. >>>>> >>>>> Let me know if this is the issue. Once you get uhd_usrp_probe to "see" >>>>> your block controller, your problem should be solved. If you can't get >>>>> this >>>>> to work, let me know. >>>>> Rob >>>>> >>>>> On Mon, Feb 21, 2022 at 4:41 AM Maria Muñoz <mamuk...@gmail.com> >>>>> wrote: >>>>> >>>>>> Hi Rob, >>>>>> >>>>>> Thanks for the answer. >>>>>> >>>>>> I have checked rfnoc_rx_streamer.cpp, ddc_block_control.cpp and my >>>>>> custom block controller in uhd/host/lib folder, and I search for >>>>>> "issue_stream_cmd" in them. >>>>>> >>>>>> In the rx_streamer one I see this function: >>>>>> >>>>>> void rfnoc_rx_streamer::issue_stream_cmd(const stream_cmd_t& >>>>>>> stream_cmd) >>>>>>> { >>>>>>> if (get_num_channels() > 1 and stream_cmd.stream_now >>>>>>> and stream_cmd.stream_mode != >>>>>>> stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS) { >>>>>>> throw uhd::runtime_error( >>>>>>> "Invalid recv stream command - stream now on multiple >>>>>>> channels in a " >>>>>>> "single streamer will fail to time align."); >>>>>>> } >>>>>> >>>>>> >>>>>> auto cmd = >>>>>>> stream_cmd_action_info::make(stream_cmd.stream_mode); >>>>>>> cmd->stream_cmd = stream_cmd; >>>>>> >>>>>> >>>>>> for (size_t i = 0; i < get_num_channels(); i++) { >>>>>>> const res_source_info info(res_source_info::INPUT_EDGE, i); >>>>>>> post_action(info, cmd); >>>>>>> } >>>>>>> } >>>>>> >>>>>> >>>>>> While in the ddc I see this: >>>>>> >>>>>> void issue_stream_cmd(const uhd::stream_cmd_t& stream_cmd, const >>>>>>> size_t port) >>>>>>> { >>>>>>> RFNOC_LOG_TRACE("issue_stream_cmd(stream_mode=" << >>>>>>> char(stream_cmd.stream_mode) >>>>>>> << ", port=" >>>>>>> << port); >>>>>>> res_source_info dst_edge{res_source_info::OUTPUT_EDGE, port}; >>>>>>> auto new_action = >>>>>>> stream_cmd_action_info::make(stream_cmd.stream_mode); >>>>>>> new_action->stream_cmd = stream_cmd; >>>>>>> issue_stream_cmd_action_handler(dst_edge, new_action); >>>>>>> } >>>>>> >>>>>> >>>>>> There's no "issue_stream_cmd" on my block controller, so maybe as you >>>>>> said the block is not forwarding actions. I'm not very familiar with >>>>>> controller files, so could you please tell me which changes I must do to >>>>>> have my block forwarding actions or point me out to any example to take >>>>>> as >>>>>> a reference? I created my block using rfnocmodtool and follow the gain >>>>>> example, so I guess this example is not forwarding actions either. >>>>>> >>>>>> By the way, how can I stream from DDC in a GNURadiograph? If DDC is >>>>>> on the FPGA side, I have to cross to the host domain through a streamer, >>>>>> don't I? >>>>>> >>>>>> Kind Regards, >>>>>> >>>>>> Maria >>>>>> >>>>>> >>>>>> >>>>>> El vie, 18 feb 2022 a las 15:14, Rob Kossler (<rkoss...@nd.edu>) >>>>>> escribió: >>>>>> >>>>>>> By the way, if your custom FPGA block was truly the problem >>>>>>> (blocking streaming), the Rx LED should be on and you should be getting >>>>>>> lots of Overflow. Since this is not happening, it is a good indication >>>>>>> that >>>>>>> the Rx Radio is never starting. >>>>>>> >>>>>>> On Fri, Feb 18, 2022 at 9:10 AM Rob Kossler <rkoss...@nd.edu> wrote: >>>>>>> >>>>>>>> Hi Maria, >>>>>>>> The issue is likely related to "action forwarding" of the streaming >>>>>>>> command. When your application asks to start streaming, it typically >>>>>>>> does >>>>>>>> so by calling rx_streamer->issue_stream_cmd(). This "action" will >>>>>>>> then be >>>>>>>> forwarded to the next upstream block controller (typically DDC block >>>>>>>> controller) which will see the command and forward it to the next >>>>>>>> upstream >>>>>>>> block controller (typically the Rx radio controller). The Rx radio >>>>>>>> block >>>>>>>> controller will then start the streaming. As an example, let's say >>>>>>>> your >>>>>>>> rx_streamer requested a fixed number of samples (say 1000) and assume >>>>>>>> that >>>>>>>> your DDC decimation is 4. With this architecture, the DDC block >>>>>>>> controller >>>>>>>> can intercept the action and change the requested number of samples >>>>>>>> from >>>>>>>> 1000 to 4000 so that when the radio block controller receives the >>>>>>>> command, >>>>>>>> it will stream for exactly 4000 samples (which will provide 1000 >>>>>>>> samples >>>>>>>> out of the DDC). Note that all of this "action" propagation occurs in >>>>>>>> UHD >>>>>>>> land (not on the FPGA). So, if your custom block controller is not >>>>>>>> forwarding actions, the Radio controller never gets the action and thus >>>>>>>> never starts the streaming. One way you can verify this is if you are >>>>>>>> able >>>>>>>> to call issue_stream_cmd() from the DDC controller rather than the >>>>>>>> rx_streamer. This should cause your streaming to start. >>>>>>>> Rob >>>>>>>> >>>>>>>> On Fri, Feb 18, 2022 at 8:13 AM Maria Muñoz <mamuk...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi all, >>>>>>>>> >>>>>>>>> I'm using a USRP E320 with UHD 4.0 and GNURadio 3.8 for receiving >>>>>>>>> samples through an RX RFNoC Radio block and performing some >>>>>>>>> processing in a >>>>>>>>> custom RFNoC block. >>>>>>>>> I have created my block using rfnocmodtool, modifying the Verilog >>>>>>>>> and yml files for my custom block. I left the cpp and hpp files as >>>>>>>>> default, >>>>>>>>> but I copied them to the UHD install path to see the name of my block >>>>>>>>> with >>>>>>>>> uhd_usrp_probe. >>>>>>>>> I have tested satisfactorily my custom block with a gnuradio graph >>>>>>>>> like this: >>>>>>>>> >>>>>>>>> Host block => rfnoc tx streamer => custom RFNoC block => rfnoc rx >>>>>>>>> streamer => Host block >>>>>>>>> >>>>>>>>> I have also tested it for transmission through the rfnoc tx radio, >>>>>>>>> and works fine: >>>>>>>>> >>>>>>>>> Host block => rfnoc tx streamer => custom RFNoC block => RFNoC >>>>>>>>> DUC=> RFNoC TX Radio >>>>>>>>> >>>>>>>>> But when I try to receive from the radio with the following graph, >>>>>>>>> rx led does not light up and gnuradio give time out: >>>>>>>>> RFNoC RX Radio => RFNoC DDC => custom RFNoC block => rfnoc rx >>>>>>>>> streamer =>Host block >>>>>>>>> >>>>>>>>> If I remove my custom block from the last graph, I can receive >>>>>>>>> samples and the led is on. >>>>>>>>> >>>>>>>>> It seems like the custom block is blocking somehow the samples. I >>>>>>>>> tried with different sampling rates and spp values for the radio but >>>>>>>>> nothing works. >>>>>>>>> >>>>>>>>> Any help on this will be appreciated. >>>>>>>>> >>>>>>>>> Kind Regards, >>>>>>>>> >>>>>>>>> Maria >>>>>>>>> _______________________________________________ >>>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com >>>>>>>>> >>>>>>>>
_______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe send an email to usrp-users-le...@lists.ettus.com