diff --git a/libraries/base/dp/src/vhdl/dp_block_validate_bsn_at_sync.vhd b/libraries/base/dp/src/vhdl/dp_block_validate_bsn_at_sync.vhd index 448680abac93e80bc994dc19b6e6d7b6f0a84e2c..e1e714d42dec00842405d373fc6869aa0da30c8d 100644 --- a/libraries/base/dp/src/vhdl/dp_block_validate_bsn_at_sync.vhd +++ b/libraries/base/dp/src/vhdl/dp_block_validate_bsn_at_sync.vhd @@ -56,6 +56,7 @@ -- ===================================================================== -- 0 [31..0] RO nof_sync_discarded 0x0 -- 1 [31..0] RO nof_sync 0x0 +-- 2 [31..0] RW clear 0x0 read or write to clear counters -- ===================================================================== ------------------------------------------------------------------------------- LIBRARY IEEE, common_lib; @@ -89,8 +90,8 @@ END dp_block_validate_bsn_at_sync; ARCHITECTURE rtl OF dp_block_validate_bsn_at_sync IS - CONSTANT c_nof_regs : NATURAL := 2; - + CONSTANT c_nof_regs : NATURAL := 3; + CONSTANT c_clear_adr : NATURAL := c_nof_regs-1; -- Define the actual size of the MM slave register CONSTANT c_mm_reg : t_c_mem := (latency => 1, adr_w => ceil_log2(c_nof_regs), @@ -101,8 +102,8 @@ ARCHITECTURE rtl OF dp_block_validate_bsn_at_sync IS -- Registers in st_clk domain SIGNAL count_reg : STD_LOGIC_VECTOR(c_mm_reg.nof_dat*c_mm_reg.dat_w-1 DOWNTO 0) := (OTHERS=>'0'); - SIGNAL mm_cnt_clr : STD_LOGIC_VECTOR(c_nof_regs-1 DOWNTO 0); - SIGNAL cnt_clr : STD_LOGIC_VECTOR(c_nof_regs-1 DOWNTO 0); + SIGNAL mm_cnt_clr : STD_LOGIC; + SIGNAL cnt_clr : STD_LOGIC; SIGNAL cnt_sync : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); SIGNAL cnt_sync_en : STD_LOGIC; SIGNAL cnt_discarded : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); @@ -118,18 +119,16 @@ ARCHITECTURE rtl OF dp_block_validate_bsn_at_sync IS BEGIN - gen_cnt_clr : FOR I IN 0 TO c_nof_regs-1 GENERATE - mm_cnt_clr(I) <= reg_mosi.rd WHEN TO_UINT(reg_mosi.address(c_mm_reg.adr_w-1 DOWNTO 0)) = I ELSE '0' ; - u_common_spulse : ENTITY common_lib.common_spulse + mm_cnt_clr <= (reg_mosi.rd OR reg_mosi.wr) WHEN TO_UINT(reg_mosi.address(c_mm_reg.adr_w-1 DOWNTO 0)) = c_clear_adr ELSE '0' ; + u_common_spulse : ENTITY common_lib.common_spulse PORT MAP ( in_rst => mm_rst, in_clk => mm_clk, - in_pulse => mm_cnt_clr(I), + in_pulse => mm_cnt_clr, out_rst => dp_rst, out_clk => dp_clk, - out_pulse => cnt_clr(I) + out_pulse => cnt_clr ); - END GENERATE; -- discarded counter cnt_discarded_en <= '1' WHEN in_sosi.sync = '1' AND bsn_ok = '0' ELSE '0'; @@ -141,7 +140,7 @@ BEGIN rst => dp_rst, clk => dp_clk, - cnt_clr => cnt_clr(0), + cnt_clr => cnt_clr, cnt_en => cnt_discarded_en, count => cnt_discarded ); @@ -155,7 +154,7 @@ BEGIN rst => dp_rst, clk => dp_clk, - cnt_clr => cnt_clr(1), + cnt_clr => cnt_clr, cnt_en => in_sosi.sync, count => cnt_sync ); diff --git a/libraries/base/dp/src/vhdl/dp_block_validate_err.vhd b/libraries/base/dp/src/vhdl/dp_block_validate_err.vhd index e1319cfe169bb48fed5779cd1fb224f44f31a50c..d556561e91200eba47fa455630d27d6b3dfaab03 100644 --- a/libraries/base/dp/src/vhdl/dp_block_validate_err.vhd +++ b/libraries/base/dp/src/vhdl/dp_block_validate_err.vhd @@ -52,6 +52,7 @@ -- g_nof_err_counts-1 [31..0] RO err_count_index_[g_nof_err_counts-1] 0x0 -- g_nof_err_counts [31..0] RO total_discarded_blocks 0x0 -- g_nof_err_counts+1 [31..0] RO total_block_count 0x0 +-- g_nof_err_counts+2 [31..0] RW clear 0x0 read or write to clear counters -- ==================================================================================== ------------------------------------------------------------------------------- LIBRARY IEEE, common_lib; @@ -101,7 +102,8 @@ ARCHITECTURE rtl OF dp_block_validate_err IS CONSTANT c_max_cnt : STD_LOGIC_VECTOR(g_cnt_w-1 DOWNTO 0) := (OTHERS => '1'); CONSTANT c_nof_err_ok : NATURAL := ceil_div(g_max_block_size, g_min_block_size); - CONSTANT c_nof_regs : NATURAL := g_nof_err_counts + 2; + CONSTANT c_nof_regs : NATURAL := g_nof_err_counts + 3; + CONSTANT c_clear_adr : NATURAL := c_nof_regs-1; TYPE t_cnt_err_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(g_cnt_w-1 DOWNTO 0); @@ -115,8 +117,8 @@ ARCHITECTURE rtl OF dp_block_validate_err IS -- Registers in st_clk domain SIGNAL count_reg : STD_LOGIC_VECTOR(c_mm_reg.nof_dat*c_mm_reg.dat_w-1 DOWNTO 0) := (OTHERS=>'0'); - SIGNAL mm_cnt_clr : STD_LOGIC_VECTOR(c_nof_regs-1 DOWNTO 0); - SIGNAL cnt_clr : STD_LOGIC_VECTOR(c_nof_regs-1 DOWNTO 0); + SIGNAL mm_cnt_clr : STD_LOGIC; + SIGNAL cnt_clr : STD_LOGIC; SIGNAL cnt_blk : STD_LOGIC_VECTOR(g_cnt_w-1 DOWNTO 0); SIGNAL cnt_blk_en : STD_LOGIC; SIGNAL cnt_discarded : STD_LOGIC_VECTOR(g_cnt_w-1 DOWNTO 0); @@ -137,18 +139,16 @@ ARCHITECTURE rtl OF dp_block_validate_err IS BEGIN - gen_cnt_clr : FOR I IN 0 TO c_nof_regs-1 GENERATE - mm_cnt_clr(I) <= reg_mosi.rd WHEN TO_UINT(reg_mosi.address(c_mm_reg.adr_w-1 DOWNTO 0)) = I ELSE '0' ; - u_common_spulse : ENTITY common_lib.common_spulse + mm_cnt_clr <= (reg_mosi.rd OR reg_mosi.wr) WHEN TO_UINT(reg_mosi.address(c_mm_reg.adr_w-1 DOWNTO 0)) = c_clear_adr ELSE '0' ; + u_common_spulse : ENTITY common_lib.common_spulse PORT MAP ( in_rst => mm_rst, in_clk => mm_clk, - in_pulse => mm_cnt_clr(I), + in_pulse => mm_cnt_clr, out_rst => dp_rst, out_clk => dp_clk, - out_pulse => cnt_clr(I) + out_pulse => cnt_clr ); - END GENERATE; -- block counter cnt_blk_en <= snk_in.eop WHEN UNSIGNED(cnt_blk) < UNSIGNED(c_max_cnt) ELSE '0'; @@ -160,7 +160,7 @@ BEGIN rst => dp_rst, clk => dp_clk, - cnt_clr => cnt_clr(g_nof_err_counts+1), + cnt_clr => cnt_clr, cnt_en => cnt_blk_en, count => cnt_blk ); @@ -176,7 +176,7 @@ BEGIN rst => dp_rst, clk => dp_clk, - cnt_clr => cnt_clr(g_nof_err_counts), + cnt_clr => cnt_clr, cnt_en => cnt_discarded_en, count => cnt_discarded ); @@ -192,7 +192,7 @@ BEGIN rst => dp_rst, clk => dp_clk, - cnt_clr => cnt_clr(I), + cnt_clr => cnt_clr, cnt_en => cnt_err_en(I), count => cnt_err(I) );