It's not specific to N3xx. It can occur when you use the same bitstream and change the crossbar routing between runs.
Wade On Wed, Dec 16, 2020 at 4:42 PM Rob Kossler <rkoss...@nd.edu> wrote: > 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