Commit 33b909d6 authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

wr_endpoint: ep_rx_crc_size_check: now ignores any data outside a frame (i.e.…

wr_endpoint: ep_rx_crc_size_check: now ignores any data outside a frame (i.e. not between SOF and EOF)
parent 88389743
......@@ -45,7 +45,7 @@ architecture behavioral of ep_rx_crc_size_check is
dreq_i : in std_logic;
flush_i : in std_logic;
purge_i : in std_logic;
empty_o: out std_logic);
empty_o : out std_logic);
end component;
type t_state is (ST_WAIT_FRAME, ST_DATA, ST_OOB);
......@@ -61,13 +61,14 @@ architecture behavioral of ep_rx_crc_size_check is
signal state : t_state;
signal q_flush, q_empty : std_logic;
signal q_purge : std_logic;
signal q_valid : std_logic;
signal q_in, q_out : std_logic_vector(17 downto 0);
signal q_bytesel : std_logic;
signal q_dvalid : std_logic;
signal q_flush, q_empty : std_logic;
signal q_purge : std_logic;
signal q_valid : std_logic;
signal q_in, q_out : std_logic_vector(17 downto 0);
signal q_bytesel : std_logic;
signal q_dvalid_in : std_logic;
signal q_dvalid_out : std_logic;
signal dvalid_mask : std_logic_vector(1 downto 0);
begin -- behavioral
......@@ -93,9 +94,10 @@ begin -- behavioral
match_o => crc_match,
crc_o => open);
q_in(15 downto 0) <= snk_fab_i.data;
q_in(15 downto 0) <= snk_fab_i.data;
q_in(17 downto 16) <= snk_fab_i.addr;
q_dvalid_in <= '1' when snk_fab_i.dvalid = '1' and (state = ST_DATA or state = ST_OOB) else '0';
U_bypass_queue : ep_rx_bypass_queue
generic map (
g_size => 3,
......@@ -104,14 +106,14 @@ begin -- behavioral
rst_n_i => rst_n_i,
clk_i => clk_sys_i,
d_i => q_in,
valid_i => snk_fab_i.dvalid,
valid_i => q_dvalid_in,
dreq_o => snk_dreq_o,
q_o => q_out,
valid_o => q_valid,
valid_o => q_dvalid_out,
dreq_i => src_dreq_i,
flush_i => q_flush,
purge_i => q_purge,
empty_o =>q_empty);
empty_o => q_empty);
......@@ -173,12 +175,12 @@ begin -- behavioral
rmon_o.rx_crc_err <= '0';
src_fab_o.sof <= '0';
dvalid_mask<="11";
dvalid_mask <= "11";
else
case state is
when ST_WAIT_FRAME =>
dvalid_mask <= "11";
dvalid_mask <= "11";
q_flush <= '0';
q_purge <= '0';
rmon_o.rx_pcs_err <= '0';
......@@ -214,14 +216,14 @@ begin -- behavioral
if(size_check_ok = '0' or crc_match = '0') then -- bad frame?
state <= ST_WAIT_FRAME;
src_fab_o.error <= '1';
q_purge <='1';
q_purge <= '1';
elsif(snk_fab_i.eof = '1') then
q_flush <='1';
q_flush <= '1';
src_fab_o.eof <= '1';
state <= ST_WAIT_FRAME;
else
state <= ST_OOB;
-- q_flush <= '1';
-- q_flush <= '1';
dvalid_mask <= "00";
end if;
......@@ -236,13 +238,13 @@ begin -- behavioral
rmon_o.rx_giant <= '0';
rmon_o.rx_crc_err <= '0';
if(q_valid = '1') then
if(q_dvalid_out = '1') then
dvalid_mask <= dvalid_mask(0) & '1';
end if;
q_flush <=snk_fab_i.eof;
if(q_empty = '1' and src_dreq_i='1') then
q_flush <= snk_fab_i.eof;
if(q_empty = '1' and src_dreq_i = '1') then
src_fab_o.eof <= '1';
state <= ST_WAIT_FRAME;
end if;
......@@ -253,9 +255,9 @@ begin -- behavioral
end process;
-- src_fab_o.sof <= regs_b.ecr_rx_en_o and snk_fab_i.sof;
src_fab_o.dvalid <= q_valid and dvalid_mask(1) and dvalid_mask(0);
src_fab_o.dvalid <= q_dvalid_out and dvalid_mask(1) and dvalid_mask(0);
src_fab_o.data <= q_out(15 downto 0);
src_fab_o.addr <= q_out(17 downto 16);
src_fab_o.addr <= q_out(17 downto 16);
src_fab_o.bytesel <= q_bytesel when q_out(17 downto 16) = c_WRF_DATA else '0';
end behavioral;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment