Hi Rob, thanks for that testbench advice.

My core will not provide output if it does not see TREADY on its master
interfaces. (Which I have verified by simulating the core on its own.)

I have used the rfnoc-example testbench for reference, and issue a
"blk_ctrl.send_items(0, send_samples)".

Monitoring the rfnoc signal "m_rfnoc_chdr_tready" in the testbench shows
that it never transitions from zero's at the beginning of the simulation.

Should I see the BFM slave asserting these signals? (I cannot drive them
from my testbench - I get a warning about multiple drivers.)

On Tue, 13 Sept 2022 at 15:49, Rob Kossler <rkoss...@nd.edu> wrote:

> Have you tried to run an rfnoc-style testbench such as in the
> rfnoc-example?  If not, this may be useful.  If you try this, it may be
> easier to follow the example if you change your output number of ports to
> be 1 so that it is a simple 1-to-1 block.
> Rob
>
> On Tue, Sep 13, 2022 at 6:36 AM Kevin Williams <zs1...@gmail.com> wrote:
>
>> Hi Rob,
>>
>> I can confirm the radio streams correctly.
>>
>> I have also tried tx_streamer => multiDDC => rx_streamer which
>> successfully sends a number of samples, but none are received. (The script
>> is below.)
>>
>> Just to summarize, the IP core seems to be behaving correctly when
>> simulated in Vivado where I apply AXI handshaking, reset the core, and
>> clock it.
>>
>> I have set all endpoints in the design as follows:
>>
>>   ep0:                       # Stream endpoint name
>>     ctrl: True                      # Endpoint passes control traffic
>>     data: True                      # Endpoint passes data traffic
>>     buff_size: 32768                # Ingress buffer size for data
>>
>> Regards, Kevin
>>
>>
>> graph = uhd.rfnoc.RfnocGraph("type=x300,addr=192.168.30.2")
>>
>> tx_streamer = graph.create_tx_streamer(1, uhd.usrp.StreamArgs("sc16",
>> "sc16"))
>> rx_streamer = graph.create_rx_streamer(1, uhd.usrp.StreamArgs("sc16",
>> "sc16"))
>>
>> gb = graph.get_block("0/multiddc#0")
>> graph.connect(tx_streamer, 0, gb.get_unique_id(), 0)
>> graph.connect(gb.get_unique_id(), 0, rx_streamer, 0)
>> graph.commit()
>>
>> num_samps = 4 * tx_streamer.get_max_num_samps()
>> send_samps = np.array([[0x40004000] * num_samps], dtype="int32")
>>
>> tx_md = uhd.types.TXMetadata()
>> tx_md.start_of_burst = True
>> tx_md.end_of_burst = True
>>
>> recv_samps = np.zeros((1, num_samps), dtype="int32")
>>
>> rx_md = uhd.types.RXMetadata()
>>
>> num_sent = tx_streamer.send(send_samps, uhd.types.TXMetadata())
>> num_recv = rx_streamer.recv(recv_samps, rx_md, 0.1)
>>
>>
>> On Tue, 13 Sept 2022 at 00:36, Rob Kossler <rkoss...@nd.edu> wrote:
>>
>>> One more thought. If the FPGA version that you built with dynamic
>>> linking, you should be able to create an RFNoC Graph as follows:
>>>   tx_streamer => multiDDC => rx_streamer(s)
>>> This way you can eliminate the radio from the equation and test in a
>>> very similar fashion to the way it is tested in a testbench.
>>>
>>> Rob
>>>
>>> On Mon, Sep 12, 2022 at 6:33 PM Rob Kossler <rkoss...@nd.edu> wrote:
>>>
>>>> Oops. Ignore what I said. I now realize you stated you were getting an
>>>> Overflow which of course you would never get if streaming hadn't started.
>>>> Rob
>>>>
>>>> On Mon, Sep 12, 2022 at 6:32 PM Rob Kossler <rkoss...@nd.edu> wrote:
>>>>
>>>>> Are you sure that the radio is even streaming?  The typical method for
>>>>> starting streaming is to tell the rx_streamer to start streaming.  Then, 
>>>>> in
>>>>> UHD-land, the rx_streamer ctrl tells the next upstring block to start
>>>>> streaming such that this streaming command propagates up the chain until
>>>>> the radio receives it and starts streaming.  So, if your custom block does
>>>>> not forward the streaming command from the rx_streamer to the radio, then
>>>>> the radio never even starts streaming.  You can verify by simply 
>>>>> monitoring
>>>>> the LEDs.
>>>>>
>>>>> If this is the problem, you can go-around the intended use by simply
>>>>> telling the radio to start streaming rather than the rx_streamer.  Or, of
>>>>> course, you can modify your custom block controller to propagate the
>>>>> streaming command.
>>>>> Rob
>>>>>
>>>>> On Mon, Sep 12, 2022 at 4:18 PM Kevin Williams <zs1...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Yes, of course. But I don't get 1 sample from the ddc's, even with
>>>>>> just one channel of a 2:1 decimated channel connected to the rx streamer.
>>>>>>
>>>>>> On Mon, 12 Sept 2022 at 22:13, Jonathon Pendlum <
>>>>>> jonathon.pend...@ettus.com> wrote:
>>>>>>
>>>>>>> The aggregate output rate of the 5 streams could require more
>>>>>>> bandwidth than the 10 GigE interface can sustain. What are the exact 
>>>>>>> output
>>>>>>> rates?
>>>>>>>
>>>>>>> On Mon, Sep 12, 2022 at 3:53 PM Kevin Williams <zs1...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Those rates vary from a 2:1 decimation down to other rates.
>>>>>>>>
>>>>>>>> The host has 10 Gbe interfaces to the USRP.
>>>>>>>>
>>>>>>>> I get samples if i connect the radio to the rx streamer, just
>>>>>>>> nothing from the ddc's.
>>>>>>>>
>>>>>>>> On Mon, 12 Sept 2022 at 21:48, Jonathon Pendlum <
>>>>>>>> jonathon.pend...@ettus.com> wrote:
>>>>>>>>
>>>>>>>>> Hi Kevin,
>>>>>>>>>
>>>>>>>>> What are the sample rates for the 5 outputs? What connection are
>>>>>>>>> you using to your host PC, 1 GigE or 10 GigE?
>>>>>>>>>
>>>>>>>>> Jonathon
>>>>>>>>>
>>>>>>>>> On Mon, Sep 12, 2022 at 3:38 PM Kevin Williams <zs1...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Jonathon,
>>>>>>>>>>
>>>>>>>>>> I've got an x310. The flowgraph is a simple radio->multiddc->(to
>>>>>>>>>> 5x outputs). I've tried both static and dynamic routing from the 
>>>>>>>>>> radio
>>>>>>>>>> block. I.e. the static route version:
>>>>>>>>>>
>>>>>>>>>> |    /
>>>>>>>>>> |   |       Static connections on this device:
>>>>>>>>>> |   |
>>>>>>>>>> |   |   * 0/Radio#0:0==>0/multiddc#0:0
>>>>>>>>>> |   |   * 0/multiddc#0:0==>0/SEP#2:0
>>>>>>>>>> |   |   * 0/multiddc#0:1==>0/SEP#3:0
>>>>>>>>>> |   |   * 0/multiddc#0:2==>0/SEP#4:0
>>>>>>>>>> |   |   * 0/multiddc#0:3==>0/SEP#5:0
>>>>>>>>>> |   |   * 0/multiddc#0:4==>0/SEP#6:0
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On the input side it is all at the radio rate, but I hope my core
>>>>>>>>>> is being clocked at 214 MHz.
>>>>>>>>>>
>>>>>>>>>> When I simulate my IP core (which includes the AXI streaming
>>>>>>>>>> interfaces) it looks ok.
>>>>>>>>>>
>>>>>>>>>> Regards, Kevin
>>>>>>>>>>
>>>>>>>>>> On Mon, 12 Sept 2022 at 21:29, Jonathon Pendlum <
>>>>>>>>>> jonathon.pend...@ettus.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hello Kevin,
>>>>>>>>>>>
>>>>>>>>>>> What device are you using and what does your flowgraph look
>>>>>>>>>>> like? What sample rate are you running at? If your block is running 
>>>>>>>>>>> at the
>>>>>>>>>>> radio sample rate (e.g. 200 MSPS on a X310), your block will need to
>>>>>>>>>>> process one input sample every clock cycle on average.
>>>>>>>>>>>
>>>>>>>>>>> Jonathon
>>>>>>>>>>>
>>>>>>>>>>> On Mon, Sep 12, 2022 at 9:09 AM Kevin Williams <zs1...@gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi All,
>>>>>>>>>>>>
>>>>>>>>>>>> I've got an IP core that is causing an "ERROR_CODE_OVERFLOW"
>>>>>>>>>>>> when used in an RFNoC project.
>>>>>>>>>>>>
>>>>>>>>>>>> The core responds correctly when simulated outside the RFNoC
>>>>>>>>>>>> environment. (I can see correct output, the AXI streaming 
>>>>>>>>>>>> signalling,
>>>>>>>>>>>> back-pressure when required, etc.)
>>>>>>>>>>>>
>>>>>>>>>>>> I'm not sure how to go about debugging this, and am not yet
>>>>>>>>>>>> familiar enough with RFNoC to know what to ask.
>>>>>>>>>>>>
>>>>>>>>>>>> I have been thinking it was the core not being reset or clocked
>>>>>>>>>>>> correctly, but this is how it gets instantiated:
>>>>>>>>>>>>
>>>>>>>>>>>>   multiddc multiddc_i (
>>>>>>>>>>>>     //   - Using different clocks for the IP core and the AXI
>>>>>>>>>>>> interface. The IPCore_Clk and AXILite_ACLK must be
>>>>>>>>>>>>     //     synchronous and connected to the same clock source.
>>>>>>>>>>>> The IPCore_RESETN and AXILite_ARESETN must be
>>>>>>>>>>>>     //     connected to the same reset source. See
>>>>>>>>>>>> Synchronization of Global Reset Signal to IP Core Clock Domain.
>>>>>>>>>>>>     .IPCORE_CLK                (axis_data_clk),
>>>>>>>>>>>>     .IPCORE_RESETN             (~axis_data_rst),
>>>>>>>>>>>>
>>>>>>>>>>>>     .AXI4_Lite_ACLK            (axis_data_clk),
>>>>>>>>>>>>     .AXI4_Lite_ARESETN         (~axis_data_rst),
>>>>>>>>>>>>
>>>>>>>>>>>> The core YAML file describes the clock as:
>>>>>>>>>>>>
>>>>>>>>>>>> data:
>>>>>>>>>>>>   fpga_iface: axis_chdr
>>>>>>>>>>>>   clk_domain: ce
>>>>>>>>>>>>
>>>>>>>>>>>> In the project YAML file:
>>>>>>>>>>>>
>>>>>>>>>>>> clk_domains:
>>>>>>>>>>>>     - { srcblk: _device_, srcport: radio, dstblk: radio0,
>>>>>>>>>>>> dstport: radio }
>>>>>>>>>>>>     - { srcblk: _device_, srcport: ce,    dstblk: multiddc0,
>>>>>>>>>>>> dstport: ce }
>>>>>>>>>>>>
>>>>>>>>>>>> Is there something that might be an obvious first place to
>>>>>>>>>>>> check?
>>>>>>>>>>>>
>>>>>>>>>>>> Many thanks, Kevin
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Kevin Williams
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com
>>>>>>>>>>>> To unsubscribe send an email to
>>>>>>>>>>>> usrp-users-le...@lists.ettus.com
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Kevin Williams
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Kevin Williams
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> Kevin Williams
>>>>>> _______________________________________________
>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com
>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>>>>>
>>>>>
>>
>> --
>> Kevin Williams
>>
>

-- 
Kevin Williams
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to