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