diff --git a/hw/ip/otp_ctrl/dv/env/otp_ctrl_scoreboard.sv b/hw/ip/otp_ctrl/dv/env/otp_ctrl_scoreboard.sv
index f3b382a..105b183 100644
--- a/hw/ip/otp_ctrl/dv/env/otp_ctrl_scoreboard.sv
+++ b/hw/ip/otp_ctrl/dv/env/otp_ctrl_scoreboard.sv
@@ -234,10 +234,10 @@
     end else if ((csr_addr & addr_mask) inside
         {[SW_WINDOW_BASE_ADDR : SW_WINDOW_BASE_ADDR + SW_WINDOW_SIZE]}) begin
       if (data_phase_read) begin
-        bit [TL_AW-1:0] dai_addr = (csr_addr & addr_mask - SW_WINDOW_BASE_ADDR) >> 2;
-        int part_idx = get_part_index(dai_addr);
-        bit [TL_DW-1:0] exp_val = sw_read_lock[part_idx] ? 0 : otp_a[dai_addr];
-        `DV_CHECK_EQ(item.d_data, exp_val, $sformatf("mem read mismatch at addr %0h", dai_addr))
+        bit [TL_AW-1:0] otp_addr = (csr_addr & addr_mask - SW_WINDOW_BASE_ADDR) >> 2;
+        int part_idx = get_part_index(otp_addr << 2);
+        bit [TL_DW-1:0] exp_val = sw_read_lock[part_idx] ? 0 : otp_a[otp_addr];
+        `DV_CHECK_EQ(item.d_data, exp_val, $sformatf("mem read mismatch at addr %0h", otp_addr))
       end
       return;
     // TEST ACCESS window
@@ -301,19 +301,16 @@
                                        `gmv(ral.direct_access_wdata_0)};
                 // write OTP memory
                 end else begin
-                  bit[TL_AW-1:0] normalized_dai_addr = get_normalized_dai_addr();
+                  bit[TL_AW-1:0] otp_addr = get_scb_otp_addr();
                   if (!is_secret(dai_addr)) begin
-                    if (otp_a[normalized_dai_addr] == 0) begin
-                      otp_a[normalized_dai_addr] = `gmv(ral.direct_access_wdata_0);
-                    end else begin
-                      predict_status_err(1);
-                    end
+                    if (otp_a[otp_addr] == 0) otp_a[otp_addr] = `gmv(ral.direct_access_wdata_0);
+                    else predict_status_err(1);
                   end else begin
-                    bit [SCRAMBLE_DATA_SIZE-1:0] secret_data = {otp_a[normalized_dai_addr + 1],
-                                                                otp_a[normalized_dai_addr]};
+                    bit [SCRAMBLE_DATA_SIZE-1:0] secret_data = {otp_a[otp_addr + 1],
+                                                                otp_a[otp_addr]};
                     if (scramble_data(secret_data, part_idx) == 0) begin
-                      otp_a[normalized_dai_addr] = `gmv(ral.direct_access_wdata_0);
-                      otp_a[normalized_dai_addr + 1] = `gmv(ral.direct_access_wdata_1);
+                      otp_a[otp_addr]     = `gmv(ral.direct_access_wdata_0);
+                      otp_a[otp_addr + 1] = `gmv(ral.direct_access_wdata_1);
                     end else begin
                       predict_status_err(1);
                     end
@@ -331,17 +328,17 @@
       "direct_access_rdata_0", "direct_access_rdata_1": begin
         // TODO: need to check last cmd is READ
         if (data_phase_read && `gmv(ral.direct_access_regwen)) begin
-          bit [TL_AW-1:0] dai_addr = get_normalized_dai_addr();
+          bit [TL_AW-1:0] otp_addr = get_scb_otp_addr();
           if (csr.get_name() == "direct_access_rdata_0") begin
-            bit [TL_DW-1:0] exp_val = dai_read_valid ? otp_a[dai_addr] : 0;
+            bit [TL_DW-1:0] exp_val = dai_read_valid ? otp_a[otp_addr] : 0;
             `DV_CHECK_EQ(item.d_data, exp_val,
-                         $sformatf("DAI read mismatch at addr %0h", dai_addr))
+                         $sformatf("DAI read mismatch at addr %0h", csr_addr))
             do_read_check = 0;
           end else begin
             if (is_secret(`gmv(ral.direct_access_address))) begin
