diff --git a/libraries/base/dp/src/vhdl/dp_block_validate_err.vhd b/libraries/base/dp/src/vhdl/dp_block_validate_err.vhd
index 8ec87e33d5e660fcffebb90920322adf73704d99..f661fdbf53d60631f26d0328690dd4269fcf177e 100644
--- a/libraries/base/dp/src/vhdl/dp_block_validate_err.vhd
+++ b/libraries/base/dp/src/vhdl/dp_block_validate_err.vhd
@@ -39,6 +39,10 @@
 --     a gap between blocks the dp_fifo_fill_eop needs 1 cycle to process a block.
 --     Streaming without gaps may cause the fifo to overflow. Bursts of blocks
 --     can be handled by increasing g_fifo_size.
+--   . g_max/min_block_size indicate the minimum / maximum length of incoming blocks.
+--     The ratio of max / min is used to determine a fifo size for the outgoing
+--     sosi.valid signals. To minimize logic the g_min_block_size can be set to
+--     the expected minimum block size.
 -------------------------------------------------------------------------------
 -- REGMAP
 -------------------------------------------------------------------------------
diff --git a/libraries/base/ring/src/vhdl/ring_rx.vhd b/libraries/base/ring/src/vhdl/ring_rx.vhd
index 58a4fd3bbc6d023e79d9aec43acfa46879316f6d..969f00100f0444e5f6ba503ea0f8ce8906203c06 100644
--- a/libraries/base/ring/src/vhdl/ring_rx.vhd
+++ b/libraries/base/ring/src/vhdl/ring_rx.vhd
@@ -152,39 +152,37 @@ BEGIN
     hdr_fields_out_arr(0)  => hdr_fields_out
   );
 
-  p_set_meta: PROCESS(offload_rx_sosi, hdr_fields_out)
-  BEGIN
-    decoded_sosi <= offload_rx_sosi;
-    IF c_use_dp_layer THEN
+  -- Use dp layer
+  gen_dp_layer : IF c_use_dp_layer GENERATE
+    p_set_meta: PROCESS(offload_rx_sosi, hdr_fields_out)
+    BEGIN
+      decoded_sosi         <= offload_rx_sosi;
       decoded_sosi.sync    <=                   hdr_fields_out(field_hi(c_hdr_field_arr, "dp_sync"    ) DOWNTO field_lo(c_hdr_field_arr, "dp_sync"     ))(0);
       decoded_sosi.channel <= RESIZE_DP_CHANNEL(hdr_fields_out(field_hi(c_hdr_field_arr, "dp_channel" ) DOWNTO field_lo(c_hdr_field_arr, "dp_channel"  )));
       decoded_sosi.bsn     <= RESIZE_DP_BSN(    hdr_fields_out(field_hi(c_hdr_field_arr, "dp_bsn"     ) DOWNTO field_lo(c_hdr_field_arr, "dp_bsn"      )));
-    END IF;
-  END PROCESS;
-
-  -- Validate bsn at sync 
-  u_dp_block_validate_bsn_at_sync : ENTITY dp_lib.dp_block_validate_bsn_at_sync
-  GENERIC MAP (
-    g_check_channel => g_check_channel
-  )
-  PORT MAP (
-    dp_rst => dp_rst,
-    dp_clk => dp_clk,
+    END PROCESS;
 
-    in_sosi  => decoded_sosi,
-    bs_sosi  => bs_sosi,
-    out_sosi => from_lane_sosi,
+    -- Validate bsn at sync 
+    u_dp_block_validate_bsn_at_sync : ENTITY dp_lib.dp_block_validate_bsn_at_sync
+    GENERIC MAP (
+      g_check_channel => g_check_channel
+    )
+    PORT MAP (
+      dp_rst => dp_rst,
+      dp_clk => dp_clk,
 
-    mm_rst => mm_rst,
-    mm_clk => mm_clk,
+      in_sosi  => decoded_sosi,
+      bs_sosi  => bs_sosi,
+      out_sosi => from_lane_sosi,
 
-    reg_mosi => reg_dp_block_validate_bsn_at_sync_copi,
-    reg_miso => reg_dp_block_validate_bsn_at_sync_cipo
-  );
+      mm_rst => mm_rst,
+      mm_clk => mm_clk,
 
+      reg_mosi => reg_dp_block_validate_bsn_at_sync_copi,
+      reg_miso => reg_dp_block_validate_bsn_at_sync_cipo
+    );
 
   -- BSN Monitors
-  gen_bsn_monitors : IF c_use_dp_layer GENERATE
     -- Convert nof_hops to source RN
     p_hop_to_src_rn: PROCESS(validated_sosi, this_rn, N_rn)
     BEGIN
@@ -222,4 +220,9 @@ BEGIN
 
   END GENERATE; 
 
+  -- Do not use dp layer
+  gen_no_dp_layer : IF NOT c_use_dp_layer GENERATE 
+    from_lane_sosi <= offload_rx_sosi;
+  END GENERATE;
+
 END str;