Thanks Wade, That fixes it for my test case with 2 switchboards in series. I'll let you know if I see anything strange when testing with my custom blocks.
By the way, does this bug only affect N3xx devices or all RFNoC devices? Rob On Wed, Dec 16, 2020 at 5:33 PM Wade Fife <wade.f...@ettus.com> wrote: > Rob, > > I think I found the source of the IQ swap issue you observed. This fixes > it for me: > > diff --git a/host/lib/rfnoc/mgmt_portal.cpp > b/host/lib/rfnoc/mgmt_portal.cpp > index a54efaaf7..7b09c540b 100644 > --- a/host/lib/rfnoc/mgmt_portal.cpp > +++ b/host/lib/rfnoc/mgmt_portal.cpp > @@ -617,6 +617,24 @@ public: > _send_recv_mgmt_transaction(xport, cfg_xact); > } > > + // Build a management transaction to configure the destination > node > + { > + mgmt_payload cfg_xact; > + cfg_xact.set_header(my_epid, _protover, _chdr_w); > + _traverse_to_node(cfg_xact, dst_node_addr); > + mgmt_hop_t cfg_hop; > + // Configure buffer types > + cfg_hop.add_op(mgmt_op_t(mgmt_op_t::MGMT_OP_CFG_WR_REQ, > + mgmt_op_t::cfg_payload(REG_ISTRM_CTRL_STATUS, > + BUILD_CTRL_STATUS_WORD(false, false, BUFF_U64, > BUFF_U64, false)))); > + // Return the packet back to us > + cfg_hop.add_op(mgmt_op_t(mgmt_op_t::MGMT_OP_RETURN)); > + // Send the transaction and receive a response. > + // We don't care about the contents of the response. > + cfg_xact.add_hop(cfg_hop); > + _send_recv_mgmt_transaction(xport, cfg_xact); > + } > + > // Wait for stream configuration to finish on the HW side > _validate_stream_setup(xport, src_node_addr, timeout); > > Thanks, > > Wade > > On Mon, Dec 14, 2020 at 8:32 PM Wade Fife <wade.f...@ettus.com> wrote: > >> Hi Rob, >> >> I was able to reproduce the issue, so I'll see if I can get to the bottom >> of it. I'm glad you're able to work around it for now. Thanks for letting >> us know about it! >> >> Wade >> >> On Mon, Dec 14, 2020 at 8:59 AM Rob Kossler <rkoss...@nd.edu> wrote: >> >>> Hi Wade, >>> I tried the command to re-load the FPGA, but I couldn't communicate with >>> UHD nicely until I also added the command "systemctl restart ursp-uhd". I >>> am now able to reset the N310 to proper behavior when it gets in this state. >>> >>> Regarding this issue of real/imag swapping, do you want me to create a >>> support request through supp...@ettus.com? Also, do you need me to >>> provide any more info or an example program / FPGA image? Note that now >>> that I know how to duplicate the issue, I believe I also know how to avoid >>> it. So, it is probably not a critical issue for me presently. >>> >>> Rob >>> >>> On Sat, Dec 12, 2020 at 9:47 AM Wade Fife <wade.f...@ettus.com> wrote: >>> >>>> Thanks for the updates. If you just want to reload the FPGA, try >>>> running "overlay rm n310 && overlay add n310" on the N310. This should >>>> simply reload the FPGA using the bistream already in the flash. >>>> >>>> Wade >>>> >>>> On Fri, Dec 11, 2020 at 6:45 PM Rob Kossler <rkoss...@nd.edu> wrote: >>>> >>>>> Wade, >>>>> The following also fails using just 2 blocks and 2 attempts: >>>>> host_tx => Switchboard#0 => Switchboard#1 => host_rx // SUCCESS >>>>> host_tx => Switchboard#1 => Switchboard#0 => host_rx // FAILURE (RX >>>>> samples equal swapped I/Q of TX samples) >>>>> >>>>> In addition to wanting to get this issue fixed, I also have a question >>>>> about the best way to "reboot" the N310 which is what I need to do to fix >>>>> the issue after it occurs. One way is to give the "reboot now" linux >>>>> command. But, this takes a long time. Another way is to reprogram the >>>>> FPGA image via uhd_image_loader. This is appreciably faster, but I'm >>>>> thinking that this is not a great idea if the flash memory has a limited >>>>> number of write cycles before failure. Is there another way to achieve a >>>>> reboot other than these two? >>>>> Rob >>>>> >>>>> On Fri, Dec 11, 2020 at 7:34 PM Rob Kossler <rkoss...@nd.edu> wrote: >>>>> >>>>>> AHA! I duplicated the issue with the Switchboard image. The way to >>>>>> duplicate the issue is the run the following series of graphs: >>>>>> host_tx => Switchboard#0 => Switchboard#1 => host_rx // SUCCESS >>>>>> host_tx => Switchboard#2 => Switchboard#3 => host_rx // SUCCESS >>>>>> host_tx => Switchboard#0 => Switchboard#2 => host_rx // FAILURE >>>>>> (RX samples equal swapped I/Q of TX samples) >>>>>> Each of these 3 runs consists of running my application (similar to >>>>>> one of the examples such as rfnoc_rx_to_file) such that the UHD object is >>>>>> re-created each time. My guess is that you could use gnuradio to do it >>>>>> instead. >>>>>> >>>>>> My working theory is that the problem is caused by the fact that the >>>>>> Switchboard#2 input port was changed from being connected to the host in >>>>>> test case 2 to then be connected to another RFNoC block in test case 3. >>>>>> Or, I suppose it could be the output port on this block (same logic). >>>>>> >>>>>> If you want me to send you my FPGA image with the 4 Switchboard >>>>>> blocks, let me know. >>>>>> Rob >>>>>> >>>>>> >>>>>> >>>>>> On Fri, Dec 11, 2020 at 7:09 PM Rob Kossler <rkoss...@nd.edu> wrote: >>>>>> >>>>>>> Hi Wade, >>>>>>> After thinking about it a bit, I would ignore the "negation" issue >>>>>>> for now. This may be a byproduct of I/Q swapping related to my custom >>>>>>> block. >>>>>>> Rob >>>>>>> >>>>>>> On Fri, Dec 11, 2020 at 6:34 PM Rob Kossler <rkoss...@nd.edu> wrote: >>>>>>> >>>>>>>> Hi Wade, >>>>>>>> Thanks for the info. I still do not know what's going on, but here >>>>>>>> are a few updates: >>>>>>>> >>>>>>>> - I built a new N310 image with 4 switchboards (1x1) and 1 >>>>>>>> splitstream (1x2) blocks in addition to the default blocks. All of >>>>>>>> the >>>>>>>> additional blocks are connected to SEPs for dynamic linking. I >>>>>>>> tried my >>>>>>>> best to get bad behavior using a chain of 1 to 4 switchboards, but >>>>>>>> I could >>>>>>>> not duplicate any I/Q swapping or negation issues. >>>>>>>> - I went back to my custom image (that I described below) and >>>>>>>> found different behavior today (sometimes things worked OK). So, >>>>>>>> this got >>>>>>>> me to thinking that I am somehow getting the FPGA in a bad state >>>>>>>> such that >>>>>>>> a reboot (or FPGA re-flashing) fixes things. I have had some >>>>>>>> success with >>>>>>>> re-booting and things working properly. But, I still do not have a >>>>>>>> true >>>>>>>> handle on things and cannot adequately predict when things are >>>>>>>> going to >>>>>>>> succeed or fail. >>>>>>>> - One thing that has been constant is that I have never seen >>>>>>>> bad behavior when I only have 1 block in my graph (no matter which >>>>>>>> block I >>>>>>>> choose). Note that for all of my tests, the graph looks like this: >>>>>>>> host_tx >>>>>>>> => block_chain => host_rx, where block_chain is a sequential chain >>>>>>>> of 1 or >>>>>>>> more rfnoc blocks. >>>>>>>> >>>>>>>> I will send a follow up once I figure things out. >>>>>>>> Rob >>>>>>>> >>>>>>>> >>>>>>>> On Fri, Dec 11, 2020 at 6:22 PM Wade Fife <wade.f...@ettus.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi Rob, >>>>>>>>> >>>>>>>>> The SEPs do have the ability to swap I and Q. This is because on >>>>>>>>> the host computer, I is usually in the lower bits and Q is in the >>>>>>>>> upper >>>>>>>>> bits of each 32-bit word, but in RFNoC, for historical reasons, I >>>>>>>>> goes in >>>>>>>>> the upper bits and Q in the lower bits. The software programs the IQ >>>>>>>>> swapping when it sets up the graph. >>>>>>>>> >>>>>>>>> I assume you're using dynamic connections (through the crossbar) >>>>>>>>> to control the number of FFTs the data is passed through, and not >>>>>>>>> static >>>>>>>>> connections? If that's the case then I wonder if software configures >>>>>>>>> IQ >>>>>>>>> swapping incorrectly in some configurations. I'll see if I can do some >>>>>>>>> testing next week to confirm if it's working correctly. >>>>>>>>> >>>>>>>>> As for negation, I'm not aware of anywhere we do that off the top >>>>>>>>> of my head. Is that behavior block dependent? I'll see if I can find >>>>>>>>> anywhere this happens. >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> Wade >>>>>>>>> >>>>>>>>> On Thu, Dec 10, 2020 at 3:54 PM Rob Kossler via USRP-users < >>>>>>>>> usrp-users@lists.ettus.com> wrote: >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> I am encountering very strange behavior with a custom FPGA image >>>>>>>>>> (N310). It appears that data streaming through SEPs can get swapped >>>>>>>>>> (I/Q) >>>>>>>>>> and/or negated. Is anyone at Ettus aware of anything that could >>>>>>>>>> cause >>>>>>>>>> this? Of course, the issue might be on my end, but I can't think of >>>>>>>>>> what >>>>>>>>>> it might be given that all of my custom blocks work as expected in >>>>>>>>>> isolation (if the block is the only block in graph). >>>>>>>>>> >>>>>>>>>> My custom image is the following: >>>>>>>>>> >>>>>>>>>> - default blocks of Radios, DDCs, DUCs (each 2x2 and >>>>>>>>>> statically connected as in default image) >>>>>>>>>> - custom blocks of two 1x1 windowed-fft blocks, two 1x1 >>>>>>>>>> vector-avg blocks, and one 2x2 custom block. Note: each of these >>>>>>>>>> blocks is >>>>>>>>>> connected to its own SEP, so I can connect dynamically in any >>>>>>>>>> fashion. >>>>>>>>>> >>>>>>>>>> My test case is transmitting 8192 random samples from host to FFT >>>>>>>>>> block and then optionally through a 2nd FFT block before back to >>>>>>>>>> host. In >>>>>>>>>> the test case, the radios/DDCs/DUCs are not used. >>>>>>>>>> >>>>>>>>>> Here is what I observed: >>>>>>>>>> >>>>>>>>>> - If I only include 1 FFT block in my RFNoC graph, I get the >>>>>>>>>> expected results (the output from the FPGA matches what I >>>>>>>>>> calculate in >>>>>>>>>> Matlab for the FFT). This is true for either of the two FFT >>>>>>>>>> blocks. >>>>>>>>>> - If I include both FFT blocks in series, I can only match >>>>>>>>>> the FPGA output if I swap the I/Q values in between my Matlab >>>>>>>>>> FFTs. >>>>>>>>>> - Note: that this issue is not FFT-related as I can also >>>>>>>>>> duplicate this issue with the other blocks. >>>>>>>>>> - If I use 3 blocks in series (each through SEP), I need to >>>>>>>>>> negate certain data in order to get it to match the FPGA output >>>>>>>>>> >>>>>>>>>> My next step is likely to build a new image with Ettus-developed >>>>>>>>>> FIFOs to prove that the data is getting swapped/negated when 2 or >>>>>>>>>> more are >>>>>>>>>> used in series through SEPs. >>>>>>>>>> >>>>>>>>>> Let me know if you have any suggestions for other things to try. >>>>>>>>>> >>>>>>>>>> Rob >>>>>>>>>> _______________________________________________ >>>>>>>>>> USRP-users mailing list >>>>>>>>>> USRP-users@lists.ettus.com >>>>>>>>>> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com >>>>>>>>>> >>>>>>>>>
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com