diff --git a/libraries/base/diag/tb/vhdl/tb_diag_rx_seq.vhd b/libraries/base/diag/tb/vhdl/tb_diag_rx_seq.vhd
index 424f5df52bb65098e156e725c0388a85efc82acb..1c5bb853caf166cf6b5536e9b5b9ab0bf05b8f23 100644
--- a/libraries/base/diag/tb/vhdl/tb_diag_rx_seq.vhd
+++ b/libraries/base/diag/tb/vhdl/tb_diag_rx_seq.vhd
@@ -24,6 +24,7 @@ LIBRARY IEEE, common_lib;
 USE IEEE.STD_LOGIC_1164.ALL;
 USE IEEE.NUMERIC_STD.ALL;
 USE common_lib.common_pkg.ALL;
+USE work.diag_pkg.ALL;
 
 -- Purpose: test bench for diag_rx_seq control
 -- Usage:
@@ -34,17 +35,24 @@ USE common_lib.common_pkg.ALL;
 ---  stimuli process, these mismatches are reported 
 
 ENTITY tb_diag_rx_seq IS
+  GENERIC (   
+    g_use_steps      : BOOLEAN := TRUE;
+    g_steps_arr      : t_integer_arr(c_diag_seq_rx_reg_nof_steps-1 DOWNTO 0) := (OTHERS=>1);
+    g_seq_dat_w      : NATURAL := 16            -- = 12b for Lofar RCU test data, 16b for Lofar TBBI test data
+  );
 END tb_diag_rx_seq;
 
 ARCHITECTURE tb OF tb_diag_rx_seq IS
 
   CONSTANT c_period     : TIME    := 100 ns;
   CONSTANT c_nof_cycles : NATURAL := 100;
+  CONSTANT c_latency    : NATURAL := 2;
   
-  CONSTANT c_dat_w      : NATURAL := 12;   -- = 12, for RCU test data
-  --CONSTANT c_dat_w      : NATURAL := 16;   -- = 16, for TBBI test data
+  CONSTANT c_nof_steps  : NATURAL := c_diag_seq_rx_reg_nof_steps;
+  CONSTANT c_diag_res_w : NATURAL := g_seq_dat_w + 1;
   
-  CONSTANT c_diag_res_w : NATURAL := c_dat_w + 1;
+  CONSTANT c_diag_res_ok    : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0) := '0' & TO_UVEC(               0, c_diag_res_w-1);
+  CONSTANT c_diag_res_wrong : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0) := '0' & TO_UVEC(2**g_seq_dat_w-1, c_diag_res_w-1);
   
   SIGNAL tb_end         : STD_LOGIC := '0';
   SIGNAL clk            : STD_LOGIC := '1';
@@ -54,14 +62,17 @@ ARCHITECTURE tb OF tb_diag_rx_seq IS
   SIGNAL tx_diag_en     : STD_LOGIC;
   SIGNAL tx_diag_sel    : STD_LOGIC;
   SIGNAL tx_diag_req    : STD_LOGIC;
-  SIGNAL seq_dat        : STD_LOGIC_VECTOR(c_dat_w-1 DOWNTO 0);
+  SIGNAL seq_dat        : STD_LOGIC_VECTOR(g_seq_dat_w-1 DOWNTO 0);
   SIGNAL seq_val        : STD_LOGIC;
   
   -- Rx test data
-  SIGNAL rx_diag_en     : STD_LOGIC;
-  SIGNAL rx_diag_sel    : STD_LOGIC;
-  SIGNAL diag_res       : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0);
-  SIGNAL diag_res_val   : STD_LOGIC;
+  SIGNAL rx_diag_en        : STD_LOGIC;
+  SIGNAL rx_diag_sel       : STD_LOGIC;
+  SIGNAL rx_diag_steps_arr : t_integer_arr(c_nof_steps-1 DOWNTO 0) := g_steps_arr;
+  SIGNAL diag_res          : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0);
+  SIGNAL diag_res_val      : STD_LOGIC;
+  
+  SIGNAL expected_res      : STD_LOGIC_VECTOR(c_diag_res_w-1 DOWNTO 0);
 
 BEGIN
 
@@ -78,6 +89,7 @@ BEGIN
     tx_diag_req <= '1';
     
     -- COUNTER
+    expected_res <= sel_a_b(g_use_steps, c_diag_res_ok, c_diag_res_ok);
     WAIT FOR c_period;
     tx_diag_sel <= '1';
     rx_diag_sel <= '1';
@@ -107,8 +119,10 @@ BEGIN
     tx_diag_req <= '1';
     WAIT FOR c_nof_cycles*c_period;
     rx_diag_en  <= '0';             -- stop diag_res
+    WAIT FOR c_latency*c_period;
     
     -- PRSG
+    expected_res <= sel_a_b(g_use_steps, c_diag_res_wrong, c_diag_res_ok);
     WAIT FOR c_period;
     tx_diag_sel <= '0';
     rx_diag_sel <= '0';
