[dv/shadow_reg] move get_shadow_regs function to dv_base_ral_block

The main purpose of this PR is to move the get_shadow_regs function to
dv_base_reg_block.
This PR also fixed a small logic in get_enabled_regs. The
`get_registers` function already return all registers recursively, so
there is no need to recursively all every block again.

Signed-off-by: Cindy Chen <chencindy@google.com>
diff --git a/hw/dv/sv/cip_lib/cip_base_env_cfg.sv b/hw/dv/sv/cip_lib/cip_base_env_cfg.sv
index 990ba83..48ca02f 100644
--- a/hw/dv/sv/cip_lib/cip_base_env_cfg.sv
+++ b/hw/dv/sv/cip_lib/cip_base_env_cfg.sv
@@ -119,10 +119,10 @@
   // - If the update error and storage error alerts are assigned to each shadowed register
   // - If input alert names are within the cfg.list_of_alerts
   virtual function void check_shadow_reg_alerts();
-    dv_base_reg shadowed_csrs[$], non_shadowed_csrs[$];
+    dv_base_reg shadowed_csrs[$];
     string update_err_alert_name, storage_err_alert_name;
 
-    split_all_csrs_by_shadowed(ral, shadowed_csrs, non_shadowed_csrs);
+    ral.get_shadowed_regs(shadowed_csrs);
     foreach (shadowed_csrs[i]) begin
       update_err_alert_name = shadowed_csrs[i].get_update_err_alert_name();
       storage_err_alert_name = shadowed_csrs[i].get_storage_err_alert_name();
diff --git a/hw/dv/sv/cip_lib/cip_base_pkg.sv b/hw/dv/sv/cip_lib/cip_base_pkg.sv
index ae2fbb2..30421a0 100644
--- a/hw/dv/sv/cip_lib/cip_base_pkg.sv
+++ b/hw/dv/sv/cip_lib/cip_base_pkg.sv
@@ -30,17 +30,6 @@
   } shadow_reg_alert_e;
 
   // functions
