Skip to content
Snippets Groups Projects
Commit 5935840c authored by Reinier van der Walle's avatar Reinier van der Walle
Browse files

Pushed changes of dp_fifo_fill_eop made on branch STAT-263 to master as

it is already needed for tr_10_GbE
parent a80e43c8
No related branches found
No related tags found
No related merge requests found
...@@ -122,7 +122,7 @@ ARCHITECTURE rtl OF dp_fifo_fill_eop IS ...@@ -122,7 +122,7 @@ ARCHITECTURE rtl OF dp_fifo_fill_eop IS
SIGNAL received_eop : BOOLEAN := FALSE; SIGNAL received_eop : BOOLEAN := FALSE;
SIGNAL nxt_received_eop : BOOLEAN := FALSE; SIGNAL nxt_received_eop : BOOLEAN := FALSE;
SIGNAL crossed_domain_snk_in_eop : STD_LOGIC := '0';
BEGIN BEGIN
-- Output monitor FIFO filling -- Output monitor FIFO filling
...@@ -136,6 +136,7 @@ BEGIN ...@@ -136,6 +136,7 @@ BEGIN
rd_fill_ctrl <= rd_fill_32b(c_fifo_size_w-1 DOWNTO 0); rd_fill_ctrl <= rd_fill_32b(c_fifo_size_w-1 DOWNTO 0);
gen_dp_fifo_sc : IF g_use_dual_clock=FALSE GENERATE gen_dp_fifo_sc : IF g_use_dual_clock=FALSE GENERATE
crossed_domain_snk_in_eop <= snk_in.eop;
u_dp_fifo_sc : ENTITY work.dp_fifo_sc u_dp_fifo_sc : ENTITY work.dp_fifo_sc
GENERIC MAP ( GENERIC MAP (
g_technology => g_technology, g_technology => g_technology,
...@@ -173,7 +174,17 @@ BEGIN ...@@ -173,7 +174,17 @@ BEGIN
wr_fifo_usedw <= rd_fifo_usedw; wr_fifo_usedw <= rd_fifo_usedw;
END GENERATE; END GENERATE;
gen_dp_fifo_dc : IF g_use_dual_clock=TRUE GENERATE gen_dp_fifo_dc : IF g_use_dual_clock=TRUE GENERATE
u_common_spulse : ENTITY common_lib.common_spulse
PORT MAP (
in_rst => wr_rst,
in_clk => wr_clk,
in_pulse => snk_in.eop,
out_rst => rd_rst,
out_clk => rd_clk,
out_pulse => crossed_domain_snk_in_eop
);
u_dp_fifo_dc : ENTITY work.dp_fifo_dc u_dp_fifo_dc : ENTITY work.dp_fifo_dc
GENERIC MAP ( GENERIC MAP (
g_technology => g_technology, g_technology => g_technology,
...@@ -218,7 +229,7 @@ BEGIN ...@@ -218,7 +229,7 @@ BEGIN
END GENERATE; -- no_fill END GENERATE; -- no_fill
gen_fill : IF g_fifo_fill>0 GENERATE gen_fill : IF g_fifo_fill>0 GENERATE
src_out <= i_src_out; src_out <= i_src_out;
p_rd_clk: PROCESS(rd_clk, rd_rst) p_rd_clk: PROCESS(rd_clk, rd_rst)
...@@ -232,7 +243,11 @@ BEGIN ...@@ -232,7 +243,11 @@ BEGIN
xon_reg <= nxt_xon_reg; xon_reg <= nxt_xon_reg;
state <= nxt_state; state <= nxt_state;
i_src_out <= nxt_src_out; i_src_out <= nxt_src_out;
received_eop <= nxt_received_eop; IF crossed_domain_snk_in_eop = '1' THEN
received_eop <= TRUE;
ELSE
received_eop <= nxt_received_eop;
END IF;
END IF; END IF;
END PROCESS; END PROCESS;
...@@ -242,7 +257,7 @@ BEGIN ...@@ -242,7 +257,7 @@ BEGIN
p_state : PROCESS(state, rd_sosi, src_in, xon_reg, rd_fifo_usedw, rd_fill_ctrl, received_eop) p_state : PROCESS(state, rd_sosi, src_in, xon_reg, rd_fifo_usedw, rd_fill_ctrl, received_eop)
BEGIN BEGIN
nxt_state <= state; nxt_state <= state;
nxt_received_eop <= received_eop;
rd_siso <= src_in; -- default acknowledge (RL=1) this input when output is ready rd_siso <= src_in; -- default acknowledge (RL=1) this input when output is ready
-- The output register stage increase RL=0 to 1, so it matches RL = 1 for src_in.ready -- The output register stage increase RL=0 to 1, so it matches RL = 1 for src_in.ready
...@@ -252,12 +267,6 @@ BEGIN ...@@ -252,12 +267,6 @@ BEGIN
nxt_src_out.eop <= '0'; nxt_src_out.eop <= '0';
nxt_src_out.sync <= '0'; nxt_src_out.sync <= '0';
IF snk_in.eop = '1' THEN
nxt_received_eop <= TRUE;
ELSE
nxt_received_eop <= received_eop;
END IF;
CASE state IS CASE state IS
WHEN s_idle => WHEN s_idle =>
IF xon_reg='0' THEN IF xon_reg='0' THEN
...@@ -302,7 +311,7 @@ BEGIN ...@@ -302,7 +311,7 @@ BEGIN
nxt_state <= s_idle; nxt_state <= s_idle;
END IF; END IF;
END CASE; END CASE;
-- Pass on frame level flow control -- Pass on frame level flow control
rd_siso.xon <= src_in.xon; rd_siso.xon <= src_in.xon;
END PROCESS; END PROCESS;
...@@ -329,7 +338,8 @@ BEGIN ...@@ -329,7 +338,8 @@ BEGIN
p_state : PROCESS(state, src_in, xon_reg, pend_src_out, rd_fifo_usedw, rd_fill_ctrl, received_eop) p_state : PROCESS(state, src_in, xon_reg, pend_src_out, rd_fifo_usedw, rd_fill_ctrl, received_eop)
BEGIN BEGIN
nxt_state <= state; nxt_state <= state;
nxt_received_eop <= received_eop;
hold_src_in <= src_in; -- default request (RL=1) new input when output is ready hold_src_in <= src_in; -- default request (RL=1) new input when output is ready
-- The output register stage matches RL = 1 for src_in.ready -- The output register stage matches RL = 1 for src_in.ready
...@@ -338,12 +348,6 @@ BEGIN ...@@ -338,12 +348,6 @@ BEGIN
nxt_src_out.sop <= '0'; nxt_src_out.sop <= '0';
nxt_src_out.eop <= '0'; nxt_src_out.eop <= '0';
nxt_src_out.sync <= '0'; nxt_src_out.sync <= '0';
IF snk_in.eop = '1' THEN
nxt_received_eop <= TRUE;
ELSE
nxt_received_eop <= received_eop;
END IF;
CASE state IS CASE state IS
WHEN s_idle => WHEN s_idle =>
...@@ -389,7 +393,7 @@ BEGIN ...@@ -389,7 +393,7 @@ BEGIN
nxt_state <= s_idle; nxt_state <= s_idle;
END IF; END IF;
END CASE; END CASE;
-- Pass on frame level flow control -- Pass on frame level flow control
hold_src_in.xon <= src_in.xon; hold_src_in.xon <= src_in.xon;
END PROCESS; END PROCESS;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment