20 use ieee.std_logic_1164.
all;
21 use ieee.numeric_std.
all;
23 LIBRARY infrastructure_lib;
28 generic(NSRC: positive := 4);
31 rst_clk : in std_logic;
32 packet_merger_start : in std_logic := '0';
33 packet_merger_enabled : IN std_logic_vector(NSRC-1 downto 0);
34 packet_merger_source : OUT std_logic_vector(2 downto 0);
37 packet_merger_valid : IN std_logic_vector(NSRC-1 downto 0);
38 packet_merger_last : IN std_logic_vector(NSRC-1 downto 0);
39 packet_merger_ready : OUT std_logic_vector(NSRC-1 downto 0);
42 packet_valid : OUT std_logic;
43 packet_last : OUT std_logic;
44 packet_sub_last : OUT std_logic;
45 packet_ready : IN std_logic
58 type packet_source_array is array(natural range <>) of unsigned(2 downto 0);
60 signal src, next_src: unsigned(2 downto 0) := (Others => '0');
61 signal sel, next_sel: integer range 0 to NSRC - 1 := 0;
62 signal source_array: packet_source_array(NSRC-1 downto 0);
63 signal state: STATE_TYPE;
67 sel <= to_integer(src);
68 next_sel <= to_integer(next_src);
69 packet_merger_source <= std_logic_vector(src);
71 select_block:
process(clk)
73 if rising_edge(clk) then
74 if (rst_clk = '1') then
77 next_src <= to_unsigned(NSRC-1, 3);
78 source_array <= (Others => (Others => '0'));
83 if (packet_merger_enabled(next_sel) = '1') then
84 source_array <= source_array(NSRC-2 downto 0) & next_src;
86 if next_src /= "000" then
87 next_src <= next_src - 1;
93 src <= source_array(0);
94 source_array <= "000" & source_array(NSRC-1 downto 1);
98 if (packet_merger_last(sel) = '1') and (packet_ready = '1') then
99 if (sel = NSRC-1) then
103 src <= source_array(0);
104 source_array <= "000" & source_array(NSRC-1 downto 1);
108 if (packet_merger_start = '1') then
110 next_src <= to_unsigned(NSRC-1, 3);
116 end process select_block;
119 packet_valid <= packet_merger_valid(sel) when (state = active) else '0';
122 packet_sub_last <= packet_merger_last(sel);
124 packet_last <= packet_merger_last(NSRC-1) when (sel = NSRC-1) else '0';
126 ackgen: for i in NSRC - 1 downto 0 generate
128 packet_merger_ready(i) <= packet_ready when (sel = i) and (state = active) else '0';
MUX to concatenate AXI-stream fragments into single packet...
MUX to concatenate AXI-stream fragments into single packet...
in packet_merger_data packet_data_array( NSRC- 1 downto 0)
Input signals.
out packet_data std_logic_vector( 63 DOWNTO 0)
FIFO signals.