From 217e96fd505af1d958aae026b5af52bfd40beb2d Mon Sep 17 00:00:00 2001
From: Reinier van der Walle <walle@astron.nl>
Date: Fri, 17 Dec 2021 11:50:45 +0100
Subject: [PATCH] processed review comments, also updated TB

---
 .../vhdl/dp_block_validate_bsn_at_sync.vhd    | 44 +++++++++++++++----
 .../vhdl/tb_dp_block_validate_bsn_at_sync.vhd | 14 +++---
 .../tb_tb_dp_block_validate_bsn_at_sync.vhd   | 13 +++---
 3 files changed, 47 insertions(+), 24 deletions(-)

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 173423f11b..52843298d1 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
@@ -133,7 +133,6 @@ BEGIN
     );
 
   -- discarded counter
-  cnt_discarded_en <= '1' WHEN in_sosi.sync = '1' AND bsn_ok = '0' ELSE '0';
   u_discarded_counter : ENTITY common_lib.common_counter
   GENERIC MAP (
     g_width => c_word_w,
@@ -187,19 +186,48 @@ BEGIN
     -- MM registers in st_clk domain
     reg_wr_arr  => OPEN,
     reg_rd_arr  => OPEN,
-    in_reg      => count_reg,   -- read only
+    in_reg      => count_reg, -- read only
     out_reg     => OPEN       -- no write
   );
 
-  bsn_at_sync <= bs_sosi.bsn WHEN bs_sosi.sync = '1' ELSE bsn_at_sync_reg;
+  p_bsn_check : PROCESS(bs_sosi, in_sosi, bsn_at_sync_reg, bsn_ok_reg)
+    VARIABLE v_bsn_ok      : STD_LOGIC;
+    VARIABLE v_bsn_at_sync : STD_LOGIC_VECTOR(g_bsn_w-1 DOWNTO 0);  
+  BEGIN
+    v_bsn_at_sync := bsn_at_sync_reg;     
+    v_bsn_ok      := bsn_ok_reg;
+    out_valid     <= out_valid_reg;
+ 
+    IF bs_sosi.sync = '1' THEN
+      v_bsn_at_sync := bs_sosi.bsn;
+    END IF;
 
-  bsn_ok      <= bsn_ok_reg WHEN in_sosi.sync = '0' OR TO_UINT(in_sosi.channel) /= g_check_channel ELSE 
-                 '1'        WHEN in_sosi.bsn = bsn_at_sync ELSE '0';
+    IF in_sosi.sync = '1' AND TO_UINT(in_sosi.channel) = g_check_channel THEN 
+      IF in_sosi.bsn = v_bsn_at_sync THEN
+        v_bsn_ok := '1';
+      ELSE
+        v_bsn_ok := '0';
+      END IF;
+    END IF;
 
-  out_valid   <= '1'    WHEN in_sosi.sop = '1' AND TO_UINT(in_sosi.channel) /= g_check_channel ELSE
-                 bsn_ok WHEN in_sosi.sop = '1' AND TO_UINT(in_sosi.channel) = g_check_channel ELSE
-                 out_valid_reg;
+    IF in_sosi.sop = '1' THEN
+      IF TO_UINT(in_sosi.channel) = g_check_channel THEN
+        out_valid <= v_bsn_ok;
+      ELSE
+        out_valid <= '1';
+      END IF;
+    END IF;
+ 
+    IF TO_UINT(in_sosi.channel) = g_check_channel THEN
+      cnt_discarded_en <= in_sosi.sync AND NOT v_bsn_ok;
+    ELSE
+      cnt_discarded_en <= '0';
+    END IF;
 
+    bsn_ok      <= v_bsn_ok;
+    bsn_at_sync <= v_bsn_at_sync;
+  END PROCESS;
+  
   p_dp_clk : PROCESS(dp_rst, dp_clk)
   BEGIN
     IF dp_rst='1' THEN
diff --git a/libraries/base/dp/tb/vhdl/tb_dp_block_validate_bsn_at_sync.vhd b/libraries/base/dp/tb/vhdl/tb_dp_block_validate_bsn_at_sync.vhd
index 9483cfab0d..5269a6923c 100644
--- a/libraries/base/dp/tb/vhdl/tb_dp_block_validate_bsn_at_sync.vhd
+++ b/libraries/base/dp/tb/vhdl/tb_dp_block_validate_bsn_at_sync.vhd
@@ -46,8 +46,7 @@ ENTITY tb_dp_block_validate_bsn_at_sync IS
   GENERIC (
     g_nof_blocks_per_sync  : NATURAL := 5;
     g_nof_data_per_blk     : NATURAL := 6; 
-    g_bsn_init             : NATURAL := 7; -- >= g_nof_blocks_per_sync for discarded sync, < g_nof_blocks_per_sync for no discarded sync,
-    g_check_channel        : NATURAL := 8  -- channel to check, the channel field is a counter value. 
+    g_bsn_init             : NATURAL := 7  -- >= g_nof_blocks_per_sync for discarded sync, < g_nof_blocks_per_sync for no discarded sync.
   );
 END tb_dp_block_validate_bsn_at_sync;
 
