1// 2// Copyright 2014 Ettus Research LLC 3// Copyright 2018 Ettus Research, a National Instruments Company 4// 5// SPDX-License-Identifier: LGPL-3.0-or-later 6// 7 8module split_stream_fifo 9 #(parameter WIDTH=16, 10 parameter FIFO_SIZE=5, 11 parameter ACTIVE_MASK=4'b1111) 12 (input clk, input reset, input clear, 13 input [WIDTH-1:0] i_tdata, input i_tlast, input i_tvalid, output i_tready, 14 output [WIDTH-1:0] o0_tdata, output o0_tlast, output o0_tvalid, input o0_tready, 15 output [WIDTH-1:0] o1_tdata, output o1_tlast, output o1_tvalid, input o1_tready, 16 output [WIDTH-1:0] o2_tdata, output o2_tlast, output o2_tvalid, input o2_tready, 17 output [WIDTH-1:0] o3_tdata, output o3_tlast, output o3_tvalid, input o3_tready); 18 19 wire [WIDTH-1:0] o0_tdata_int, o1_tdata_int, o2_tdata_int, o3_tdata_int; 20 wire o0_tlast_int, o1_tlast_int, o2_tlast_int, o3_tlast_int; 21 wire o0_tvalid_int, o1_tvalid_int, o2_tvalid_int, o3_tvalid_int; 22 wire o0_tready_int, o1_tready_int, o2_tready_int, o3_tready_int; 23 24 split_stream #(.WIDTH(WIDTH), .ACTIVE_MASK(ACTIVE_MASK)) split_stream 25 (.clk(clk), .reset(reset), .clear(clear), 26 .i_tdata(i_tdata), .i_tlast(i_tlast), .i_tvalid(i_tvalid), .i_tready(i_tready), 27 .o0_tdata(o0_tdata_int), .o0_tlast(o0_tlast_int), .o0_tvalid(o0_tvalid_int), .o0_tready(o0_tready_int), 28 .o1_tdata(o1_tdata_int), .o1_tlast(o1_tlast_int), .o1_tvalid(o1_tvalid_int), .o1_tready(o1_tready_int), 29 .o2_tdata(o2_tdata_int), .o2_tlast(o2_tlast_int), .o2_tvalid(o2_tvalid_int), .o2_tready(o2_tready_int), 30 .o3_tdata(o3_tdata_int), .o3_tlast(o3_tlast_int), .o3_tvalid(o3_tvalid_int), .o3_tready(o3_tready_int)); 31 32 generate 33 if(ACTIVE_MASK[0]) 34 axi_fifo #(.WIDTH(WIDTH+1), .SIZE(FIFO_SIZE)) axi_fifo0 35 (.clk(clk), .reset(reset), .clear(clear), 36 .i_tdata({o0_tlast_int, o0_tdata_int}), .i_tvalid(o0_tvalid_int), .i_tready(o0_tready_int), 37 .o_tdata({o0_tlast, o0_tdata}), .o_tvalid(o0_tvalid), .o_tready(o0_tready), 38 .occupied(), .space()); 39 if(ACTIVE_MASK[1]) 40 axi_fifo #(.WIDTH(WIDTH+1), .SIZE(FIFO_SIZE)) axi_fifo1 41 (.clk(clk), .reset(reset), .clear(clear), 42 .i_tdata({o1_tlast_int, o1_tdata_int}), .i_tvalid(o1_tvalid_int), .i_tready(o1_tready_int), 43 .o_tdata({o1_tlast, o1_tdata}), .o_tvalid(o1_tvalid), .o_tready(o1_tready), 44 .occupied(), .space()); 45 if(ACTIVE_MASK[2]) 46 axi_fifo #(.WIDTH(WIDTH+1), .SIZE(FIFO_SIZE)) axi_fifo2 47 (.clk(clk), .reset(reset), .clear(clear), 48 .i_tdata({o2_tlast_int, o2_tdata_int}), .i_tvalid(o2_tvalid_int), .i_tready(o2_tready_int), 49 .o_tdata({o2_tlast, o2_tdata}), .o_tvalid(o2_tvalid), .o_tready(o2_tready), 50 .occupied(), .space()); 51 if(ACTIVE_MASK[3]) 52 axi_fifo #(.WIDTH(WIDTH+1), .SIZE(FIFO_SIZE)) axi_fifo3 53 (.clk(clk), .reset(reset), .clear(clear), 54 .i_tdata({o3_tlast_int, o3_tdata_int}), .i_tvalid(o3_tvalid_int), .i_tready(o3_tready_int), 55 .o_tdata({o3_tlast, o3_tdata}), .o_tvalid(o3_tvalid), .o_tready(o3_tready), 56 .occupied(), .space()); 57 endgenerate 58 59endmodule // split_stream_fifo 60