From fb2b60adfd56a5a0b2787fef78e025b75a5f2cca Mon Sep 17 00:00:00 2001
From: Reinier van der Walle <walle@astron.nl>
Date: Mon, 22 Feb 2021 16:26:02 +0100
Subject: [PATCH] Added mon_latency test to tb

---
 .../base/dp/src/vhdl/dp_bsn_monitor_v2.vhd    | 18 ++++++----
 .../dp/src/vhdl/mms_dp_bsn_monitor_v2.vhd     |  4 +--
 .../base/dp/tb/vhdl/tb_dp_bsn_monitor_v2.vhd  | 36 +++++++++----------
 3 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/libraries/base/dp/src/vhdl/dp_bsn_monitor_v2.vhd b/libraries/base/dp/src/vhdl/dp_bsn_monitor_v2.vhd
index 0264196f17..d85b6d8cab 100644
--- a/libraries/base/dp/src/vhdl/dp_bsn_monitor_v2.vhd
+++ b/libraries/base/dp/src/vhdl/dp_bsn_monitor_v2.vhd
@@ -108,7 +108,7 @@ ARCHITECTURE rtl OF dp_bsn_monitor_v2 IS
   SIGNAL nof_err                     : STD_LOGIC_VECTOR(c_cnt_sop_w-1 DOWNTO 0);
   SIGNAL cnt_valid                   : STD_LOGIC_VECTOR(c_cnt_valid_w-1 DOWNTO 0);
   SIGNAL nof_valid                   : STD_LOGIC_VECTOR(c_cnt_valid_w-1 DOWNTO 0);
-  SIGNAL cnt_lateny                  : STD_LOGIC_VECTOR(c_cnt_latency_w-1 DOWNTO 0);
+  SIGNAL cnt_latency                  : STD_LOGIC_VECTOR(c_cnt_latency_w-1 DOWNTO 0);
   SIGNAL latency                     : STD_LOGIC_VECTOR(c_cnt_latency_w-1 DOWNTO 0);
 
   SIGNAL i_mon_ready_stable          : STD_LOGIC;
@@ -120,6 +120,12 @@ ARCHITECTURE rtl OF dp_bsn_monitor_v2 IS
   SIGNAL i_mon_latency               : STD_LOGIC_VECTOR(c_cnt_latency_w-1 DOWNTO 0);
   SIGNAL i_current_bsn               : STD_LOGIC_VECTOR(c_bsn_w-1 DOWNTO 0);
 
+  SIGNAL inv_mon_bsn_at_sync         : STD_LOGIC_VECTOR(c_bsn_w-1 DOWNTO 0) := (OTHERS => '1');
+  SIGNAL inv_mon_nof_sop             : STD_LOGIC_VECTOR(c_cnt_sop_w-1 DOWNTO 0) := (OTHERS => '1');
+  SIGNAL inv_mon_nof_err             : STD_LOGIC_VECTOR(c_cnt_sop_w-1 DOWNTO 0) := (OTHERS => '1');
+  SIGNAL inv_mon_nof_valid           : STD_LOGIC_VECTOR(c_cnt_valid_w-1 DOWNTO 0) := (OTHERS => '1');
+  SIGNAL inv_mon_latency             : STD_LOGIC_VECTOR(c_cnt_latency_w-1 DOWNTO 0) := (OTHERS => '1');
+
   SIGNAL sync_timeout_cnt            : STD_LOGIC_VECTOR(c_sync_timeout_w-1 DOWNTO 0);
   SIGNAL sync_timeout                : STD_LOGIC;
   SIGNAL sync_timeout_n              : STD_LOGIC;
@@ -142,11 +148,11 @@ BEGIN
   mon_sync_timeout        <= sync_timeout;
   mon_ready_stable        <= i_mon_ready_stable;
   mon_xon_stable          <= i_mon_xon_stable;
