diff --git a/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b_v2.vhd b/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b_v2.vhd index fbec2621015bcb2d8ae7ba9e228e50701cd57d39..127c5a2b6e3bf0f8af8c1d240af7e32a1061252e 100644 --- a/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b_v2.vhd +++ b/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b_v2.vhd @@ -117,13 +117,14 @@ architecture str of ip_arria10_e1sg_jesd204b_v2 is signal pll_reset_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal xcvr_rst_arr : std_logic_vector(g_nof_streams - 1 downto 0) := (others => '1'); signal rx_avs_rst_arr : std_logic_vector(g_nof_streams - 1 downto 0); + signal rx_avs_rst_n_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal rxlink_rst_async_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal rxlink_rst_arr : std_logic_vector(g_nof_streams - 1 downto 0); - signal rxlink_rst : std_logic; - signal rx_avs_rst_n_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal rxlink_rst_n_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal core_pll_locked : std_logic; signal mm_core_pll_locked : std_logic; + signal wr_core_pll_locked : std_logic; + signal wr_rst : std_logic := '1'; signal rxlink_sysref_1 : std_logic; signal rxlink_sysref_2 : std_logic; signal rxlink_sysref_3 : std_logic; @@ -483,9 +484,6 @@ begin end process; end generate; -- gen_jesd204b_rx_channels : for I in 0 to g_nof_streams-1 generate - -- Combine into single reset - rxlink_rst <= vector_or(rxlink_rst_arr) when rising_edge(rxlink_clk); - ----------------------------------------------------------------------------- -- Cross from 100 MHz rxlink_clk domain to 200MHz dp_clk domain using a FIFO ----------------------------------------------------------------------------- @@ -494,6 +492,8 @@ begin -- control the FIFO uses src_in_arr(0).ready as read strobe. Using only input (0) is -- possible, because all snk_in_arr() inputs will have same ctrl and info when Rx -- JESD204B IP is synchronized. + wr_rst <= not wr_core_pll_locked; + u_dp_fifo_dc_arr : entity dp_lib.dp_fifo_dc_arr generic map ( g_nof_streams => g_nof_streams, @@ -504,7 +504,7 @@ begin g_fifo_size => c_fifo_size ) port map ( - wr_rst => rxlink_rst, + wr_rst => wr_rst, wr_clk => rxlink_clk, rd_rst => dp_rst, rd_clk => dp_clk, @@ -514,7 +514,6 @@ begin src_out_arr => dplink_sosi_arr ); - dplink_siso_arr <= func_dp_stream_arr_set(dplink_siso_arr, dp_ready, "READY"); -- The dp_clk at 200 MHz and rxlink_clk at 100 MHz are locked to same reference. @@ -601,7 +600,18 @@ begin ); end generate; - u_common_areset_pll_locked : entity common_lib.common_areset + u_common_areset_wr_core_pll_locked : entity common_lib.common_areset + generic map ( + g_in_rst_level => '0', -- synchronises the rising edge of input in_rst. + g_rst_level => '0' + ) + port map ( + in_rst => core_pll_locked, + clk => rxlink_clk, + out_rst => wr_core_pll_locked + ); + + u_common_areset_mm_core_pll_locked : entity common_lib.common_areset generic map ( g_in_rst_level => '0', -- synchronises the rising edge of input in_rst. g_rst_level => '0' diff --git a/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b_v2.vhd b/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b_v2.vhd index fd4c96984c5db8310728ad607addf25ca1fdf865..6fe0693d4810eac2c57bf73c982b26937aabcaed 100644 --- a/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b_v2.vhd +++ b/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b_v2.vhd @@ -117,13 +117,14 @@ architecture str of ip_arria10_e2sg_jesd204b_v2 is signal pll_reset_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal xcvr_rst_arr : std_logic_vector(g_nof_streams - 1 downto 0) := (others => '1'); signal rx_avs_rst_arr : std_logic_vector(g_nof_streams - 1 downto 0); + signal rx_avs_rst_n_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal rxlink_rst_async_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal rxlink_rst_arr : std_logic_vector(g_nof_streams - 1 downto 0); - signal rxlink_rst : std_logic; - signal rx_avs_rst_n_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal rxlink_rst_n_arr : std_logic_vector(g_nof_streams - 1 downto 0); signal core_pll_locked : std_logic; signal mm_core_pll_locked : std_logic; + signal wr_core_pll_locked : std_logic; + signal wr_rst : std_logic := '1'; signal rxlink_sysref_1 : std_logic; signal rxlink_sysref_2 : std_logic; signal rxlink_sysref_3 : std_logic; @@ -483,9 +484,6 @@ begin end process; end generate; -- gen_jesd204b_rx_channels : for I in 0 to g_nof_streams-1 generate - -- Combine into single reset - rxlink_rst <= vector_or(rxlink_rst_arr) when rising_edge(rxlink_clk); - ----------------------------------------------------------------------------- -- Cross from 100 MHz rxlink_clk domain to 200MHz dp_clk domain using a FIFO ----------------------------------------------------------------------------- @@ -494,6 +492,8 @@ begin -- control the FIFO uses src_in_arr(0).ready as read strobe. Using only input (0) is -- possible, because all snk_in_arr() inputs will have same ctrl and info when Rx -- JESD204B IP is synchronized. + wr_rst <= not wr_core_pll_locked; + u_dp_fifo_dc_arr : entity dp_lib.dp_fifo_dc_arr generic map ( g_nof_streams => g_nof_streams, @@ -504,7 +504,7 @@ begin g_fifo_size => c_fifo_size ) port map ( - wr_rst => rxlink_rst, + wr_rst => wr_rst, wr_clk => rxlink_clk, rd_rst => dp_rst, rd_clk => dp_clk, @@ -514,7 +514,6 @@ begin src_out_arr => dplink_sosi_arr ); - dplink_siso_arr <= func_dp_stream_arr_set(dplink_siso_arr, dp_ready, "READY"); -- The dp_clk at 200 MHz and rxlink_clk at 100 MHz are locked to same reference. @@ -601,7 +600,18 @@ begin ); end generate; - u_common_areset_pll_locked : entity common_lib.common_areset + u_common_areset_wr_core_pll_locked : entity common_lib.common_areset + generic map ( + g_in_rst_level => '0', -- synchronises the rising edge of input in_rst. + g_rst_level => '0' + ) + port map ( + in_rst => core_pll_locked, + clk => rxlink_clk, + out_rst => wr_core_pll_locked + ); + + u_common_areset_mm_core_pll_locked : entity common_lib.common_areset generic map ( g_in_rst_level => '0', -- synchronises the rising edge of input in_rst. g_rst_level => '0'