Dario, Glad simulation appears to be working.
Since you aren't using simple mode in the AXI wrapper (I assume because you're rate-changing inside the block, or some such) can you post the section of your code which handles the VITA headers? Nick On Tue, Sep 26, 2017 at 5:15 AM Dario Pennisi <da...@iptronix.com> wrote: > Hi, > > I managed to get a good simulation for the two inputs. I did it by > modifying default test bench this way: > > - localparam NUM_STREAMS = 2; // Number of test bench streams > - modified RFNOC_CONNECT to two RFNOC_CONNECT_BLOCK_PORT calls each > with a different port. Port 0 of TB connected to port 0 of DUT and port 1 > of TB connected to port 1 of DUT > - modified data streaming part with two calls to tb_streamer.send each > with a different channel > > > > this way I can see data being pumped in on both ports, at least in > simulation. IP does what it should so at this point I tend to think there > is no issue on the FPGA side. > > > > Since I am connecting to two radio blocks and since internal bus is 166 > MHz/64 bit I modified the device3 arguments to "master_clock_rate=120e6", > this way I would have 120MSPS at 32 bit x 2 muxed on the input bus of the > IP. This should leave enough room for overhead. > > > > Now. In these conditions I still don’t see data coming from the second > channel so am thinking that the issue must be on the software side. > > > > Any help would be greatly appreciated. > > Thanks, > > > > Dario Pennisi > > *From:* Dario Pennisi > *Sent:* Tuesday, September 26, 2017 12:00 PM > > > *To:* usrp-users@lists.ettus.com; Nick Foster <bistrom...@gmail.com> > > *Subject:* RE: [USRP-users] rfnoc block with two inputs > > > > Hi, > > I moved forward a bit but didn’t really come up to a solution. > > In my block I doublechecked the signals which are replicated for each > input and made sure they are connected at top level. This turned out to be > apparently useless because I only have one output so src_sid and dst_sid > for the second input channel are basically not going anywhere as there is > no second output. > > Is it at all possible to have 2 inputs and 1 output or there is a strict > need to have the same number of inputs and outputs? > > On the host side which are the points I can tap into to check what’s going > on? > > > > I also would be interested in trying simulation but didn’t find any > example of simulation with 2 inputs. > > Thanks, > > > > Dario Pennisi > > *From:* Dario Pennisi > *Sent:* Monday, September 25, 2017 11:11 PM > *To:* usrp-users@lists.ettus.com; Nick Foster <bistrom...@gmail.com> > *Subject:* Re: [USRP-users] rfnoc block with two inputs > > > > Hi Nick, > > Thank you for your feedback. I didn't notice src and data Sid are per > input however looking at code I don't think this is the problem. My > understanding is that src Sid is used to form cvita packet going out of the > block. In simple mode axis wrapper doesn't seem to use while it is used by > cvita encoder used for tuser. In my case I have 2 inputs and 1 output. I am > using Sid form channel 0 to create cvita header for the output. > > Since I don't have a second output it seems to me src and day Sid for 2nd > input are not used anyway... > > For the rest there doesn't seem to be any other connection. > > Am I missing something? > > Btw is there any example of a block with 2 in and 1 out? I found only > addsub which has 2 out and is not even using axis wrapper... > > Thanks > > Dario Pennisi > > > > > > > > On Mon, Sep 25, 2017 at 9:28 PM +0200, "Nick Foster" <bistrom...@gmail.com> > wrote: > > Couple of problems just offhand. > > > > * src_sid is a one-per-input signal. See noc_shell.v for details. > > * Settings buses and readback buses are one-per (max(input, output)). > Again, see noc_shell.v. I don't think this is a problem for you, though. > > > > You should be getting errors in simulation (or warnings in synthesis) > right now. Look very carefully through these warnings to see which signals > are undriven. My guess is src_sid is undriven on the top 16 bits and so you > can't set src_sid correctly for input 1. > > > > Nick > > > > On Mon, Sep 25, 2017 at 12:00 PM Dario Pennisi <da...@iptronix.com> wrote: > > Hi, > > It’s quite complex and long… posting the initial part with shell and > wrappers > > > > module noc_block_demod #( > > parameter NOC_ID = 64'h1408E12980FDE75E, > > parameter MAX_PACKET_SIZE = 64) > > ( > > input bus_clk, input bus_rst, > > input ce_clk, input ce_rst, > > input [63:0] i_tdata, input i_tlast, input i_tvalid, output i_tready, > > output [63:0] o_tdata, output o_tlast, output o_tvalid, input o_tready, > > output [63:0] debug > > ); > > > > //////////////////////////////////////////////////////////// > > // > > // RFNoC Shell > > // > > //////////////////////////////////////////////////////////// > > wire [31:0] set_data; > > wire [7:0] set_addr; > > wire set_stb; > > reg rb_stb; > > reg [63:0] rb_data; > > wire [7:0] rb_addr; > > > > wire [63:0] cmdout_tdata, ackin_tdata; > > wire cmdout_tlast, cmdout_tvalid, cmdout_tready, ackin_tlast, > ackin_tvalid, ackin_tready; > > > > wire [2*64-1:0] str_sink_tdata; > > wire [1:0] str_sink_tlast, str_sink_tvalid, str_sink_tready; > > > > wire [63:0] str_src_tdata; > > wire str_src_tlast, str_src_tvalid, str_src_tready; > > > > wire [15:0] src_sid; > > wire [15:0] next_dst_sid, resp_out_dst_sid; > > wire [15:0] resp_in_dst_sid; > > > > wire clear_tx_seqnum; > > > > noc_shell #( > > .NOC_ID(NOC_ID), > > .INPUT_PORTS(2) > > ) > > noc_shell ( > > .bus_clk(bus_clk), .bus_rst(bus_rst), > > .i_tdata(i_tdata), .i_tlast(i_tlast), .i_tvalid(i_tvalid), > .i_tready(i_tready), > > .o_tdata(o_tdata), .o_tlast(o_tlast), .o_tvalid(o_tvalid), > .o_tready(o_tready), > > // Computer Engine Clock Domain > > .clk(ce_clk), .reset(ce_rst), > > // Control Sink > > .set_data(set_data), .set_addr(set_addr), .set_stb(set_stb), > > .rb_stb(rb_stb), .rb_data(rb_data), .rb_addr(rb_addr), > > // Control Source > > .cmdout_tdata(cmdout_tdata), .cmdout_tlast(cmdout_tlast), > .cmdout_tvalid(cmdout_tvalid), .cmdout_tready(cmdout_tready), > > .ackin_tdata(ackin_tdata), .ackin_tlast(ackin_tlast), > .ackin_tvalid(ackin_tvalid), .ackin_tready(ackin_tready), > > // Stream Sink > > .str_sink_tdata(str_sink_tdata), .str_sink_tlast(str_sink_tlast), > .str_sink_tvalid(str_sink_tvalid), .str_sink_tready(str_sink_tready), > > // Stream Source > > .str_src_tdata(str_src_tdata), .str_src_tlast(str_src_tlast), > .str_src_tvalid(str_src_tvalid), .str_src_tready(str_src_tready), > > // Stream IDs set by host > > .src_sid(src_sid), // SID of this block > > .next_dst_sid(next_dst_sid), // Next destination SID > > .resp_in_dst_sid(resp_in_dst_sid), // Response destination SID for > input stream responses / errors > > .resp_out_dst_sid(resp_out_dst_sid), // Response destination SID for > output stream responses / errors > > // Misc > > .vita_time('d0), .clear_tx_seqnum(clear_tx_seqnum), > > .debug(debug)); > > > > //////////////////////////////////////////////////////////// > > // > > // AXI Wrapper > > // Convert RFNoC Shell interface into AXI stream interface > > // > > //////////////////////////////////////////////////////////// > > wire [31:0] m_axis0_data_tdata; > > wire m_axis0_data_tlast; > > wire m_axis0_data_tvalid; > > wire m_axis0_data_tready; > > wire [127:0] m_axis0_data_tuser; > > > > wire [31:0] m_axis1_data_tdata; > > wire m_axis1_data_tlast; > > wire m_axis1_data_tvalid; > > wire m_axis1_data_tready; > > wire [127:0] m_axis1_data_tuser; > > > > wire [31:0] s_axis0_data_tdata; > > wire s_axis0_data_tlast; > > wire s_axis0_data_tvalid; > > wire s_axis0_data_tready; > > wire [127:0] s_axis0_data_tuser; > > > > wire [31:0] s_axis1_data_tdata; > > wire s_axis1_data_tlast; > > wire s_axis1_data_tvalid; > > wire s_axis1_data_tready; > > wire [127:0] s_axis1_data_tuser; > > wire [63:0] vita_time_in; > > wire [63:0] vita_time_out; > > // reg [11:0] seq_num; > > > > axi_wrapper #( > > .SIMPLE_MODE(0)) > > axi_wrapper0 ( > > .clk(ce_clk), .reset(ce_rst), > > .clear_tx_seqnum(clear_tx_seqnum), > > .next_dst(next_dst_sid), > > .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), > > .i_tdata(str_sink_tdata[63:0]), .i_tlast(str_sink_tlast[0]), > .i_tvalid(str_sink_tvalid[0]), .i_tready(str_sink_tready[0]), > > .o_tdata(str_src_tdata), .o_tlast(str_src_tlast), > .o_tvalid(str_src_tvalid), .o_tready(str_src_tready), > > .m_axis_data_tdata(m_axis0_data_tdata), > > .m_axis_data_tlast(m_axis0_data_tlast), > > .m_axis_data_tvalid(m_axis0_data_tvalid), > > .m_axis_data_tready(m_axis0_data_tready), > > .m_axis_data_tuser(m_axis0_data_tuser), > > .s_axis_data_tdata(s_axis0_data_tdata), > > .s_axis_data_tlast(s_axis0_data_tlast), > > .s_axis_data_tvalid(s_axis0_data_tvalid), > > .s_axis_data_tready(s_axis0_data_tready), > > .s_axis_data_tuser(s_axis0_data_tuser), > > .m_axis_config_tdata(), > > .m_axis_config_tlast(), > > .m_axis_config_tvalid(), > > .m_axis_config_tready(), > > .m_axis_pkt_len_tdata(), > > .m_axis_pkt_len_tvalid(), > > .m_axis_pkt_len_tready()); > > > > axi_wrapper #( > > .SIMPLE_MODE(0)) > > axi_wrapper1 ( > > .clk(ce_clk), .reset(ce_rst), > > .clear_tx_seqnum(clear_tx_seqnum), > > .next_dst(next_dst_sid), > > .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), > > .i_tdata(str_sink_tdata[127:64]), .i_tlast(str_sink_tlast[1]), > .i_tvalid(str_sink_tvalid[1]), .i_tready(str_sink_tready[1]), > > // .o_tdata(str_src_tdata), .o_tlast(str_src_tlast), > .o_tvalid(str_src_tvalid), .o_tready(str_src_tready), > > .m_axis_data_tdata(m_axis1_data_tdata), > > .m_axis_data_tlast(m_axis1_data_tlast), > > .m_axis_data_tvalid(m_axis1_data_tvalid), > > .m_axis_data_tready(m_axis1_data_tready), > > .m_axis_data_tuser(), > > .s_axis_data_tdata(), > > .s_axis_data_tlast(), > > .s_axis_data_tvalid(), > > .s_axis_data_tready(), > > .s_axis_data_tuser(), > > .m_axis_config_tdata(), > > .m_axis_config_tlast(), > > .m_axis_config_tvalid(), > > .m_axis_config_tready(), > > .m_axis_pkt_len_tdata(), > > .m_axis_pkt_len_tvalid(), > > .m_axis_pkt_len_tready()); > > … > > > > As I mentioned I checked with ILA and ready is high for str_sink_tready so > input is ready to accept data but I never see the valid go high. > > Thanks, > > > > Dario Pennisi > > > >
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com