-  mon_bsn_at_sync         <= i_mon_bsn_at_sync  WHEN sync_timeout='0' ELSE (OTHERS=>'1');
-  mon_nof_sop             <= i_mon_nof_sop      WHEN sync_timeout='0' ELSE (OTHERS=>'1');
-  mon_nof_err             <= i_mon_nof_err      WHEN sync_timeout='0' ELSE (OTHERS=>'1');
-  mon_nof_valid           <= i_mon_nof_valid    WHEN sync_timeout='0' ELSE (OTHERS=>'1');
-  mon_latency             <= i_mon_latency      WHEN sync_timeout='0' ELSE (OTHERS=>'1');
+  mon_bsn_at_sync         <= i_mon_bsn_at_sync  WHEN sync_timeout='0' ELSE inv_mon_bsn_at_sync;
+  mon_nof_sop             <= i_mon_nof_sop      WHEN sync_timeout='0' ELSE inv_mon_nof_sop;
+  mon_nof_err             <= i_mon_nof_err      WHEN sync_timeout='0' ELSE inv_mon_nof_err;
+  mon_nof_valid           <= i_mon_nof_valid    WHEN sync_timeout='0' ELSE inv_mon_nof_valid;
+  mon_latency             <= i_mon_latency      WHEN sync_timeout='0' ELSE inv_mon_latency;
   
   nxt_mon_evt          <= sync OR sync_timeout_revt;
   nxt_mon_ready_stable <= ready_stable WHEN sync='1' ELSE i_mon_ready_stable;
diff --git a/libraries/base/dp/src/vhdl/mms_dp_bsn_monitor_v2.vhd b/libraries/base/dp/src/vhdl/mms_dp_bsn_monitor_v2.vhd
index 07c144aa31..80a7f15e28 100644
--- a/libraries/base/dp/src/vhdl/mms_dp_bsn_monitor_v2.vhd
+++ b/libraries/base/dp/src/vhdl/mms_dp_bsn_monitor_v2.vhd
@@ -99,7 +99,7 @@ BEGIN
 
   gen_stream : FOR i IN 0 TO g_nof_streams-1 GENERATE
       
-    u_reg : ENTITY work.dp_bsn_monitor_reg
+    u_reg : ENTITY work.dp_bsn_monitor_reg_v2
     GENERIC MAP (
       g_cross_clock_domain => g_cross_clock_domain
     )
@@ -129,7 +129,7 @@ BEGIN
       mon_latency             => mon_latency_arr(i)
     );
     
