From 18e80874d81e226497a3623badc96c5dfe926bb1 Mon Sep 17 00:00:00 2001
From: Erik Kooistra <kooistra@astron.nl>
Date: Wed, 9 Jan 2019 08:23:46 +0000
Subject: [PATCH] Corrected use of cnt. Added g_pipeline.

---
 libraries/base/dp/src/vhdl/dp_block_select.vhd | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/libraries/base/dp/src/vhdl/dp_block_select.vhd b/libraries/base/dp/src/vhdl/dp_block_select.vhd
index 4f65c63d60..78ed890036 100644
--- a/libraries/base/dp/src/vhdl/dp_block_select.vhd
+++ b/libraries/base/dp/src/vhdl/dp_block_select.vhd
@@ -53,6 +53,7 @@ USE work.dp_stream_pkg.ALL;
 
 ENTITY dp_block_select IS
   GENERIC (
+    g_pipeline             : NATURAL := 1;
     g_nof_blocks_per_sync  : NATURAL;
     g_index_lo             : NATURAL := 0;
     g_index_hi             : NATURAL
@@ -81,8 +82,8 @@ ARCHITECTURE rtl OF dp_block_select IS
 
   SIGNAL cnt_reg       : NATURAL RANGE 0 TO true_log_pow2(g_nof_blocks_per_sync);
   SIGNAL cnt           : NATURAL;
-  SIGNAL sync_sosi_reg : t_dp_sosi;
-  SIGNAL sync_sosi     : t_dp_sosi;
+  SIGNAL sync_sosi_reg : t_dp_sosi;  -- hold snk_in.bsn
+  SIGNAL sync_sosi     : t_dp_sosi;  -- hold snk_in.bsn
   SIGNAL block_sosi    : t_dp_sosi;
   
 BEGIN
@@ -101,19 +102,19 @@ BEGIN
   -- Preserve snk_in @ sync
   sync_sosi <= snk_in WHEN snk_in.sync='1' ELSE sync_sosi_reg;
   
-  -- Count eop per sync interval
+  -- Count blocks at sop per sync interval and restart count at sync
   p_cnt : PROCESS(snk_in, cnt_reg)
   BEGIN
     cnt <= cnt_reg;
     IF snk_in.sync='1' THEN
       cnt <= 0;
-    ELSIF snk_in.eop='1' THEN
+    ELSIF snk_in.sop='1' THEN
       cnt <= cnt_reg + 1;
     END IF;
   END PROCESS;
 
   -- Resize snk_in combinatorially into block_sosi, so no impact on ready latency (RL)
-  p_block_sosi : PROCESS(snk_in, cnt_reg, index_lo, index_hi, sync_sosi)
+  p_block_sosi : PROCESS(snk_in, cnt, index_lo, index_hi, sync_sosi)
   BEGIN
     -- Default keep snk_in info and data fields
     block_sosi <= snk_in;
@@ -126,14 +127,14 @@ BEGIN
     ELSE    
       IF snk_in.valid='1' THEN
         -- Drop blocks outside selected range
-        IF cnt_reg < index_lo OR cnt_reg > index_hi THEN
+        IF cnt < index_lo OR cnt > index_hi THEN
           block_sosi.sync  <= '0';
           block_sosi.sop   <= '0';
           block_sosi.eop   <= '0';
           block_sosi.valid <= '0';
         END IF;
         -- Move input sync and bsn to first output block
-        IF cnt_reg=index_lo THEN
+        IF cnt=index_lo THEN
           block_sosi.sync <= snk_in.sop;
           block_sosi.bsn  <= sync_sosi.bsn;   -- bsn is valid at sop
         END IF;
@@ -144,7 +145,7 @@ BEGIN
   -- Register block_sosi to easy timing closure
   u_pipeline : ENTITY work.dp_pipeline
   GENERIC MAP (
-    g_pipeline   => 1  -- 0 for wires, > 0 for registers, 
+    g_pipeline   => g_pipeline  -- 0 for wires, > 0 for registers, 
   )
   PORT MAP (
     rst          => rst,
-- 
GitLab