diff --git a/applications/apertif/designs/apertif_unb1_fn_beamformer/tb/vhdl/tb_apertif_unb1_fn_beamformer_nodes.vhd b/applications/apertif/designs/apertif_unb1_fn_beamformer/tb/vhdl/tb_apertif_unb1_fn_beamformer_nodes.vhd
index 0f1c38f984082fda70c169d59a133e1b668ccc96..bb26575f1f33e6986cfd7c191ba2a4a092c81720 100644
--- a/applications/apertif/designs/apertif_unb1_fn_beamformer/tb/vhdl/tb_apertif_unb1_fn_beamformer_nodes.vhd
+++ b/applications/apertif/designs/apertif_unb1_fn_beamformer/tb/vhdl/tb_apertif_unb1_fn_beamformer_nodes.vhd
@@ -237,7 +237,7 @@ BEGIN
   
     CONSTANT c_max_X    : NATURAL := 4;
     
-    VARIABLE v_I        : NATURAL;
+    VARIABLE v_I        : INTEGER;
     VARIABLE v_exp_re   : NATURAL;
     VARIABLE v_exp_im   : NATURAL;
     VARIABLE v_exp_data : NATURAL;
@@ -260,10 +260,12 @@ BEGIN
     --       <-> <-> <->                                                 <-> Q_interleave = 2
     FOR u IN 0 TO c_bf.nof_bf_units-1 LOOP
       v_exp_im := u;
-      v_I := 0;
-      FOR bui IN 0 TO N_blk/Q_interleave-1 LOOP
-        FOR t IN 0 TO N_int_x-1 LOOP
-          FOR q IN 0 TO Q_interleave-1 LOOP
+      v_I := c_output_db_nof_words-1;
+      -- Read the DB buffer in reverse order (so with decrementing addresses) to be able to use retry MM read
+      -- after rd_data conflict with firmware write (that uses incrementing addresses)
+      FOR bui IN N_blk/Q_interleave-1 DOWNTO 0 LOOP
+        FOR t IN N_int_x-1 DOWNTO 0 LOOP
+          FOR q IN Q_interleave-1 DOWNTO 0 LOOP
             -- Expected data
             v_exp_re := bui * Q_interleave + q;
             v_exp_data := v_exp_im * 2**c_transport_w + v_exp_re;
@@ -272,13 +274,14 @@ BEGIN
             v_rd_data := TO_UINT(rd_data_db);
             IF v_rd_data/=v_exp_data THEN
               -- Retry MM read when occasionaly MM read and internal firmware write occur at same address and then cause 'X'
+              proc_common_wait_some_cycles(ext_clk, 1);
               mmf_mm_bus_rd(c_mm_file_ram_diag_data_buf_output, u*c_output_db_nof_words_pow2 + v_I, rd_data_db, tb_clk);
               v_rd_data := TO_UINT(rd_data_db);
               nof_rd_data_db_X <= nof_rd_data_db_X + 1;
               REPORT int_to_str(v_I) & int_to_str(nof_rd_data_db_X) & " : " & int_to_str(v_rd_data) & " /= " & int_to_str(v_exp_data);
             END IF;
             ASSERT v_rd_data=v_exp_data REPORT "DB unexpected transpose output data : " & int_to_str(v_rd_data) & " /= " & int_to_str(v_exp_data);
-            v_I := v_I + 1;
+            v_I := v_I - 1;
           END LOOP;
         END LOOP;     
       END LOOP;