-              bit [TL_DW-1:0] exp_val = dai_read_valid ? otp_a[dai_addr + 1] : 0;
+              bit [TL_DW-1:0] exp_val = dai_read_valid ? otp_a[otp_addr + 1] : 0;
               `DV_CHECK_EQ(item.d_data, exp_val,
-                           $sformatf("DAI read mismatch at addr %0h", dai_addr + 1))
+                           $sformatf("DAI read mismatch at addr %0h", otp_addr + 1))
               do_read_check = 0;
             end
           end
@@ -542,9 +539,9 @@
     present_encode_with_final_const = enc_array[NUM_ROUND-1] ^ intermediate_state;
   endfunction
 
-  function bit [TL_AW-1:0] get_normalized_dai_addr();
+  function bit [TL_AW-1:0] get_scb_otp_addr();
     bit [TL_DW-1:0] dai_addr = `gmv(ral.direct_access_address);
-    get_normalized_dai_addr = is_secret(dai_addr) ? dai_addr >> 3 << 1 : dai_addr >> 2;
+    get_scb_otp_addr = is_secret(dai_addr) ? dai_addr >> 3 << 1 : dai_addr >> 2;
   endfunction
 
   virtual function void predict_status_err(bit dai_err, int part_idx = 0);
diff --git a/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_base_vseq.sv b/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_base_vseq.sv
index 539ba4f..5b1a36e 100644
--- a/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_base_vseq.sv
+++ b/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_base_vseq.sv
@@ -113,14 +113,14 @@
   // SW digest data are calculated in sw and won't be checked in OTP.
   // Here to simplify testbench, write random data to sw digest
   virtual task write_sw_digests(bit [1:0] wr_digest = $urandom());
-    bit [TL_DW*2-1:0] rdata;
+    bit [TL_DW*2-1:0] wdata;
     if (wr_digest[0]) begin
-      `DV_CHECK_STD_RANDOMIZE_FATAL(rdata);
-      dai_wr(CreatorSwCfgDigestOffset, rdata[TL_DW-1:0], rdata[TL_DW*2-1:TL_DW]);
+      `DV_CHECK_STD_RANDOMIZE_FATAL(wdata);
+      dai_wr(CreatorSwCfgDigestOffset, wdata[TL_DW-1:0], wdata[TL_DW*2-1:TL_DW]);
     end
     if (wr_digest[1]) begin
-      `DV_CHECK_STD_RANDOMIZE_FATAL(rdata);
-      dai_wr(OwnerSwCfgDigestOffset, rdata[TL_DW-1:0], rdata[TL_DW*2-1:TL_DW]);
+      `DV_CHECK_STD_RANDOMIZE_FATAL(wdata);
+      dai_wr(OwnerSwCfgDigestOffset, wdata[TL_DW-1:0], wdata[TL_DW*2-1:TL_DW]);
     end
   endtask
 
@@ -130,7 +130,7 @@
   endtask
 
   // The digest CSR values are verified in otp_ctrl_scoreboard
-  virtual task check_digests();
+  virtual task rd_digests();
     bit [TL_DW-1:0] val;
     csr_rd(.ptr(ral.creator_sw_cfg_digest_0), .value(val));
     csr_rd(.ptr(ral.creator_sw_cfg_digest_1), .value(val));
diff --git a/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_macro_errs_vseq.sv b/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_macro_errs_vseq.sv
index 2223b7a..748798a 100644
--- a/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_macro_errs_vseq.sv
+++ b/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_macro_errs_vseq.sv
@@ -16,13 +16,12 @@
     num_dai_op inside {[100:500]};
   }
 
-  virtual task pre_start();
-    super.pre_start();
+  function void pre_randomize();
     // TODO: enable this once support
     // this.partition_index_c.constraint_mode(0);
     // this.dai_wr_legal_addr_c.constraint_mode(0);
     this.dai_wr_blank_addr_c.constraint_mode(0);
     collect_used_addr = 0;
-  endtask
+  endfunction
 
 endclass
diff --git a/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_smoke_vseq.sv b/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_smoke_vseq.sv
index ace20e3..4cef1d4 100644
--- a/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_smoke_vseq.sv
+++ b/hw/ip/otp_ctrl/dv/env/seq_lib/otp_ctrl_smoke_vseq.sv
@@ -122,8 +122,8 @@
       write_sw_rd_locks();
       dut_init();
 
-      // check digest
-      check_digests();
+      // read and check digest in scb
+      rd_digests();
 
       if (do_lc_trans) begin
         req_lc_transition();
