From 42bdc3c391eb779e4e3456347be07deb9e77fd6b Mon Sep 17 00:00:00 2001
From: Daniel van der Schuur <schuur@astron.nl>
Date: Mon, 23 Nov 2015 05:29:50 +0000
Subject: [PATCH] -Added options to preserve input fields.

---
 libraries/base/dp/src/vhdl/dp_block_gen.vhd | 37 ++++++++++++++-------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/libraries/base/dp/src/vhdl/dp_block_gen.vhd b/libraries/base/dp/src/vhdl/dp_block_gen.vhd
index bf55935b89..ec320d7263 100644
--- a/libraries/base/dp/src/vhdl/dp_block_gen.vhd
+++ b/libraries/base/dp/src/vhdl/dp_block_gen.vhd
@@ -57,7 +57,9 @@ ENTITY dp_block_gen IS
     g_nof_blk_per_sync   : NATURAL := 8;
     g_empty              : NATURAL := 0;
     g_channel            : NATURAL := 0;
-    g_error              : NATURAL := 0
+    g_error              : NATURAL := 0;
+    g_preserve_sync      : BOOLEAN := FALSE;
+    g_preserve_bsn       : BOOLEAN := FALSE
   );             
   PORT (         
     rst        : IN  STD_LOGIC;
@@ -116,10 +118,17 @@ BEGIN
       nxt_r.src_out.re    <= snk_in.re;
       nxt_r.src_out.im    <= snk_in.im;
     END IF;
-    nxt_r.src_out.sync  <= '0';
+
+    IF g_preserve_sync = FALSE THEN
+      nxt_r.src_out.sync  <= '0';
+    ELSE
+      nxt_r.src_out.sync  <= snk_in.sync;
+    END IF;
+
     nxt_r.src_out.valid <= '0';
     nxt_r.src_out.sop   <= '0';
     nxt_r.src_out.eop   <= '0';
+    nxt_r.src_out.bsn   <= snk_in.bsn;
     
     CASE r.state IS
       WHEN s_sop =>
@@ -129,19 +138,23 @@ BEGIN
           nxt_r.bsn     <= (OTHERS=>'0');
         ELSE                            -- enabled block generator
           IF ready='1' THEN      -- once enabled the complete block will be output
-            IF r.blk_cnt=0 THEN
-              nxt_r.src_out.sync  <= '1';
-            END IF;
-            IF r.blk_cnt>=g_nof_blk_per_sync-1 THEN
-              nxt_r.blk_cnt <= 0;
-            ELSE
-              nxt_r.blk_cnt <= r.blk_cnt+1;
+            IF g_preserve_sync = FALSE THEN
+              IF r.blk_cnt=0 THEN
+                nxt_r.src_out.sync  <= '1';
+              END IF;
+              IF r.blk_cnt>=g_nof_blk_per_sync-1 THEN
+                nxt_r.blk_cnt <= 0;
+              ELSE
+                nxt_r.blk_cnt <= r.blk_cnt+1;
+              END IF;
             END IF;
             nxt_r.src_out.valid   <= '1';
             nxt_r.src_out.sop     <= '1';
-            nxt_r.bsn             <= INCR_UVEC(r.bsn, 1);
-            nxt_r.src_out.bsn     <= r.bsn;
-            nxt_r.src_out.channel <= TO_DP_CHANNEL(g_channel);
+            IF g_preserve_bsn=FALSE THEN
+              nxt_r.bsn             <= INCR_UVEC(r.bsn, 1);
+              nxt_r.src_out.bsn     <= r.bsn;
+              nxt_r.src_out.channel <= TO_DP_CHANNEL(g_channel);
+            END IF;
             IF g_nof_data=1 THEN
               nxt_r.src_out.eop   <= '1';  -- single word block
               nxt_r.src_out.empty <= TO_DP_EMPTY(g_empty);
-- 
GitLab