diff --git a/modules/wr_endpoint/endpoint_private_pkg.vhd b/modules/wr_endpoint/endpoint_private_pkg.vhd index 06dee391d9440086bdb1a69082aec401d11fce4c..c069eaf78b643b1c10963577765d04a4101561cc 100644 --- a/modules/wr_endpoint/endpoint_private_pkg.vhd +++ b/modules/wr_endpoint/endpoint_private_pkg.vhd @@ -3,6 +3,7 @@ use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.ep_wbgen2_pkg.all; +use work.wr_fabric_pkg.all; package endpoint_private_pkg is @@ -99,8 +100,10 @@ package endpoint_private_pkg is mdio_ready_o : out std_logic); end component; - component ep_tx_framer + generic ( + g_with_vlans : boolean; + g_with_timestamper : boolean); port ( clk_sys_i : in std_logic; rst_n_i : in std_logic; @@ -109,16 +112,8 @@ package endpoint_private_pkg is pcs_data_o : out std_logic_vector(17 downto 0); pcs_dreq_i : in std_logic; pcs_valid_o : out std_logic; - tx_data_i : in std_logic_vector(15 downto 0); - tx_ctrl_i : in std_logic_vector(4 - 1 downto 0); - tx_bytesel_i : in std_logic; - tx_sof_p1_i : in std_logic; - tx_eof_p1_i : in std_logic; - tx_dreq_o : out std_logic; - tx_valid_i : in std_logic; - tx_rerror_p1_i : in std_logic; - tx_tabort_p1_i : in std_logic; - tx_terror_p1_o : out std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; tx_pause_i : in std_logic; tx_pause_delay_i : in std_logic_vector(15 downto 0); tx_pause_ack_o : out std_logic; @@ -306,13 +301,21 @@ package body endpoint_private_pkg is variable dout : std_logic_vector(17 downto 0); begin dout(17) := bytesel; - if(sof = '1' or eof = '1' or error = '1') then - dout(16) := '1'; + if(sof = '1' or error = '1') then + -- tag = 01 + dout(17 downto 16) := "01"; dout(15) := sof; - dout(14) := eof; + dout(14) := 'X'; dout(13) := error; dout(12 downto 0) := (others => 'X'); + elsif(eof = '1') then + -- tag = 1x + dout(17) := '1'; + dout(16) := bytesel; + dout(15 downto 0) := data; else + -- tag = 00 + dout(17) := '0'; dout(16) := '0'; dout(15 downto 0) := data; end if; @@ -322,7 +325,7 @@ package body endpoint_private_pkg is function f_is_data(data : in std_logic_vector; valid : in std_logic) return std_logic is begin - return data(16) and valid; + return not (data(16) or data(17)) and valid; end f_is_data; @@ -330,7 +333,7 @@ package body endpoint_private_pkg is (data : in std_logic_vector; valid : in std_logic) return std_logic is begin - if (valid = '1' and data(16) = '1' and data(15) = '1') then + if (valid = '1' and data(17) = '0' and data(16) = '1' and data(15) = '1') then return '1'; else return '0'; @@ -341,7 +344,7 @@ package body endpoint_private_pkg is (data : in std_logic_vector; valid : in std_logic) return std_logic is begin - if (valid = '1' and data(16) = '1' and data(14) = '1') then + if (valid = '1' and data(17) = '1') then return '1'; else return '0'; @@ -352,7 +355,7 @@ package body endpoint_private_pkg is (data : in std_logic_vector; valid : in std_logic) return std_logic is begin - if (valid = '1' and data(16) = '1' and data(13) = '1') then + if (valid = '1' and data(17) = '0' and data(16) = '1' and data(13) = '1') then return '1'; else return '0'; @@ -363,8 +366,8 @@ package body endpoint_private_pkg is (data : in std_logic_vector; valid : in std_logic) return std_logic is begin - if (valid = '1' and data(17) = '1' and data(16) = '0') then - return '1'; + if (valid = '1' and data(17) = '1') then + return data(16); else return '0'; end if;