From 87499c6037bf1e9734ab52dcff3d04ef0dd86832 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Mon, 13 Dec 2021 17:27:08 +0100 Subject: [PATCH] Use start_pulse_dly to make sure mm_start_address_slv is stable before mm_start_pulse. --- .../base/dp/src/vhdl/dp_block_from_mm_dc.vhd | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd b/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd index bb061f3bd1..cdf640ced4 100644 --- a/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd +++ b/libraries/base/dp/src/vhdl/dp_block_from_mm_dc.vhd @@ -62,9 +62,11 @@ ARCHITECTURE str OF dp_block_from_mm_dc IS CONSTANT c_packet_size : NATURAL := g_nof_data * g_data_size; -- 512 * 2 = 1024 words. CONSTANT c_fifo_size : NATURAL := c_packet_size * 2; CONSTANT c_start_addr_w : NATURAL := c_natural_w; + CONSTANT c_delay_len : NATURAL := c_meta_delay_len; SIGNAL mm_fifo_sosi : t_dp_sosi := c_dp_sosi_rst; SIGNAL mm_fifo_siso : t_dp_siso; + SIGNAL start_pulse_dly : STD_LOGIC_VECTOR(0 TO c_delay_len) := (OTHERS => '0'); SIGNAL mm_start_pulse : STD_LOGIC := '0'; SIGNAL mm_done : STD_LOGIC := '0'; SIGNAL start_address_slv : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0'); @@ -72,18 +74,22 @@ ARCHITECTURE str OF dp_block_from_mm_dc IS SIGNAL mm_start_address : NATURAL := 0; BEGIN - - p_common_spulse_start_pulse : ENTITY common_lib.common_spulse + -- Use start_pulse_dly to make sure mm_start_address_slv is stable before + -- mm_start_pulse, also when mm_clk is faster than dp_clk (e.g. in sim). + start_pulse_dly(0) <= start_pulse; + start_pulse_dly(1 TO c_delay_len) <= start_pulse_dly(0 TO c_delay_len-1) WHEN rising_edge(dp_clk); + + u_common_spulse_start_pulse : ENTITY common_lib.common_spulse PORT MAP ( in_rst => dp_rst, in_clk => dp_clk, - in_pulse => start_pulse, + in_pulse => start_pulse_dly(c_delay_len), out_rst => mm_rst, out_clk => mm_clk, out_pulse => mm_start_pulse ); - p_common_spulse_mm_done : ENTITY common_lib.common_spulse + u_common_spulse_mm_done : ENTITY common_lib.common_spulse PORT MAP ( in_rst => mm_rst, in_clk => mm_clk, @@ -96,7 +102,10 @@ BEGIN start_address_slv <= TO_UVEC(start_address, c_start_addr_w); mm_start_address <= TO_UINT(mm_start_address_slv); - p_common_async_slv_start_address : ENTITY common_lib.common_async_slv + u_common_async_slv_start_address : ENTITY common_lib.common_async_slv + GENERIC MAP ( + g_delay_len => c_meta_delay_len + ) PORT MAP ( rst => dp_rst, clk => dp_clk, @@ -104,7 +113,7 @@ BEGIN dout => mm_start_address_slv ); - p_dp_fifo_fill_eop : ENTITY work.dp_fifo_fill_eop + u_dp_fifo_fill_eop : ENTITY work.dp_fifo_fill_eop GENERIC MAP ( g_use_dual_clock => TRUE, g_data_w => c_word_w, @@ -124,7 +133,7 @@ BEGIN src_in => out_siso ); - p_dp_block_from_mm : ENTITY work.dp_block_from_mm + u_dp_block_from_mm : ENTITY work.dp_block_from_mm GENERIC MAP ( g_data_size => g_data_size, g_step_size => g_step_size, -- GitLab