-    u_mon : ENTITY work.dp_bsn_monitor
+    u_mon : ENTITY work.dp_bsn_monitor_v2
     GENERIC MAP (
       g_sync_timeout  => g_sync_timeout,
       g_error_bi      => g_error_bi
diff --git a/libraries/base/dp/tb/vhdl/tb_dp_bsn_monitor_v2.vhd b/libraries/base/dp/tb/vhdl/tb_dp_bsn_monitor_v2.vhd
index 288e6be915..09eeec859d 100644
--- a/libraries/base/dp/tb/vhdl/tb_dp_bsn_monitor_v2.vhd
+++ b/libraries/base/dp/tb/vhdl/tb_dp_bsn_monitor_v2.vhd
@@ -57,6 +57,7 @@ ARCHITECTURE tb OF tb_dp_bsn_monitor_v2 IS
   CONSTANT c_sync_offset         : NATURAL := 0;
   CONSTANT c_sync_timeout        : NATURAL := c_frame_len*c_sync_period;
   CONSTANT c_nof_repeat          : NATURAL := g_nof_sync * c_sync_period + 1;
+  CONSTANT c_ref_sync_latency    : NATURAL := 7;
   
   -- Error control
   CONSTANT c_skip_sync_nr        : INTEGER := -1;  -- use e.g. 5 >= 0 to introduce a sync timeout at that sync interval 5 (causes missing sinc error by proc_dp_verify_sync), use -1 to disable skipping a sync
@@ -75,7 +76,7 @@ ARCHITECTURE tb OF tb_dp_bsn_monitor_v2 IS
   SIGNAL in_en                   : STD_LOGIC := '1';
   SIGNAL in_siso                 : t_dp_siso := c_dp_siso_rdy;
   SIGNAL in_sosi                 : t_dp_sosi;
-  SIGNAL sync_in                 : STD_LOGIC := '0';
+  SIGNAL ref_sync                : STD_LOGIC := '0';
   
   -- Output
   SIGNAL out_siso                : t_dp_siso;
@@ -111,6 +112,7 @@ ARCHITECTURE tb OF tb_dp_bsn_monitor_v2 IS
   SIGNAL expected_nof_sop      : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
   SIGNAL expected_nof_err      : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
   SIGNAL expected_nof_valid    : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
+  SIGNAL expected_latency      : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
 
 BEGIN
 
@@ -185,6 +187,7 @@ BEGIN
   expected_nof_sop     <= TO_UVEC(            c_sync_period, c_word_w);
   expected_nof_err     <= TO_UVEC(                c_nof_err, c_word_w);
   expected_nof_valid   <= TO_UVEC(c_frame_len*c_sync_period, c_word_w);
+  expected_latency     <= TO_UVEC(       c_ref_sync_latency, c_word_w);
   
   ------------------------------------------------------------------------------
   -- SISO FLOW CONTROL GENERATION
@@ -252,23 +255,18 @@ BEGIN
     WAIT;
   END PROCESS;
 
-  p_sync_in_stimuli : PROCESS
+  p_ref_sync_stimuli : PROCESS
   BEGIN
-    sync_in <= '0';
+    ref_sync <= '0';
     proc_common_wait_until_low(clk, rst);
-    proc_common_wait_some_cycles(clk, 25); --on SOP
-    sync_in <= '1';
-    proc_common_wait_some_cycles(clk, 1);
-    sync_in <= '0';
-    proc_common_wait_some_cycles(clk, 38); --on EOP
-    sync_in <= '1';
-    proc_common_wait_some_cycles(clk, 1);
-    sync_in <= '0';
-    proc_common_wait_some_cycles(clk, 67); -- random 
-    sync_in <= '1';
-    proc_common_wait_some_cycles(clk, 1);
-    sync_in <= '0';
-
+    proc_common_wait_until_hi_lo(clk, in_sosi.sync);
+    proc_common_wait_some_cycles(clk, (c_sync_timeout-2-c_ref_sync_latency)); 
+    FOR I IN 0 TO c_nof_repeat-2 LOOP
+      ref_sync <= '1';
+      proc_common_wait_some_cycles(clk, 1);
+      ref_sync <= '0';
+      proc_common_wait_some_cycles(clk, c_sync_timeout-1); 
+    END LOOP;
     WAIT;
   END PROCESS;
 
@@ -305,6 +303,7 @@ BEGIN
   proc_dp_verify_value(e_equal, clk, verify_done, expected_nof_sop,   mon_nof_sop);
   proc_dp_verify_value(e_equal, clk, verify_done, expected_nof_err,   mon_nof_err);
   proc_dp_verify_value(e_equal, clk, verify_done, expected_nof_valid, mon_nof_valid);
+  proc_dp_verify_value(e_equal, clk, verify_done, expected_latency,   mon_latency);
   
   
   ------------------------------------------------------------------------------
@@ -323,7 +322,7 @@ BEGIN
     -- ST interface
     in_siso                 => out_siso,
     in_sosi                 => in_sosi,
-    sync_in                 => sync_in,
+    ref_sync                => ref_sync,
     
     -- MM interface
     -- . control
@@ -338,8 +337,7 @@ BEGIN
     mon_nof_sop             => mon_nof_sop,
     mon_nof_err             => mon_nof_err,
     mon_nof_valid           => mon_nof_valid,
-    mon_latency             => mon_latency,
-
+    mon_latency             => mon_latency
   );
     
 END tb;
-- 
GitLab