@@ -118,8 +132,11 @@ BEGIN
     rx_diag_en  <= '1';             -- restart diag_res
     WAIT FOR c_nof_cycles*c_period;
     rx_diag_en  <= '0';             -- stop diag_res
+    WAIT FOR c_latency*c_period;
     
     -- COUNTER
+    WAIT FOR c_latency*c_period;
+    expected_res <= sel_a_b(g_use_steps, c_diag_res_ok, c_diag_res_ok);
     tx_diag_en  <= '0';             -- stop tx
     WAIT FOR c_period;
     tx_diag_sel <= '1';
@@ -134,8 +151,10 @@ BEGIN
     tx_diag_req <= '1';
     WAIT FOR c_nof_cycles*c_period;
     rx_diag_en  <= '0';             -- stop diag_res
+    WAIT FOR c_latency*c_period;
     
     -- COUNTER
+    expected_res <= sel_a_b(g_use_steps, c_diag_res_ok, c_diag_res_ok);
     tx_diag_en  <= '0';             -- stop tx
     tx_diag_req <= '0';             -- inactive tx request
     WAIT FOR c_period;
@@ -163,8 +182,10 @@ BEGIN
     WAIT FOR c_period;
     WAIT FOR c_nof_cycles*c_period;
     rx_diag_en  <= '0';             -- stop diag_res
+    WAIT FOR c_latency*c_period;
     
     -- PRSG
+    expected_res <= sel_a_b(g_use_steps, c_diag_res_wrong, c_diag_res_ok);
     WAIT FOR c_period;
     tx_diag_sel <= '0';
     rx_diag_sel <= '0';
@@ -177,8 +198,10 @@ BEGIN
     tx_diag_en  <= '0';             -- stop tx
     WAIT FOR c_nof_cycles*c_period;
     rx_diag_en  <= '0';             -- stop diag_res
+    WAIT FOR c_latency*c_period;
     
     -- PRSG
+    expected_res <= sel_a_b(g_use_steps, c_diag_res_wrong, c_diag_res_ok);
     WAIT FOR c_period;
     tx_diag_sel <= '0';
     rx_diag_sel <= '0';
@@ -201,8 +224,10 @@ BEGIN
     tx_diag_en  <= '0';             -- stop tx
     WAIT FOR c_nof_cycles*c_period;
     rx_diag_en  <= '0';             -- stop diag_res
+    WAIT FOR c_latency*c_period;
     
     -- COUNTER
+    expected_res <= sel_a_b(g_use_steps, c_diag_res_ok, c_diag_res_ok);
     WAIT FOR c_period;
     tx_diag_sel <= '1';
     rx_diag_sel <= '1';
@@ -217,6 +242,7 @@ BEGIN
     WAIT FOR c_nof_cycles*c_period; -- some more cylces to show that the diag_res error state is preserved
     tx_diag_en  <= '0';             -- stop tx
     rx_diag_en  <= '0';             -- stop diag_res
+    WAIT FOR c_latency*c_period;
     
     WAIT FOR c_nof_cycles*c_period;
     tb_end <= '1';
@@ -226,7 +252,7 @@ BEGIN
   
   u_diag_tx_seq : ENTITY work.diag_tx_seq
   GENERIC MAP (
-    g_dat_w  => c_dat_w
+    g_dat_w  => g_seq_dat_w
   )
   PORT MAP (
     clk      => clk,
@@ -240,25 +266,28 @@ BEGIN
   
   u_diag_rx_seq : ENTITY work.diag_rx_seq
   GENERIC MAP (
-    g_dat_w      => c_dat_w,
+    g_use_steps  => g_use_steps,
+    g_nof_steps  => c_nof_steps,
+    g_dat_w      => g_seq_dat_w,
     g_diag_res_w => c_diag_res_w
   )
   PORT MAP (
-    clk          => clk,
-    rst          => rst,
-    in_dat       => seq_dat,
-    in_val       => seq_val,
-    diag_en      => rx_diag_en,
-    diag_sel     => rx_diag_sel,
-    diag_res     => diag_res,
-    diag_res_val => diag_res_val
+    clk            => clk,
+    rst            => rst,
+    in_dat         => seq_dat,
+    in_val         => seq_val,
+    diag_en        => rx_diag_en,
+    diag_sel       => rx_diag_sel,
+    diag_steps_arr => rx_diag_steps_arr,
+    diag_res       => diag_res,
+    diag_res_val   => diag_res_val
   );
   
   p_report : PROCESS (clk)
   BEGIN
     IF rising_edge(clk) THEN
       IF diag_res_val='1' THEN
-        ASSERT UNSIGNED(diag_res)=0 REPORT "DIAG sequence mismatch occured.";
+        ASSERT UNSIGNED(diag_res)=UNSIGNED(expected_res) REPORT "DIAG sequence mismatch occured.";
       END IF;
     END IF;
   END PROCESS;