diff --git a/libraries/base/common/src/vhdl/common_areset.vhd b/libraries/base/common/src/vhdl/common_areset.vhd index 80f32970ac07f6f96b011542f93a4c599894fe34..2cb6e646bb8def7a840a0810a43df0957c451b8b 100644 --- a/libraries/base/common/src/vhdl/common_areset.vhd +++ b/libraries/base/common/src/vhdl/common_areset.vhd @@ -19,11 +19,18 @@ -- ------------------------------------------------------------------------------- - +-- Author: E. Kooistra -- Purpose: Immediately apply reset and synchronously release it at rising clk -- Description: --- Using common_areset is equivalent to using common_async with same signal --- applied to rst and din. +-- When in_rst gets asserted, then the out_rst gets asserted immediately (= asynchronous reset apply). +-- When in_rst gets de-assered, then out_rst gets de-asserted after g_delay_len cycles (= synchronous reset release). +-- +-- The in_rst assert level is set by g_in_rst_level. +-- The out_rst assert level is set by c_out_rst_level = g_rst_level. +-- +-- Remarks: +-- . The in_rst can also synchronise other signals than a reset, e.g. a locked signal from a PLL. + LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; @@ -31,8 +38,10 @@ USE work.common_pkg.ALL; ENTITY common_areset IS GENERIC ( - g_rst_level : STD_LOGIC := '1'; - g_delay_len : NATURAL := c_meta_delay_len + g_in_rst_level : STD_LOGIC := '1'; -- = in_rst level + g_rst_level : STD_LOGIC := '1'; -- = out_rst level (keep original generic + -- name for backward compatibility) + g_delay_len : NATURAL := c_meta_delay_len ); PORT ( in_rst : IN STD_LOGIC; @@ -44,27 +53,24 @@ END; ARCHITECTURE str OF common_areset IS - CONSTANT c_rst_level_n : STD_LOGIC := NOT g_rst_level; - SIGNAL i_rst : STD_LOGIC; + CONSTANT c_out_rst_level : STD_LOGIC := g_rst_level; + CONSTANT c_out_rst_level_n : STD_LOGIC := NOT g_rst_level; + + SIGNAL i_rst : STD_LOGIC; + BEGIN - -- When in_rst becomes g_rst_level then out_rst follows immediately (asynchronous reset apply). - -- When in_rst becomes NOT g_rst_level then out_rst follows after g_delay_len cycles (synchronous reset release). - - -- This block can also synchronise other signals than reset: - -- . g_rst_level = '0': output asynchronoulsy follows the falling edge input and synchronises the rising edge input. - -- . g_rst_level = '1': output asynchronoulsy follows the rising edge input and synchronises the falling edge input. - - i_rst <= NOT in_rst WHEN g_rst_level = '0' ELSE in_rst; + i_rst <= in_rst WHEN g_in_rst_level = '1' ELSE NOT in_rst; + u_async : ENTITY work.common_async GENERIC MAP ( - g_rst_level => g_rst_level, + g_rst_level => c_out_rst_level, g_delay_len => g_delay_len ) PORT MAP ( rst => i_rst, clk => clk, - din => c_rst_level_n, + din => c_out_rst_level_n, dout => out_rst ); diff --git a/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd b/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd index 5532ed3cbf3710ef4d5c7caf599dc4563df1c81a..9ede2c9dceda45d1e95f99e258ace804c1d37a2a 100644 --- a/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd +++ b/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd @@ -323,18 +323,18 @@ BEGIN av_writedata => reset_seq_mosi_arr(i).wrdata(31 downto 0), av_write => reset_seq_mosi_arr(i).wr, irq => open, - clk => mm_clk, + clk => mm_clk, -- use clk = mm_clk for av_* port csr_reset => mm_rst, - reset1_dsrt_qual => core_pll_locked_reg, -- Registered copy of the the core pll_locked + reset1_dsrt_qual => core_pll_locked_reg, -- core pll_locked synchronised to clk = mm_clk domain reset2_dsrt_qual => '1', -- Tied to '1' in example design. Tx xcvr is not used. reset5_dsrt_qual => rx_xcvr_ready_in_arr(i), reset_in0 => mm_rst, - reset_out0 => pll_reset_async_arr(i), -- Use channel 0 to reset the core pll + reset_out0 => pll_reset_async_arr(i), -- Use channel 0 to reset the core pll reset_out1 => xcvr_rst_arr(i), -- Use channel 1 to reset the transceiver reset controller reset_out2 => open, reset_out3 => open, reset_out4 => open, - reset_out5 => rx_avs_rst_arr(i), -- mm_clk domain + reset_out5 => rx_avs_rst_arr(i), -- in mm_clk domain reset_out6 => rxlink_rst_async_arr(i), reset_out7 => rxframe_rst_async_arr(i) ); @@ -464,7 +464,8 @@ BEGIN u_common_areset_pll_locked : ENTITY common_lib.common_areset GENERIC MAP ( - g_rst_level => '0' -- synchronises the rising edge input. + g_in_rst_level => '0', -- synchronises the rising edge of input in_rst. + g_rst_level => '0' ) PORT MAP ( in_rst => core_pll_locked, diff --git a/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b.vhd b/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b.vhd index 44d48af186c2691e98c150bd1cef97d9b7dda1d0..a08c3e105ce6fd8604ea80f9f1af358456f90c19 100644 --- a/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b.vhd +++ b/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b.vhd @@ -323,18 +323,18 @@ BEGIN av_writedata => reset_seq_mosi_arr(i).wrdata(31 downto 0), av_write => reset_seq_mosi_arr(i).wr, irq => open, - clk => mm_clk, + clk => mm_clk, -- use clk = mm_clk for av_* port csr_reset => mm_rst, - reset1_dsrt_qual => core_pll_locked_reg, -- Registered copy of the the core pll_locked + reset1_dsrt_qual => core_pll_locked_reg, -- core pll_locked synchronised to clk = mm_clk domain reset2_dsrt_qual => '1', -- Tied to '1' in example design. Tx xcvr is not used. reset5_dsrt_qual => rx_xcvr_ready_in_arr(i), reset_in0 => mm_rst, - reset_out0 => pll_reset_async_arr(i), -- Use channel 0 to reset the core pll + reset_out0 => pll_reset_async_arr(i), -- Use channel 0 to reset the core pll reset_out1 => xcvr_rst_arr(i), -- Use channel 1 to reset the transceiver reset controller reset_out2 => open, reset_out3 => open, reset_out4 => open, - reset_out5 => rx_avs_rst_arr(i), -- mm_clk domain + reset_out5 => rx_avs_rst_arr(i), -- in mm_clk domain reset_out6 => rxlink_rst_async_arr(i), reset_out7 => rxframe_rst_async_arr(i) ); @@ -464,7 +464,8 @@ BEGIN u_common_areset_pll_locked : ENTITY common_lib.common_areset GENERIC MAP ( - g_rst_level => '0' -- synchronises the rising edge input. + g_in_rst_level => '0', -- synchronises the rising edge of input in_rst. + g_rst_level => '0' ) PORT MAP ( in_rst => core_pll_locked, diff --git a/libraries/technology/jesd204b/hdllib.cfg b/libraries/technology/jesd204b/hdllib.cfg index 7b51dbf3f6b9c30e68c6118feaff0787d43c8805..f17f1df54b2bcbe1c4f2cb21451d8437387ae75c 100644 --- a/libraries/technology/jesd204b/hdllib.cfg +++ b/libraries/technology/jesd204b/hdllib.cfg @@ -9,16 +9,13 @@ hdl_lib_disclose_library_clause_names = ip_arria10_e2sg_jesd204b ip_arria10_e2sg_jesd204b_191 synth_files = - tech_jesd204b_component_pkg.vhd - tech_jesd204b_arria10_e1sg.vhd - tech_jesd204b_arria10_e2sg.vhd - tech_jesd204b.vhd + tech_jesd204b_component_pkg.vhd + tech_jesd204b_arria10_e1sg.vhd + tech_jesd204b_arria10_e2sg.vhd + tech_jesd204b.vhd test_bench_files = -# FIXME: broken, need fixing -# tb_tech_jesd204b_pkg.vhd -# tb_tech_jesd204b.vhd -# tb_tb_tech_jesd204b.vhd + tb_tech_jesd204b.vhd regression_test_vhdl = # FIXME: broken, need fixing