-  function automatic void split_all_csrs_by_shadowed(input  dv_base_reg_block ral,
-                                                     output dv_base_reg shadowed_csrs[$],
-                                                     output dv_base_reg non_shadowed_csrs[$]);
-    dv_base_reg all_csrs[$];
-    ral.get_dv_base_regs(all_csrs);
-    foreach (all_csrs[i]) begin
-      if (all_csrs[i].get_is_shadowed()) shadowed_csrs.push_back(all_csrs[i]);
-      else non_shadowed_csrs.push_back(all_csrs[i]);
-    end
-  endfunction
-
   // package sources
   // base env
   `include "cip_base_env_cfg.sv"
diff --git a/hw/dv/sv/cip_lib/cip_base_vseq.sv b/hw/dv/sv/cip_lib/cip_base_vseq.sv
index 8b65649..b8339a5 100644
--- a/hw/dv/sv/cip_lib/cip_base_vseq.sv
+++ b/hw/dv/sv/cip_lib/cip_base_vseq.sv
@@ -667,20 +667,20 @@
 
   virtual task run_shadow_reg_errors(int num_times);
     csr_excl_item      csr_excl = add_and_return_csr_excl("csr_excl");
-    dv_base_reg        shadowed_csrs[$], non_shadowed_csrs[$], test_csrs[$];
+    dv_base_reg        shadowed_csrs[$], all_csrs[$], test_csrs[$];
     uvm_reg_data_t     wdata;
     bit                alert_triggered;
 
-    split_all_csrs_by_shadowed(ral, shadowed_csrs, non_shadowed_csrs);
+    ral.get_shadowed_regs(shadowed_csrs);
+    ral.get_dv_base_regs(all_csrs);
 
     for (int trans = 1; trans <= num_times; trans++) begin
       `uvm_info(`gfn, $sformatf("Running shadow reg error test iteration %0d/%0d", trans,
                                 num_times), UVM_LOW)
       repeat ($urandom_range(10, 100)) begin
-        non_shadowed_csrs.shuffle();
+        all_csrs.shuffle();
         test_csrs.delete();
-        test_csrs = {shadowed_csrs,
-                     non_shadowed_csrs[0: $urandom_range(0, non_shadowed_csrs.size()-1)]};
+        test_csrs = {shadowed_csrs, all_csrs[0: $urandom_range(0, all_csrs.size()-1)]};
         test_csrs.shuffle();
 
         if ($urandom_range(1, 10) == 10) dut_init("HARD");
@@ -767,10 +767,9 @@
         // random read to check if the register values are equal to the predicted values,
         // reading shadow registers after their first write will clear the phase tracker
         if ($urandom_range(0, 1)) begin
-          test_csrs = {shadowed_csrs, non_shadowed_csrs};
-          test_csrs.shuffle();
-          foreach (test_csrs[i]) begin
-            do_check_csr_or_field_rd(.csr(test_csrs[i]),
+          all_csrs.shuffle();
+          foreach (all_csrs[i]) begin
+            do_check_csr_or_field_rd(.csr(all_csrs[i]),
                                      .blocking(0),
                                      .compare(1),
                                      .compare_vs_ral(1),
diff --git a/hw/dv/sv/dv_base_reg/dv_base_reg_block.sv b/hw/dv/sv/dv_base_reg/dv_base_reg_block.sv
index b31220e..34dbf86 100644
--- a/hw/dv/sv/dv_base_reg/dv_base_reg_block.sv
+++ b/hw/dv/sv/dv_base_reg/dv_base_reg_block.sv
@@ -34,6 +34,7 @@
 
   function void get_dv_base_regs(ref dv_base_reg dv_regs[$]);
     uvm_reg ral_regs[$];
+    // if the ral has hier, this function will recursively includes the registers in the sub-blocks
     this.get_registers(ral_regs);
     foreach (ral_regs[i]) `downcast(dv_regs[i], ral_regs[i])
   endfunction
@@ -48,17 +49,18 @@
   endfunction
 
   function void get_enable_regs(ref dv_base_reg enable_regs[$]);
-    dv_base_reg_block blks[$];
-    get_dv_base_reg_blocks(blks);
-    if (blks.size() == 0) begin
-      dv_base_reg all_regs[$];
-      this.get_dv_base_regs(all_regs);
-      foreach (all_regs[i]) begin
-        if (all_regs[i].is_enable_reg()) enable_regs.push_back(all_regs[i]);
-      end
-      return;
-    end else begin
-      foreach (blks[i]) blks[i].get_enable_regs(enable_regs);
+    dv_base_reg all_regs[$];
+    this.get_dv_base_regs(all_regs);
+    foreach (all_regs[i]) begin
+      if (all_regs[i].is_enable_reg()) enable_regs.push_back(all_regs[i]);
+    end
+  endfunction
+
+  function void get_shadowed_regs(ref dv_base_reg shadowed_regs[$]);
+    dv_base_reg all_regs[$];
+    this.get_dv_base_regs(all_regs);
+    foreach (all_regs[i]) begin
+      if (all_regs[i].get_is_shadowed()) shadowed_regs.push_back(all_regs[i]);
     end
   endfunction
 
diff --git a/hw/top_earlgrey/dv/env/seq_lib/chip_shadow_reg_errors_vseq.sv b/hw/top_earlgrey/dv/env/seq_lib/chip_shadow_reg_errors_vseq.sv
index 5d46dba..432cfc6 100644
--- a/hw/top_earlgrey/dv/env/seq_lib/chip_shadow_reg_errors_vseq.sv
+++ b/hw/top_earlgrey/dv/env/seq_lib/chip_shadow_reg_errors_vseq.sv
@@ -14,10 +14,10 @@
 
   // Most of the shadow_reg related tasks are from `dv/sv/cip_lib/cip_base_vseq.sv`
   virtual task body();
-    dv_base_reg shadowed_csrs[$], non_shadowed_csrs[$];
+    dv_base_reg shadowed_csrs[$];
 
     // Get all shadowed_regs from each IP
-    split_all_csrs_by_shadowed(ral, shadowed_csrs, non_shadowed_csrs);
+    ral.get_shadowed_regs(shadowed_csrs);
     shadowed_csrs.shuffle();
 
     foreach (shadowed_csrs[i]) begin