@@ -64,6 +63,7 @@ ARCHITECTURE tb OF tb_dp_block_validate_bsn_at_sync IS
   CONSTANT c_gap_size       : NATURAL := 4;
   CONSTANT c_nof_sync       : NATURAL := 5;
   CONSTANT c_nof_blk        : NATURAL := g_nof_blocks_per_sync * c_nof_sync;
+  CONSTANT c_check_channel  : NATURAL := g_nof_blocks_per_sync;
   
   SIGNAL dp_clk             : STD_LOGIC := '1';
   SIGNAL mm_clk             : STD_LOGIC := '1';
@@ -146,7 +146,7 @@ BEGIN
   ------------------------------------------------------------------------------     
   u_dut : ENTITY work.dp_block_validate_bsn_at_sync
   GENERIC MAP (
-    g_check_channel => g_check_channel
+    g_check_channel => c_check_channel
   )
   PORT MAP (
     dp_rst       => rst,
@@ -192,7 +192,7 @@ BEGIN
   BEGIN
     IF rising_edge(dp_clk) THEN
       IF reference_sosi.sop = '1' THEN
-        IF g_bsn_init >= g_nof_blocks_per_sync AND TO_UINT(reference_sosi.channel) = g_check_channel THEN
+        IF g_bsn_init >= g_nof_blocks_per_sync AND TO_UINT(reference_sosi.channel) = c_check_channel THEN
           v_valid_blk := FALSE;
         ELSE
           v_valid_blk := TRUE;
@@ -220,10 +220,8 @@ BEGIN
 
     proc_mem_mm_bus_rd(0, mm_clk, reg_miso, reg_mosi);
     proc_mem_mm_bus_rd_latency(1, mm_clk);
-    IF g_bsn_init = g_nof_blocks_per_sync THEN -- should have c_nof_sync discarded sync
-      ASSERT c_nof_sync = TO_UINT(reg_miso.rddata(c_word_w-1 DOWNTO 0)) REPORT "Wrong discarded sync count" SEVERITY ERROR;
-    ELSIF g_bsn_init > g_nof_blocks_per_sync THEN -- should have c_nof_sync -1 discarded sync
-      ASSERT c_nof_sync-1 = TO_UINT(reg_miso.rddata(c_word_w-1 DOWNTO 0)) REPORT "Wrong discarded sync count" SEVERITY ERROR;
+    IF g_bsn_init >= g_nof_blocks_per_sync THEN -- should have 1 discarded sync
+      ASSERT 1 = TO_UINT(reg_miso.rddata(c_word_w-1 DOWNTO 0)) REPORT "Wrong discarded sync count" SEVERITY ERROR;
     ELSE -- 0 discarded sync
       ASSERT 0 = TO_UINT(reg_miso.rddata(c_word_w-1 DOWNTO 0)) REPORT "Wrong discarded sync count" SEVERITY ERROR;
     END IF;
diff --git a/libraries/base/dp/tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd b/libraries/base/dp/tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd
index 6828a0964e..8832d49c0f 100644
--- a/libraries/base/dp/tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd
+++ b/libraries/base/dp/tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd
@@ -43,13 +43,10 @@ ARCHITECTURE tb OF tb_tb_dp_block_validate_bsn_at_sync IS
 BEGIN
 --    g_nof_blocks_per_sync  : NATURAL := 5;
 --    g_nof_data_per_blk     : NATURAL := 6; 
---    g_bsn_init             : NATURAL := 7; -- >= g_nof_blocks_per_sync for discarded sync, < g_nof_blocks_per_sync for no discarded sync,
---    g_check_channel        : NATURAL := 8  -- channel to check, the channel field is a counter value. 
-
-  u_smaller    : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 0,   8); -- g_bsn_init < g_nof_blocks_per_sync
-  u_equal      : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 5,   8); -- g_bsn_init = g_nof_blocks_per_sync
-  u_larger     : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 8,   8); -- g_bsn_init > g_nof_blocks_per_sync
-  u_ch_on_sync : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 5,  10); -- g_check_channel MOD c_blk_per_sync = 0,
-  u_no_ch      : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 8, 500); -- channel will never reach 500
+--    g_bsn_init             : NATURAL := 7 -- >= g_nof_blocks_per_sync for discarded sync, < g_nof_blocks_per_sync for no discarded sync.
+
+  u_smaller    : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, c_blk_per_sync - 4); -- g_bsn_init < g_nof_blocks_per_sync
+  u_equal      : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, c_blk_per_sync);     -- g_bsn_init = g_nof_blocks_per_sync
+  u_larger     : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, c_blk_per_sync + 4); -- g_bsn_init > g_nof_blocks_per_sync
   
 END tb;
-- 
GitLab