From 0e1106fac36c0d374be135ad49181fbcb25a8fa0 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Mon, 3 Oct 2022 16:58:39 +0200 Subject: [PATCH] Add bs_new_sync_interval. --- .../base/dp/src/vhdl/dp_bsn_source_v2.vhd | 20 +++++++++++++---- .../base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd | 4 +++- .../base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd | 22 ++++++++++++++++++- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/libraries/base/dp/src/vhdl/dp_bsn_source_v2.vhd b/libraries/base/dp/src/vhdl/dp_bsn_source_v2.vhd index a2f1756cc8..cd9c04750d 100644 --- a/libraries/base/dp/src/vhdl/dp_bsn_source_v2.vhd +++ b/libraries/base/dp/src/vhdl/dp_bsn_source_v2.vhd @@ -76,7 +76,8 @@ ENTITY dp_bsn_source_v2 IS dp_on_pps : IN STD_LOGIC; dp_on_status : OUT STD_LOGIC; -- = src_out.valid - bs_restart : OUT STD_LOGIC; -- = src_out.sop for first sop after dp_on went high + bs_restart : OUT STD_LOGIC; -- = src_out.sync for first sync after dp_on went high + bs_new_interval : OUT STD_LOGIC; -- = active during first src_out.sync interval nof_clk_per_sync : IN STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0) := TO_UVEC(g_nof_clk_per_sync, c_word_w); bsn_init : IN STD_LOGIC_VECTOR(g_bsn_w-1 DOWNTO 0) := (OTHERS=>'0'); @@ -107,7 +108,10 @@ ARCHITECTURE rtl OF dp_bsn_source_v2 IS SIGNAL i_src_out : t_dp_sosi := c_dp_sosi_init; SIGNAL nxt_src_out : t_dp_sosi; - SIGNAL nxt_bs_restart : STD_LOGIC; + SIGNAL i_bs_restart : STD_LOGIC; + SIGNAL nxt_bs_restart : STD_LOGIC; + SIGNAL i_bs_new_interval : STD_LOGIC; + SIGNAL reg_bs_new_interval : STD_LOGIC; SIGNAL nxt_bsn_time_offset_cnt : STD_LOGIC_VECTOR(g_bsn_time_offset_w-1 DOWNTO 0); SIGNAL bsn_time_offset_cnt : STD_LOGIC_VECTOR(g_bsn_time_offset_w-1 DOWNTO 0); @@ -121,6 +125,8 @@ BEGIN src_out <= i_src_out; dp_on_status <= i_src_out.valid; + bs_restart <= i_bs_restart; + bs_new_interval <= i_bs_new_interval; p_state : PROCESS(sync, sync_size_cnt, nof_clk_per_sync, state, i_src_out, block_size_cnt, bsn_time_offset_cnt, @@ -232,6 +238,10 @@ BEGIN -- to have bs_restart at first src_out.sync and src_out.sop. nxt_bs_restart <= nxt_src_out.valid AND NOT i_src_out.valid; + i_bs_new_interval <= '1' WHEN i_bs_restart = '1' ELSE + '0' WHEN i_src_out.sync = '1' ELSE + reg_bs_new_interval; + p_clk : PROCESS(rst, clk) BEGIN IF rst='1' THEN @@ -241,7 +251,8 @@ BEGIN sync_size_cnt <= (OTHERS=>'0'); sync <= '0'; block_size_cnt <= (OTHERS=>'0'); - bs_restart <= '0'; + i_bs_restart <= '0'; + reg_bs_new_interval <= '0'; bsn_time_offset_cnt <= (OTHERS=>'0'); ELSIF rising_edge(clk) THEN prev_state <= state; @@ -250,7 +261,8 @@ BEGIN sync_size_cnt <= nxt_sync_size_cnt; sync <= nxt_sync; block_size_cnt <= nxt_block_size_cnt; - bs_restart <= nxt_bs_restart; + i_bs_restart <= nxt_bs_restart; + reg_bs_new_interval <= i_bs_new_interval; bsn_time_offset_cnt <= nxt_bsn_time_offset_cnt; END IF; END PROCESS; diff --git a/libraries/base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd b/libraries/base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd index c20fc561b1..f4db0b10fd 100644 --- a/libraries/base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd +++ b/libraries/base/dp/src/vhdl/mms_dp_bsn_source_v2.vhd @@ -52,7 +52,8 @@ ENTITY mms_dp_bsn_source_v2 IS -- Streaming clock domain bs_sosi : OUT t_dp_sosi; - bs_restart : OUT STD_LOGIC -- pulse to indicate if the bsn_source has restarted + bs_restart : OUT STD_LOGIC; -- pulse to indicate if the bsn_source has restarted + bs_new_interval : OUT STD_LOGIC -- level to indicate first sync interval if the bsn_source has restarted ); END mms_dp_bsn_source_v2; @@ -116,6 +117,7 @@ BEGIN dp_on_pps => dp_on_pps, dp_on_status => dp_on_status, bs_restart => bs_restart, + bs_new_interval => bs_new_interval, bsn_init => bsn_init, nof_clk_per_sync => nof_clk_per_sync, bsn_time_offset => bsn_time_offset, diff --git a/libraries/base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd b/libraries/base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd index c6ace124e0..dcd79f1032 100644 --- a/libraries/base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd +++ b/libraries/base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd @@ -124,6 +124,8 @@ ARCHITECTURE tb OF tb_dp_bsn_source_v2 IS SIGNAL dp_on_pps : STD_LOGIC := '0'; SIGNAL dp_on_status : STD_LOGIC; SIGNAL bs_restart : STD_LOGIC; + SIGNAL bs_new_interval : STD_LOGIC; + SIGNAL tb_new_interval : STD_LOGIC := '0'; SIGNAL bsn_init : STD_LOGIC_VECTOR(c_bsn_w-1 DOWNTO 0) := (OTHERS=>'0'); SIGNAL bsn_time_offset : STD_LOGIC_VECTOR(c_bsn_time_offset_w-1 DOWNTO 0) := (OTHERS=>'0'); SIGNAL bs_sosi : t_dp_sosi; @@ -304,6 +306,23 @@ BEGIN END IF; END PROCESS; + p_verify_bs_new_interval : PROCESS(clk) + BEGIN + IF rising_edge(clk) THEN + IF bs_restart = '1' THEN + ASSERT bs_new_interval = '1' REPORT "Wrong begin of bs_new_interval" SEVERITY ERROR; + tb_new_interval <= '1'; + ELSIF bs_sosi.sync = '1' THEN + ASSERT bs_new_interval = '0' REPORT "Wrong end of bs_new_interval" SEVERITY ERROR; + tb_new_interval <= '0'; + ELSIF tb_new_interval = '1' THEN + ASSERT bs_new_interval = '1' REPORT "Wrong level during bs_new_interval" SEVERITY ERROR; + ELSE + ASSERT bs_new_interval = '0' REPORT "Unexpected bs_new_interval" SEVERITY ERROR; + END IF; + END IF; + END PROCESS; + ----------------------------------------------------------------------------- -- DUT: dp_bsn_source_v2 ----------------------------------------------------------------------------- @@ -324,7 +343,8 @@ BEGIN dp_on_pps => dp_on_pps, dp_on_status => dp_on_status, -- = src_out.valid - bs_restart => bs_restart, -- = src_out.sop for first sop after dp_on went high + bs_restart => bs_restart, -- = src_out.sync for first sync after dp_on went high + bs_new_interval => bs_new_interval, -- active during first src_out.sync interval bsn_init => bsn_init, bsn_time_offset => bsn_time_offset, -- GitLab