Thanks Brian. I think the core gets generated in a way which respects 
back-pressure, so unless a TREADY is seen the core does not generate output 
samples. I have observed this by simulating the core in isolation.
On 14 Sep 2022, 17:49 +0200, Brian Padalino <bpadal...@gmail.com>, wrote:
> I believe the AXI spec says that data should be presented when valid, and the 
> tready signal just accepts that data.  You can't rely on tready to be 
> asserted before asserting tvalid.
>
> With that being said, I have no idea if this is the source of any of your 
> issues.
>
> Brian
>
> > On Wed, Sep 14, 2022 at 11:28 AM Kevin Williams <zs1...@gmail.com> wrote:
> > > Hi, I don't seem to be able to get TREADY's asserted for my core in a 
> > > testbench. (See the "XXXXX's" in the testbench below. The symptom is that 
> > > the "recv_items" blocks until the test times out.)
> > >
> > > Without that check the "send_items" call is fine, and I can see the 
> > > transaction progressing on that interface.
> > >
> > > I'm sure this is a case of me missing something?
> > >
> > > //
> > > // Copyright 2022 Ettus Research, a National Instruments Brand
> > > //
> > > // SPDX-License-Identifier: LGPL-3.0-or-later
> > > //
> > > // Module: rfnoc_block_multiddc_tb
> > > //
> > > // Description: Testbench for the multiddc RFNoC block.
> > > //
> > >
> > > `default_nettype none
> > >
> > >
> > > module rfnoc_block_multiddc_tb;
> > >
> > >   `include "test_exec.svh"
> > >
> > >   import PkgTestExec::*;
> > >   import PkgChdrUtils::*;
> > >   import PkgRfnocBlockCtrlBfm::*;
> > >   import PkgRfnocItemUtils::*;
> > >
> > >   
> > > //---------------------------------------------------------------------------
> > >   // Testbench Configuration
> > >   
> > > //---------------------------------------------------------------------------
> > >
> > >   localparam [31:0] NOC_ID          = 32'h951E399F;
> > >   localparam [ 9:0] THIS_PORTID     = 10'h123;
> > >   localparam int    CHDR_W          = 64;    // CHDR size in bits
> > >   localparam int    MTU             = 10;    // Log2 of max transmission 
> > > unit in CHDR words
> > >   localparam int    NUM_PORTS       = 1;
> > >   localparam int    NUM_PORTS_I     = 1;
> > >   localparam int    NUM_PORTS_O     = 5;
> > >   localparam int    ITEM_W          = 32;    // Sample size in bits
> > >   localparam int    SPP             = 64;    // Samples per packet
> > >   localparam int    PKT_SIZE_BYTES  = SPP * (ITEM_W/8);
> > >   localparam int    STALL_PROB      = 25;    // Default BFM stall 
> > > probability
> > >   localparam real   CHDR_CLK_PER    = 5.0;   // 200 MHz
> > >   localparam real   CTRL_CLK_PER    = 8.0;   // 125 MHz
> > >   localparam real   CE_CLK_PER      = 4.0;   // 250 MHz
> > >
> > >   
> > > //---------------------------------------------------------------------------
> > >   // Clocks and Resets
> > >   
> > > //---------------------------------------------------------------------------
> > >
> > >   bit rfnoc_chdr_clk;
> > >   bit rfnoc_ctrl_clk;
> > >   bit ce_clk;
> > >
> > >   sim_clock_gen #(CHDR_CLK_PER) rfnoc_chdr_clk_gen (.clk(rfnoc_chdr_clk), 
> > > .rst());
> > >   sim_clock_gen #(CTRL_CLK_PER) rfnoc_ctrl_clk_gen (.clk(rfnoc_ctrl_clk), 
> > > .rst());
> > >   sim_clock_gen #(CE_CLK_PER) ce_clk_gen (.clk(ce_clk), .rst());
> > >
> > >   
> > > //---------------------------------------------------------------------------
> > >   // Bus Functional Models
> > >   
> > > //---------------------------------------------------------------------------
> > >
> > >   // Backend Interface
> > >   RfnocBackendIf backend (rfnoc_chdr_clk, rfnoc_ctrl_clk);
> > >
> > >   // AXIS-Ctrl Interface
> > >   AxiStreamIf #(32) m_ctrl (rfnoc_ctrl_clk, 1'b0);
> > >   AxiStreamIf #(32) s_ctrl (rfnoc_ctrl_clk, 1'b0);
> > >
> > >   // AXIS-CHDR Interfaces
> > >   AxiStreamIf #(CHDR_W) m_chdr [NUM_PORTS_I] (rfnoc_chdr_clk, 1'b0);
> > >   AxiStreamIf #(CHDR_W) s_chdr [NUM_PORTS_O] (rfnoc_chdr_clk, 1'b0);
> > >
> > >   // Block Controller BFM
> > >   RfnocBlockCtrlBfm #(CHDR_W, ITEM_W) blk_ctrl = new(backend, m_ctrl, 
> > > s_ctrl);
> > >
> > >   // CHDR word and item/sample data types
> > >   typedef ChdrData #(CHDR_W, ITEM_W)::chdr_word_t chdr_word_t;
> > >   typedef ChdrData #(CHDR_W, ITEM_W)::item_t      item_t;
> > >
> > >   // Connect block controller to BFMs
> > >   for (genvar i = 0; i < NUM_PORTS_I; i++) begin : 
> > > gen_bfm_input_connections
> > >     initial begin
> > >       blk_ctrl.connect_master_data_port(i, m_chdr[i], PKT_SIZE_BYTES);
> > >       blk_ctrl.set_master_stall_prob(i, STALL_PROB);
> > >     end
> > >   end
> > >   for (genvar i = 0; i < NUM_PORTS_O; i++) begin : 
> > > gen_bfm_output_connections
> > >     initial begin
> > >       blk_ctrl.connect_slave_data_port(i, s_chdr[i]);
> > >       blk_ctrl.set_slave_stall_prob(i, STALL_PROB);
> > >     end
> > >   end
> > >
> > >   
> > > //---------------------------------------------------------------------------
> > >   // Device Under Test (DUT)
> > >   
> > > //---------------------------------------------------------------------------
> > >
> > >   // DUT Slave (Input) Port Signals
> > >   logic [CHDR_W*NUM_PORTS_I-1:0] s_rfnoc_chdr_tdata;
> > >   logic [       NUM_PORTS_I-1:0] s_rfnoc_chdr_tlast;
> > >   logic [       NUM_PORTS_I-1:0] s_rfnoc_chdr_tvalid;
> > >   logic [       NUM_PORTS_I-1:0] s_rfnoc_chdr_tready;
> > >
> > >   // DUT Master (Output) Port Signals
> > >   logic [CHDR_W*NUM_PORTS_O-1:0] m_rfnoc_chdr_tdata;
> > >   logic [       NUM_PORTS_O-1:0] m_rfnoc_chdr_tlast;
> > >   logic [       NUM_PORTS_O-1:0] m_rfnoc_chdr_tvalid;
> > >   logic [       NUM_PORTS_O-1:0] m_rfnoc_chdr_tready;
> > >
> > >   // Map the array of BFMs to a flat vector for the DUT connections
> > >   for (genvar i = 0; i < NUM_PORTS_I; i++) begin : 
> > > gen_dut_input_connections
> > >     // Connect BFM master to DUT slave port
> > >     assign s_rfnoc_chdr_tdata[CHDR_W*i+:CHDR_W] = m_chdr[i].tdata;
> > >     assign s_rfnoc_chdr_tlast[i]                = m_chdr[i].tlast;
> > >     assign s_rfnoc_chdr_tvalid[i]               = m_chdr[i].tvalid;
> > >     assign m_chdr[i].tready                     = s_rfnoc_chdr_tready[i];
> > >   end
> > >   for (genvar i = 0; i < NUM_PORTS_O; i++) begin : 
> > > gen_dut_output_connections
> > >     // Connect BFM slave to DUT master port
> > >     assign s_chdr[i].tdata        = m_rfnoc_chdr_tdata[CHDR_W*i+:CHDR_W];
> > >     assign s_chdr[i].tlast        = m_rfnoc_chdr_tlast[i];
> > >     assign s_chdr[i].tvalid       = m_rfnoc_chdr_tvalid[i];
> > >     assign m_rfnoc_chdr_tready[i] = s_chdr[i].tready;
> > >   end
> > >
> > >   rfnoc_block_multiddc #(
> > >     .THIS_PORTID         (THIS_PORTID),
> > >     .CHDR_W              (CHDR_W),
> > >     .MTU                 (MTU),
> > >     .NUM_PORTS           (NUM_PORTS)
> > >   ) dut (
> > >     // .rfnoc_chdr_clk      (rfnoc_chdr_clk),
> > >     // .rfnoc_ctrl_clk      (rfnoc_ctrl_clk),
> > >     .rfnoc_chdr_clk      (backend.chdr_clk),
> > >     .rfnoc_ctrl_clk      (backend.ctrl_clk),
> > >     .ce_clk              (ce_clk),
> > >     .rfnoc_core_config   (backend.cfg),
> > >     .rfnoc_core_status   (backend.sts),
> > >     .s_rfnoc_chdr_tdata  (s_rfnoc_chdr_tdata),
> > >     .s_rfnoc_chdr_tlast  (s_rfnoc_chdr_tlast),
> > >     .s_rfnoc_chdr_tvalid (s_rfnoc_chdr_tvalid),
> > >     .s_rfnoc_chdr_tready (s_rfnoc_chdr_tready),
> > >     .m_rfnoc_chdr_tdata  (m_rfnoc_chdr_tdata),
> > >     .m_rfnoc_chdr_tlast  (m_rfnoc_chdr_tlast),
> > >     .m_rfnoc_chdr_tvalid (m_rfnoc_chdr_tvalid),
> > >     .m_rfnoc_chdr_tready (m_rfnoc_chdr_tready),
> > >     .s_rfnoc_ctrl_tdata  (m_ctrl.tdata),
> > >     .s_rfnoc_ctrl_tlast  (m_ctrl.tlast),
> > >     .s_rfnoc_ctrl_tvalid (m_ctrl.tvalid),
> > >     .s_rfnoc_ctrl_tready (m_ctrl.tready),
> > >     .m_rfnoc_ctrl_tdata  (s_ctrl.tdata),
> > >     .m_rfnoc_ctrl_tlast  (s_ctrl.tlast),
> > >     .m_rfnoc_ctrl_tvalid (s_ctrl.tvalid),
> > >     .m_rfnoc_ctrl_tready (s_ctrl.tready)
> > >   );
> > >
> > >   // Generate a random signed 16-bit integer in the range [a, b]
> > >   function shortint rand_shortint(int a, int b);
> > >     return signed'($urandom_range(b - a)) + a;
> > >   endfunction : rand_shortint
> > >
> > >   
> > > //---------------------------------------------------------------------------
> > >   // Main Test Process
> > >   
> > > //---------------------------------------------------------------------------
> > >
> > >   initial begin : tb_main
> > >
> > >     $monitor($time, " s_rfnoc_chdr_tdata='b%b", s_rfnoc_chdr_tdata);
> > >     $monitor($time, " s_rfnoc_chdr_tvalid='%d", s_rfnoc_chdr_tvalid);
> > >     $monitor($time, " s_rfnoc_chdr_tready='%d", s_rfnoc_chdr_tready);
> > >     $monitor($time, " s_rfnoc_chdr_tlast='%d", s_rfnoc_chdr_tlast);
> > >
> > >     $monitor($time, " m_rfnoc_chdr_tdata='b%b", m_rfnoc_chdr_tdata);
> > >     $monitor($time, " m_rfnoc_chdr_tvalid='b%b", m_rfnoc_chdr_tvalid);
> > >     $monitor($time, " m_rfnoc_chdr_tready='b%b", m_rfnoc_chdr_tready);
> > >
> > >     // Initialize the test exec object for this testbench
> > >     test.start_tb("rfnoc_block_multiddc_tb");
> > >
> > >     // Start the BFMs running
> > >     blk_ctrl.run();
> > >
> > >     //--------------------------------
> > >     // Reset
> > >     //--------------------------------
> > >
> > >     test.start_test("Flush block then reset it", 10us);
> > >     blk_ctrl.flush_and_reset();
> > >     test.end_test();
> > >
> > >     // Start the clocks running. We wait to start them until this 
> > > testbench
> > >     // runs because we don't want to waste the simulator's CPU time by
> > >     // simulating idle clock cycles.
> > >     rfnoc_chdr_clk_gen.start();
> > >     rfnoc_ctrl_clk_gen.start();
> > >     ce_clk_gen.start();
> > >
> > >     //--------------------------------
> > >     // Verify Block Info
> > >     //--------------------------------
> > >
> > >     test.start_test("Verify Block Info", 2us);
> > >     `ASSERT_ERROR(blk_ctrl.get_noc_id() == NOC_ID, "Incorrect NOC_ID 
> > > Value");
> > >     `ASSERT_ERROR(blk_ctrl.get_num_data_i() == NUM_PORTS_I, "Incorrect 
> > > NUM_DATA_I Value");
> > >     `ASSERT_ERROR(blk_ctrl.get_num_data_o() == NUM_PORTS_O, "Incorrect 
> > > NUM_DATA_O Value");
> > >     `ASSERT_ERROR(blk_ctrl.get_mtu() == MTU, "Incorrect MTU Value");
> > >     test.end_test();
> > >
> > >     test.start_test("Verify Slave TREADY", 2us);
> > >     `ASSERT_ERROR(s_rfnoc_chdr_tready == 1'b1, "Slave TREADY is not 1");
> > >     test.end_test();
> > >
> > >     //--------------------------------
> > >     // Test Sequences
> > >     //--------------------------------
> > >
> > >     // begin
> > >     //   // Read and write the gain register to make sure it updates 
> > > correctly.
> > >     //   logic [31:0] val32;
> > >     //   test.start_test("Verify a register", 5us);
> > >
> > >     //   blk_ctrl.reg_read(256, val32);
> > >     //   `ASSERT_ERROR(
> > >     //     val32 == 0, "Initial value for 0x100 is not 0");
> > >
> > >     //   // Write a value wider than the register to verify the width
> > >     //   blk_ctrl.reg_write(256, 32'h12348765);
> > >     //   blk_ctrl.reg_read(256, val32);
> > >     //   `ASSERT_ERROR(
> > >     //     val32 == 32'h8765, "Readback value for 0x100 is not correct");
> > >
> > >     //   test.end_test();
> > >     // end
> > >
> > >     // <Add your test code here>
> > >     // test.start_test("<Name your first test>", 100us);
> > >     // `ASSERT_WARNING(0, "This testbench doesn't test anything yet!");
> > >     // test.end_test();
> > >
> > >     begin
> > >         localparam shortint MAX_TEST_VAL =  255;
> > >         localparam shortint MIN_TEST_VAL = -255;
> > >
> > >         packet_info_t pkt_info;
> > >
> > >         item_t send_samples[$];    // Sample words
> > >         item_t recv_samples[$];    // Sample words
> > >
> > >         // Read and write the gain register to make sure it updates 
> > > correctly.
> > >         test.start_test("Check data flows through multiddc", 40us);
> > >
> > >         // Generate a payload of random samples in the range [-255, 255], 
> > > two
> > >         // samples per CHDR word.
> > >         send_samples = {};
> > >         for (int i = 0; i < SPP; i++) begin
> > >             send_samples.push_back({
> > >             // rand_shortint(MIN_TEST_VAL, MAX_TEST_VAL),  // I
> > >             // rand_shortint(MIN_TEST_VAL, MAX_TEST_VAL)   // Q
> > >             16'hff,
> > >             16'hff
> > >             });
> > >         end
> > >
> > >         // check that dut is ready to receive
> > >         `ASSERT_ERROR(s_rfnoc_chdr_tready == 1'b1, "Slave TREADY is not 
> > > 1");
> > >
> > >         // wait for slaves to assert TREADY
> > > // 
> > > XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
> > >         $display("Waiting for TREADY on the BFM slave...");
> > >         wait(m_rfnoc_chdr_tready != 5'b00000) $display($time, " 
> > > m_rfnoc_chdr_tready='b%b", m_rfnoc_chdr_tready);
> > > // 
> > > XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
> > >
> > >         // check sinks are asserting TREADY
> > >         $display($time, " m_rfnoc_chdr_tready='b%b", m_rfnoc_chdr_tready);
> > >
> > >         // model some back-pressure if needed
> > >         blk_ctrl.set_slave_stall_prob(0, 0);
> > >
> > >         // Queue a packet for transfer
> > >         // pkt_info = 0;
> > >         // pkt_info.eob = 1;
> > >         // blk_ctrl.send_items(0, send_samples, , pkt_info);
> > >         blk_ctrl.send_items(0, send_samples);
> > >         blk_ctrl.wait_complete(0);
> > >
> > >         $display($time, "Send complete");
> > >
> > >         $display($time, " TX Size='%d", send_samples.size());
> > >
> > >         // Receive the output packet
> > >         blk_ctrl.recv_items(0, recv_samples);
> > >
> > >         // Check the resulting payload size
> > >         `ASSERT_ERROR(recv_samples.size() == SPP,
> > >             "Received payload didn't match size of payload sent");
> > >
> > >         test.end_test();
> > >     end
> > >
> > >     //--------------------------------
> > >     // Finish Up
> > >     //--------------------------------
> > >
> > >     // Display final statistics and results
> > >     test.end_tb();
> > >   end : tb_main
> > >
> > > endmodule : rfnoc_block_multiddc_tb
> > >
> > >
> > > `default_nettype wire
> > >
> > > > On Wed, 14 Sept 2022 at 12:30, Kevin Williams <zs1...@gmail.com> wrote:
> > > > > 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
> > >
> > >
> > > --
> > > Kevin Williams
> > > _______________________________________________
> > > 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

Reply via email to