[dv] only read mem which is written with full word data

workaround for #5262
Also change num_access to only count read access
Signed-off-by: Weicai Yang <weicai@google.com>
diff --git a/hw/dv/sv/cip_lib/cip_base_vseq.sv b/hw/dv/sv/cip_lib/cip_base_vseq.sv
index b71ccb0..adab240 100644
--- a/hw/dv/sv/cip_lib/cip_base_vseq.sv
+++ b/hw/dv/sv/cip_lib/cip_base_vseq.sv
@@ -831,7 +831,8 @@
       end
     end
 
-    repeat (num_accesses * num_times) begin
+    num_accesses = num_accesses * num_times;
+    while (num_accesses) begin
       fork
         begin
           bit [BUS_AW-1:0]  addr;
@@ -866,11 +867,16 @@
               // get all the programmed addresses and randomly pick one
               addr_mask_t addr_mask = mem_exist_addr_q[$urandom_range(0,
                                                                       mem_exist_addr_q.size - 1)];
-              addr = addr_mask.addr;
-              if (get_mem_access_by_addr(ral, addr) != "WO") begin
-                mask = get_rand_contiguous_mask(addr_mask.mask);
-                tl_access_w_abort(.addr(addr), .write(0), .data(data), .status(status), .mask(mask),
-                                  .blocking(1), .req_abort_pct($urandom_range(0, 100)));
+              // TODO, Remove this if condition when #5262 is solved
+              // Only read when it's fully written
+              if (addr_mask.mask == '1) begin
+                addr = addr_mask.addr;
+                if (get_mem_access_by_addr(ral, addr) != "WO") begin
+                  mask = get_rand_contiguous_mask(addr_mask.mask);
+                  tl_access_w_abort(.addr(addr), .write(0), .data(data), .status(status), .mask(mask),
+                                    .blocking(1), .req_abort_pct($urandom_range(0, 100)));
+                end
+                num_accesses--;
               end
             end
           endcase