diff --git a/libraries/base/dp/src/vhdl/dp_block_gen.vhd b/libraries/base/dp/src/vhdl/dp_block_gen.vhd index bf55935b897d14c867dbaf2d73f1299389956287..ec320d72635d98fa0c24fb3604a257fc6a70ff35 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);