[flash_ctrl] DV updates for cfg mubi

Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/flash_ctrl/dv/env/flash_ctrl_env_pkg.sv b/hw/ip/flash_ctrl/dv/env/flash_ctrl_env_pkg.sv
index b423c89..1e6dff8 100644
--- a/hw/ip/flash_ctrl/dv/env/flash_ctrl_env_pkg.sv
+++ b/hw/ip/flash_ctrl/dv/env/flash_ctrl_env_pkg.sv
@@ -153,25 +153,25 @@
   } flash_sec_part_e;
 
   typedef struct packed {
-    bit  en;           // enable this region
-    bit  read_en;      // enable reads
-    bit  program_en;   // enable write
-    bit  erase_en;     // enable erase
-    bit  scramble_en;  // enable scramble
-    bit  ecc_en;       // enable ecc
-    bit  he_en;        // enable high endurance
-    uint num_pages;    // 0:NumPages % start_page
-    uint start_page;   // 0:NumPages-1
+    mubi4_t  en;           // enable this region
+    mubi4_t  read_en;      // enable reads
+    mubi4_t  program_en;   // enable write
+    mubi4_t  erase_en;     // enable erase
+    mubi4_t  scramble_en;  // enable scramble
+    mubi4_t  ecc_en;       // enable ecc
+    mubi4_t  he_en;        // enable high endurance
+    uint num_pages;        // 0:NumPages % start_page
+    uint start_page;       // 0:NumPages-1
   } flash_mp_region_cfg_t;
 
   typedef struct packed {
-    bit en;           // enable this page
-    bit read_en;      // enable reads
-    bit program_en;   // enable write
-    bit erase_en;     // enable erase
-    bit scramble_en;  // enable scramble
-    bit ecc_en;       // enable ecc
-    bit he_en;        // enable high endurance
+    mubi4_t en;           // enable this page
+    mubi4_t read_en;      // enable reads
+    mubi4_t program_en;   // enable write
+    mubi4_t erase_en;     // enable erase
+    mubi4_t scramble_en;  // enable scramble
+    mubi4_t ecc_en;       // enable ecc
+    mubi4_t he_en;        // enable high endurance
   } flash_bank_mp_info_page_cfg_t;
 
   typedef struct packed {
diff --git a/hw/ip/flash_ctrl/dv/env/flash_ctrl_scoreboard.sv b/hw/ip/flash_ctrl/dv/env/flash_ctrl_scoreboard.sv
index e71f04b..6f12e81 100644
--- a/hw/ip/flash_ctrl/dv/env/flash_ctrl_scoreboard.sv
+++ b/hw/ip/flash_ctrl/dv/env/flash_ctrl_scoreboard.sv
@@ -369,11 +369,14 @@
       FlashPartData: begin
         for (int i = 0; i < cfg.seq_cfg.num_en_mp_regions; i++) begin
           if (!wr_access_found) begin
-            csr_rd(.ptr(ral.mp_region_cfg_shadowed[i]), .value(data), .backdoor(1'b1));
-            en = get_field_val(ral.mp_region_cfg_shadowed[i].en, data);
-            prog_en = get_field_val(ral.mp_region_cfg_shadowed[i].prog_en, data);
-            base = get_field_val(ral.mp_region_cfg_shadowed[i].base, data);
-            size = get_field_val(ral.mp_region_cfg_shadowed[i].size, data);
+            csr_rd(.ptr(ral.mp_region_cfg[i]), .value(data), .backdoor(1'b1));
+            en = mubi4_test_true_strict(
+                     get_field_val(ral.mp_region_cfg[i].en, data));
+            prog_en = mubi4_test_true_strict(
+                          get_field_val(ral.mp_region_cfg[i].prog_en, data));
+            csr_rd(.ptr(ral.mp_region[i]), .value(data), .backdoor(1'b1));
+            base = get_field_val(ral.mp_region[i].base, data);
+            size = get_field_val(ral.mp_region[i].size, data);
             if (in_addr inside {[base*BytesPerPage:base*BytesPerPage+size*BytesPerPage]}) begin
               if (en) begin
                 wr_access = prog_en;
@@ -383,8 +386,9 @@
           end
         end
         if (!wr_access_found) begin
-          csr_rd(.ptr(ral.default_region_shadowed), .value(data), .backdoor(1'b1));
-          prog_en_def = get_field_val(ral.default_region_shadowed.prog_en, data);
+          csr_rd(.ptr(ral.default_region), .value(data), .backdoor(1'b1));
+          prog_en_def = mubi4_test_true_strict(
+                            get_field_val(ral.default_region.prog_en, data));
           wr_access = prog_en_def;
           wr_access_found = 1'b1;
         end
@@ -392,18 +396,18 @@
       FlashPartInfo: begin
         bk_idx = in_addr[19];
         pg_idx = in_addr[18:11];
-        csr_name = $sformatf("bank%0d_info0_page_cfg_shadowed_%0d", bk_idx, pg_idx);
+        csr_name = $sformatf("bank%0d_info0_page_cfg_%0d", bk_idx, pg_idx);
         write_access_info();
       end
       FlashPartInfo1: begin
         bk_idx = in_addr[19];
-        csr_name = $sformatf("bank%0d_info1_page_cfg_shadowed", bk_idx);
+        csr_name = $sformatf("bank%0d_info1_page_cfg", bk_idx);
         write_access_info();
       end
       FlashPartInfo2: begin
         bk_idx = in_addr[19];
         pg_idx = in_addr[18:11];
-        csr_name = $sformatf("bank%0d_info2_page_cfg_shadowed_%0d", bk_idx, pg_idx);
+        csr_name = $sformatf("bank%0d_info2_page_cfg_%0d", bk_idx, pg_idx);
         write_access_info();
       end
       default :
@@ -427,22 +431,25 @@
       FlashPartData: begin
         for (int i = 0; i < cfg.seq_cfg.num_en_mp_regions; i++) begin
           if (!rd_access_found) begin
-            csr_rd(.ptr(ral.mp_region_cfg_shadowed[i]), .value(data), .backdoor(1'b1));
-            en = get_field_val(ral.mp_region_cfg_shadowed[i].en, data);
-            read_en = get_field_val(ral.mp_region_cfg_shadowed[i].rd_en, data);
-            base = get_field_val(ral.mp_region_cfg_shadowed[i].base, data);
-            size = get_field_val(ral.mp_region_cfg_shadowed[i].size, data);
+            csr_rd(.ptr(ral.mp_region_cfg[i]), .value(data), .backdoor(1'b1));
+            en = mubi4_test_true_strict(
+                     get_field_val(ral.mp_region_cfg[i].en, data));
+            read_en = mubi4_test_true_strict(
+                          get_field_val(ral.mp_region_cfg[i].rd_en, data));
+            csr_rd(.ptr(ral.mp_region[i]), .value(data), .backdoor(1'b1));
+            base = get_field_val(ral.mp_region[i].base, data);
+            size = get_field_val(ral.mp_region[i].size, data);
             if (in_rd_addr inside {[base*BytesPerPage:base*BytesPerPage+size*BytesPerPage]}) begin
               if (en) begin
-                rd_access = read_en;
                 rd_access_found = 1'b1;
               end
             end
           end
         end
         if (!rd_access_found) begin
-          csr_rd(.ptr(ral.default_region_shadowed), .value(data), .backdoor(1'b1));
-          read_en_def = get_field_val(ral.default_region_shadowed.rd_en, data);
+          csr_rd(.ptr(ral.default_region), .value(data), .backdoor(1'b1));
+          read_en_def = mubi4_test_true_strict(
+                            get_field_val(ral.default_region.rd_en, data));
           rd_access = read_en_def;
           rd_access_found = 1'b1;
         end
@@ -450,18 +457,18 @@
       FlashPartInfo: begin
         bk_idx = in_rd_addr[19];
         pg_idx = in_rd_addr[18:11];
-        csr_name = $sformatf("bank%0d_info0_page_cfg_shadowed_%0d", bk_idx, pg_idx);
+        csr_name = $sformatf("bank%0d_info0_page_cfg_%0d", bk_idx, pg_idx);
         read_access_info();
       end
       FlashPartInfo1: begin
         bk_idx = in_rd_addr[19];
-        csr_name = $sformatf("bank%0d_info1_page_cfg_shadowed", bk_idx);
+        csr_name = $sformatf("bank%0d_info1_page_cfg", bk_idx);
         read_access_info();
       end
       FlashPartInfo2: begin
         bk_idx = in_rd_addr[19];
         pg_idx = in_rd_addr[18:11];
-        csr_name = $sformatf("bank%0d_info2_page_cfg_shadowed_%0d", bk_idx, pg_idx);
+        csr_name = $sformatf("bank%0d_info2_page_cfg_%0d", bk_idx, pg_idx);
         read_access_info();
       end
       default :
@@ -487,11 +494,11 @@
         FlashPartData: begin
           for (int i = 0; i < cfg.seq_cfg.num_en_mp_regions; i++) begin
             if (!erase_access_found) begin
-              csr_rd(.ptr(ral.mp_region_cfg_shadowed[i]), .value(data), .backdoor(1'b1));
-              en = get_field_val(ral.mp_region_cfg_shadowed[i].en, data);
-              erase_en = get_field_val(ral.mp_region_cfg_shadowed[i].erase_en, data);
-              base = get_field_val(ral.mp_region_shadowed[i].base, data);
-              size = get_field_val(ral.mp_region_shadowed[i].size, data);
+              csr_rd(.ptr(ral.mp_region_cfg[i]), .value(data), .backdoor(1'b1));
+              en = get_field_val(ral.mp_region_cfg[i].en, data);
+              erase_en = get_field_val(ral.mp_region_cfg[i].erase_en, data);
+              base = get_field_val(ral.mp_region[i].base, data);
+              size = get_field_val(ral.mp_region[i].size, data);
               if (in_erase_addr
                   inside {[base*BytesPerPage:base*BytesPerPage+size*BytesPerPage]}) begin
                 if (en) begin
@@ -502,8 +509,8 @@
             end
           end
           if (!erase_access_found) begin
-            csr_rd(.ptr(ral.default_region_shadowed), .value(data), .backdoor(1'b1));
-            erase_en_def = get_field_val(ral.default_region_shadowed.erase_en, data);
+            csr_rd(.ptr(ral.default_region), .value(data), .backdoor(1'b1));
+            erase_en_def = get_field_val(ral.default_region.erase_en, data);
             erase_access       = erase_en_def;
             erase_access_found = 1'b1;
           end
@@ -511,18 +518,18 @@
         FlashPartInfo: begin
           bk_idx = in_erase_addr[19];
           pg_idx = in_erase_addr[18:11];
-          csr_name = $sformatf("bank%0d_info0_page_cfg_shadowed_%0d", bk_idx, pg_idx);
+          csr_name = $sformatf("bank%0d_info0_page_cfg_%0d", bk_idx, pg_idx);
           erase_access_info();
         end
         FlashPartInfo1: begin
           bk_idx = in_erase_addr[19];
-          csr_name = $sformatf("bank%0d_info1_page_cfg_shadowed", bk_idx);
+          csr_name = $sformatf("bank%0d_info1_page_cfg", bk_idx);
           erase_access_info();
         end
         FlashPartInfo2: begin
           bk_idx = in_erase_addr[19];
           pg_idx = in_erase_addr[18:11];
-          csr_name = $sformatf("bank%0d_info2_page_cfg_shadowed_%0d", bk_idx, pg_idx);
+          csr_name = $sformatf("bank%0d_info2_page_cfg_%0d", bk_idx, pg_idx);
           erase_access_info();
         end
         default:
@@ -550,8 +557,10 @@
 
     csr = ral.get_reg_by_name(csr_name);
     csr_rd(.ptr(csr), .value(data), .backdoor(1'b1));
-    en = get_field_val(csr.get_field_by_name("en"), data);
-    prog_en = get_field_val(csr.get_field_by_name("prog_en"), data);
+    en = mubi4_test_true_strict(
+             get_field_val(csr.get_field_by_name("en"), data));
+    prog_en = mubi4_test_true_strict(
+                  get_field_val(csr.get_field_by_name("prog_en"), data));
     if (en) begin
       wr_access = prog_en;
     end else begin
@@ -565,8 +574,10 @@
 
     csr = ral.get_reg_by_name(csr_name);
     csr_rd(.ptr(csr), .value(data), .backdoor(1'b1));
-    en = get_field_val(csr.get_field_by_name("en"), data);
-    read_en = get_field_val(csr.get_field_by_name("rd_en"), data);
+    en = mubi4_test_true_strict(
+             get_field_val(csr.get_field_by_name("en"), data));
+    read_en = mubi4_test_true_strict(
+                  get_field_val(csr.get_field_by_name("rd_en"), data));
     if (en) begin
       rd_access = read_en;
     end else begin
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_base_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_base_vseq.sv
index b98abec..983a6a1 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_base_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_base_vseq.sv
@@ -31,20 +31,20 @@
 
   // default region cfg
   flash_mp_region_cfg_t default_region_cfg = '{
-      default: 1,
-      scramble_en: 0,
-      ecc_en: 0,
-      he_en: 0,
+      default: MuBi4True,
+      scramble_en: MuBi4False,
+      ecc_en: MuBi4False,
+      he_en: MuBi4False,
       num_pages: 1,
       start_page: 0
   };
 
   // default info cfg
   flash_bank_mp_info_page_cfg_t default_info_page_cfg = '{
-      default: 1,
-      scramble_en: 0,
-      ecc_en: 0,
-      he_en: 0
+      default: MuBi4True,
+      scramble_en: MuBi4False,
+      ecc_en: MuBi4False,
+      he_en: MuBi4False
   };
 
   // By default, in 30% of the times initialize flash as in initial state (all 1s),
@@ -112,42 +112,50 @@
                                         flash_mp_region_cfg_t region_cfg = default_region_cfg);
     uvm_reg_data_t data;
     uvm_reg csr;
-    data = get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].en, data,
+    data = get_csr_val_with_updated_field(ral.mp_region_cfg[index].en, data,
                                           region_cfg.en);
-    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].rd_en, data,
+    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg[index].rd_en, data,
                                                  region_cfg.read_en);
-    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].prog_en, data,
+    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg[index].prog_en, data,
                                                  region_cfg.program_en);
-    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].erase_en, data,
+    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg[index].erase_en, data,
                                                  region_cfg.erase_en);
-    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].scramble_en,
+    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg[index].scramble_en,
                                                  data, region_cfg.scramble_en);
-    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].ecc_en, data,
+    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg[index].ecc_en, data,
                                                  region_cfg.ecc_en);
-    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].he_en, data,
+    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg[index].he_en, data,
                                                  region_cfg.he_en);
-    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].base, data,
-                                                 region_cfg.start_page);
-    data = data | get_csr_val_with_updated_field(ral.mp_region_cfg_shadowed[index].size, data,
+    csr_wr(.ptr(ral.mp_region_cfg[index]), .value(data));
+
+    // reset for base/size register
+    data = 0;
+    data = get_csr_val_with_updated_field(ral.mp_region[index].base, data,
+                                          region_cfg.start_page);
+    data = data | get_csr_val_with_updated_field(ral.mp_region[index].size, data,
                                                  region_cfg.num_pages);
-    csr_wr(.ptr(ral.mp_region_cfg_shadowed[index]), .value(data));
+    csr_wr(.ptr(ral.mp_region[index]), .value(data));
   endtask : flash_ctrl_mp_region_cfg
 
   // Configure the protection for the "default" region (all pages that do not fall into one
   // of the memory protection regions).
-  virtual task flash_ctrl_default_region_cfg(bit read_en = 1, bit program_en = 1, bit erase_en = 1,
-                                             bit scramble_en = 0, bit ecc_en = 0, bit he_en = 0);
+  virtual task flash_ctrl_default_region_cfg(mubi4_t read_en     = MuBi4True,
+                                             mubi4_t program_en  = MuBi4True,
+                                             mubi4_t erase_en    = MuBi4True,
+                                             mubi4_t scramble_en = MuBi4False,
+                                             mubi4_t ecc_en      = MuBi4False,
+                                             mubi4_t he_en       = MuBi4False);
     uvm_reg_data_t data;
-    data = get_csr_val_with_updated_field(ral.default_region_shadowed.rd_en, data, read_en);
-    data = data | get_csr_val_with_updated_field(ral.default_region_shadowed.prog_en, data,
+    data = get_csr_val_with_updated_field(ral.default_region.rd_en, data, read_en);
+    data = data | get_csr_val_with_updated_field(ral.default_region.prog_en, data,
                                                  program_en);
-    data = data | get_csr_val_with_updated_field(ral.default_region_shadowed.erase_en, data,
+    data = data | get_csr_val_with_updated_field(ral.default_region.erase_en, data,
                                                  erase_en);
-    data = data | get_csr_val_with_updated_field(ral.default_region_shadowed.scramble_en, data,
+    data = data | get_csr_val_with_updated_field(ral.default_region.scramble_en, data,
                                                  scramble_en);
-    data = data | get_csr_val_with_updated_field(ral.default_region_shadowed.ecc_en, data, ecc_en);
-    data = data | get_csr_val_with_updated_field(ral.default_region_shadowed.he_en, data, he_en);
-    csr_wr(.ptr(ral.default_region_shadowed), .value(data));
+    data = data | get_csr_val_with_updated_field(ral.default_region.ecc_en, data, ecc_en);
+    data = data | get_csr_val_with_updated_field(ral.default_region.he_en, data, he_en);
+    csr_wr(.ptr(ral.default_region), .value(data));
   endtask : flash_ctrl_default_region_cfg
 
   // Configure the memory protection of some selected page in one of the information partitions in
@@ -159,7 +167,7 @@
     uvm_reg_data_t data;
     uvm_reg csr;
 
-    string csr_name = $sformatf("bank%0d_info%0d_page_cfg_shadowed", bank, info_part);
+    string csr_name = $sformatf("bank%0d_info%0d_page_cfg", bank, info_part);
     // If the selected information partition has only 1 page, no suffix needed to the register
     //  name, if there is more than one page, the page index should be added to the register name.
     if (flash_ctrl_pkg::InfoTypeSize[info_part] > 1) begin
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_erase_suspend_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_erase_suspend_vseq.sv
index 55a99a9..17365da 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_erase_suspend_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_erase_suspend_vseq.sv
@@ -80,24 +80,24 @@
     solve en_mp_regions before mp_regions;
 
     foreach (mp_regions[i]) {
-      mp_regions[i].en == en_mp_regions[i];
+      mp_regions[i].en == mubi4_bool_to_mubi(en_mp_regions[i]);
 
-      mp_regions[i].read_en == 1;
+      mp_regions[i].read_en == MuBi4True;
 
-      mp_regions[i].program_en == 1;
+      mp_regions[i].program_en == MuBi4True;
 
-      mp_regions[i].erase_en == 1;
+      mp_regions[i].erase_en == MuBi4True;
 
       mp_regions[i].scramble_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_scramble_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_scramble_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_scramble_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_scramble_en_pc
       };
 
-      mp_regions[i].ecc_en == 0;
+      mp_regions[i].ecc_en == MuBi4False;
 
       mp_regions[i].he_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_he_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_he_en_pc
       };
 
       mp_regions[i].start_page inside {[0 : FlashNumPages - 1]};
@@ -131,43 +131,43 @@
 
       foreach (mp_info_pages[i][j][k]) {
 
-        mp_info_pages[i][j][k].en == 1;
+        mp_info_pages[i][j][k].en == MuBi4True;
 
-        mp_info_pages[i][j][k].read_en == 1;
+        mp_info_pages[i][j][k].read_en == MuBi4True;
 
-        mp_info_pages[i][j][k].program_en == 1;
+        mp_info_pages[i][j][k].program_en == MuBi4True;
 
-        mp_info_pages[i][j][k].erase_en == 1;
+        mp_info_pages[i][j][k].erase_en == MuBi4True;
 
-        mp_info_pages[i][j][k].ecc_en == 0;
+        mp_info_pages[i][j][k].ecc_en == MuBi4False;
 
         mp_info_pages[i][j][k].he_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
         };
       }
     }
   }
 
   // Default flash ctrl region settings.
-  bit default_region_read_en;
-  bit default_region_program_en;
-  bit default_region_erase_en;
-  rand bit default_region_scramble_en;
-  rand bit default_region_he_en;
-  bit default_region_ecc_en;
+  mubi4_t default_region_read_en;
+  mubi4_t default_region_program_en;
+  mubi4_t default_region_erase_en;
+  rand mubi4_t default_region_scramble_en;
+  rand mubi4_t default_region_he_en;
+  mubi4_t default_region_ecc_en;
 
   constraint default_scramble_he_en_c {
     default_region_scramble_en dist {
-      1 :/ cfg.seq_cfg.default_region_scramble_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_scramble_en_pc)
+      MuBi4True  :/ cfg.seq_cfg.default_region_scramble_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_scramble_en_pc)
     };
   }
 
   constraint default_region_he_en_c {
     default_region_he_en dist {
-      1 :/ cfg.seq_cfg.default_region_he_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
+      MuBi4True  :/ cfg.seq_cfg.default_region_he_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
     };
   }
 
@@ -196,10 +196,10 @@
     cfg.flash_ctrl_vif.lc_creator_seed_sw_rw_en = lc_ctrl_pkg::On;
     cfg.flash_ctrl_vif.lc_owner_seed_sw_rw_en   = lc_ctrl_pkg::On;
     // Default region settings
-    default_region_read_en = 1;
-    default_region_program_en = 1;
-    default_region_erase_en = 1;
-    default_region_ecc_en = 0;
+    default_region_read_en    = MuBi4True;
+    default_region_program_en = MuBi4True;
+    default_region_erase_en   = MuBi4True;
+    default_region_ecc_en     = MuBi4False;
 
     // Configure the flash with scramble disable.
     foreach (mp_regions[k]) begin
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_host_ctrl_arb_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_host_ctrl_arb_vseq.sv
index bbc1e4c..67b31f1 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_host_ctrl_arb_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_host_ctrl_arb_vseq.sv
@@ -105,15 +105,15 @@
     solve en_mp_regions before mp_regions;
 
     foreach (mp_regions[i]) {
-      mp_regions[i].en          == en_mp_regions[i];
-      mp_regions[i].read_en     == 1;
-      mp_regions[i].program_en  == 1;
-      mp_regions[i].erase_en    == 1;
-      mp_regions[i].scramble_en == 0;
-      mp_regions[i].ecc_en      == 0;
+      mp_regions[i].en          == mubi4_bool_to_mubi(en_mp_regions[i]);
+      mp_regions[i].read_en     == MuBi4True;
+      mp_regions[i].program_en  == MuBi4True;
+      mp_regions[i].erase_en    == MuBi4True;
+      mp_regions[i].scramble_en == MuBi4False;
+      mp_regions[i].ecc_en      == MuBi4False;
       mp_regions[i].he_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_he_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_he_en_pc
       };
 
       mp_regions[i].start_page inside {[0 : FlashNumPages - 1]};
@@ -144,26 +144,26 @@
     foreach (mp_info_pages[i, j]) {
       mp_info_pages[i][j].size() == flash_ctrl_pkg::InfoTypeSize[j];
       foreach (mp_info_pages[i][j][k]) {
-        mp_info_pages[i][j][k].en          == 1;
-        mp_info_pages[i][j][k].read_en     == 1;
-        mp_info_pages[i][j][k].program_en  == 1;
-        mp_info_pages[i][j][k].erase_en    == 1;
-        mp_info_pages[i][j][k].scramble_en == 0;
-        mp_info_pages[i][j][k].ecc_en      == 0;
+        mp_info_pages[i][j][k].en          == MuBi4True;
+        mp_info_pages[i][j][k].read_en     == MuBi4True;
+        mp_info_pages[i][j][k].program_en  == MuBi4True;
+        mp_info_pages[i][j][k].erase_en    == MuBi4True;
+        mp_info_pages[i][j][k].scramble_en == MuBi4False;
+        mp_info_pages[i][j][k].ecc_en      == MuBi4False;
         mp_info_pages[i][j][k].he_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
         };
       }
     }
   }
 
-  bit default_region_read_en;
-  bit default_region_program_en;
-  bit default_region_erase_en;
-  bit default_region_scramble_en;
-  rand bit default_region_he_en;
-  rand bit default_region_ecc_en;
+  mubi4_t default_region_read_en;
+  mubi4_t default_region_program_en;
+  mubi4_t default_region_erase_en;
+  mubi4_t default_region_scramble_en;
+  rand mubi4_t default_region_he_en;
+  rand mubi4_t default_region_ecc_en;
 
   // Bank Erasability.
   rand bit [flash_ctrl_pkg::NumBanks-1:0] bank_erase_en;
@@ -177,12 +177,12 @@
   // High Endurance
   constraint default_region_he_en_c {
     default_region_he_en dist {
-      1 :/ cfg.seq_cfg.default_region_he_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
+      MuBi4True  :/ cfg.seq_cfg.default_region_he_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
     };
   }
 
-  constraint default_region_ecc_en_c {default_region_ecc_en == 0;}
+  constraint default_region_ecc_en_c {default_region_ecc_en == MuBi4False;}
 
   // Configure sequence knobs to tailor it to smoke seq.
   virtual function void configure_vseq();
@@ -367,10 +367,10 @@
   virtual task init_flash_regions();
 
     // Default Region Settings
-    default_region_read_en     = 1;
-    default_region_program_en  = 1;
-    default_region_erase_en    = 1;
-    default_region_scramble_en = 0;
+    default_region_read_en     = MuBi4True;
+    default_region_program_en  = MuBi4True;
+    default_region_erase_en    = MuBi4True;
+    default_region_scramble_en = MuBi4False;
 
     // Enable Bank Erase
     flash_ctrl_bank_erase_cfg(.bank_erase_en(bank_erase_en));
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_host_dir_rd_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_host_dir_rd_vseq.sv
index fb7e8ad..24440a8 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_host_dir_rd_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_host_dir_rd_vseq.sv
@@ -71,22 +71,23 @@
     solve en_mp_regions before mp_regions;
 
     foreach (mp_regions[i]) {
-      mp_regions[i].en == en_mp_regions[i];
+      mp_regions[i].en == mubi4_bool_to_mubi(en_mp_regions[i]);
 
-      mp_regions[i].read_en == 1;
+      mp_regions[i].read_en == MuBi4True;
 
-      mp_regions[i].program_en == 1;
+      mp_regions[i].program_en == MuBi4True;
 
       mp_regions[i].erase_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_erase_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_erase_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_erase_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_erase_en_pc
       };
 
       mp_regions[i].he_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_he_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_he_en_pc
       };
-      mp_regions[i].ecc_en == 0;
+      mp_regions[i].ecc_en == MuBi4False;
+      mp_regions[i].scramble_en == MuBi4False;
 
       mp_regions[i].start_page inside {[0 : FlashNumPages - 1]};
       mp_regions[i].num_pages inside {[1 : FlashNumPages - mp_regions[i].start_page]};
@@ -108,32 +109,33 @@
   }
 
   // Default flash ctrl region settings.
-  rand bit default_region_read_en;
-  rand bit default_region_program_en;
-  rand bit default_region_erase_en;
-  bit default_region_scramble_en;
-  rand bit default_region_he_en;
-  rand bit default_region_ecc_en;
+  rand mubi4_t default_region_read_en;
+  rand mubi4_t default_region_program_en;
+  rand mubi4_t default_region_erase_en;
+  rand mubi4_t default_region_scramble_en;
+  rand mubi4_t default_region_he_en;
+  rand mubi4_t default_region_ecc_en;
 
-  constraint default_region_read_en_c {default_region_read_en == 1;}
+  constraint default_region_read_en_c {default_region_read_en == MuBi4True;}
 
-  constraint default_region_program_en_c {default_region_program_en == 1;}
+  constraint default_region_program_en_c {default_region_program_en == MuBi4True;}
 
   constraint default_region_erase_en_c {
     default_region_erase_en dist {
-      1 :/ cfg.seq_cfg.default_region_erase_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_erase_en_pc)
+      MuBi4True  :/ cfg.seq_cfg.default_region_erase_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_erase_en_pc)
     };
   }
 
   constraint default_region_he_en_c {
     default_region_he_en dist {
-      1 :/ cfg.seq_cfg.default_region_he_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
+      MuBi4True  :/ cfg.seq_cfg.default_region_he_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
     };
   }
 
-  constraint default_region_ecc_en_c {default_region_ecc_en == 0;}
+  constraint default_region_scramble_en_c {default_region_scramble_en == MuBi4False;}
+  constraint default_region_ecc_en_c {default_region_ecc_en == MuBi4False;}
 
   bit   [TL_AW-1:0] read_addr;
   logic [TL_DW-1:0] rdata;
@@ -156,12 +158,10 @@
     // 1. Scramble disabled, read data has been checked in scoreboard by backdoor read
     // Configure the flash with scramble disable.
     foreach (mp_regions[k]) begin
-      mp_regions[k].scramble_en = 0;
       flash_ctrl_mp_region_cfg(k, mp_regions[k]);
       `uvm_info(`gfn, $sformatf("MP regions values %p", mp_regions[k]), UVM_HIGH)
     end
 
-    default_region_scramble_en = 0;
     flash_ctrl_default_region_cfg(
         .read_en(default_region_read_en), .program_en(default_region_program_en),
         .erase_en(default_region_erase_en), .scramble_en(default_region_scramble_en),
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_hw_rma_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_hw_rma_vseq.sv
index eff3e7b..f7183ca 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_hw_rma_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_hw_rma_vseq.sv
@@ -168,13 +168,13 @@
 
     flash_mp_region_cfg_t mp_regions [flash_ctrl_pkg::MpRegions];
     bit [flash_ctrl_pkg::NumBanks-1:0] bank_erase_en;
-    bit default_region_read_en;
-    bit default_region_program_en;
-    bit default_region_erase_en;
+    mubi4_t default_region_read_en;
+    mubi4_t default_region_program_en;
+    mubi4_t default_region_erase_en;
 
     // No Protection Regions
     foreach (mp_regions[i]) begin
-      mp_regions[i].en = 0;
+      mp_regions[i].en = MuBi4False;
     end
 
     // Configure MP Regions
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_hw_sec_otp_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_hw_sec_otp_vseq.sv
index 7d89e6c..ecb7811 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_hw_sec_otp_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_hw_sec_otp_vseq.sv
@@ -207,15 +207,15 @@
     // DATA PARTITION
 
     flash_mp_region_cfg_t mp_regions[flash_ctrl_pkg::MpRegions];
-    bit default_region_read_en;
-    bit default_region_program_en;
-    bit default_region_erase_en;
+    mubi4_t default_region_read_en;
+    mubi4_t default_region_program_en;
+    mubi4_t default_region_erase_en;
 
     // MEMORY PROTECTION REGIONS
 
     // No Protection Regions
     foreach (mp_regions[i]) begin
-      mp_regions[i].en = 0;
+      mp_regions[i].en = MuBi4False;
     end
 
     // Configure the flash based on the given settings
@@ -225,9 +225,9 @@
 
     // DEFAULT REGIONS
 
-    default_region_read_en    = 1'b1;
-    default_region_program_en = 1'b1;
-    default_region_erase_en   = 1'b1;
+    default_region_read_en    = MuBi4True;
+    default_region_program_en = MuBi4True;
+    default_region_erase_en   = MuBi4True;
 
     // Memory Default Regions
     flash_ctrl_default_region_cfg(.read_en(default_region_read_en),
@@ -243,10 +243,10 @@
     flash_bank_mp_info_page_cfg_t info_regions[flash_ctrl_reg_pkg::NumInfos0];
 
     foreach (info_regions[i]) begin
-      info_regions[i].en         = 1;
-      info_regions[i].read_en    = 1;
-      info_regions[i].program_en = 1;
-      info_regions[i].erase_en   = 1;
+      info_regions[i].en         = MuBi4True;
+      info_regions[i].read_en    = MuBi4True;
+      info_regions[i].program_en = MuBi4True;
+      info_regions[i].erase_en   = MuBi4True;
     end
 
     foreach (info_regions[i]) begin
@@ -280,7 +280,7 @@
           $sformatf("tb.dut.u_eflash.gen_flash_cores[%0d].u_core.u_scramble.rand_data_key_i", i));
     end
 
-    // Compare OTP Keys - Probed vs Expected (For This Test Scenario)                                                                                                                        
+    // Compare OTP Keys - Probed vs Expected (For This Test Scenario)
     for (int i = 0; i < flash_ctrl_pkg::NumBanks; i++) begin
       compare_key_probe(i, "otp_addr_key", prb_otp_addr_key[i], otp_addr_key);
       compare_key_probe(i, "otp_addr_rand_key", prb_otp_addr_rand_key[i], otp_addr_rand_key);
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_mp_regions_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_mp_regions_vseq.sv
index 2f61609..b595179 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_mp_regions_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_mp_regions_vseq.sv
@@ -66,13 +66,13 @@
 
     foreach (mp_regions[i]) {
 
-      mp_regions[i].scramble_en == 0;
+      mp_regions[i].scramble_en == MuBi4False;
 
-      mp_regions[i].ecc_en == 0;
+      mp_regions[i].ecc_en == MuBi4False;
 
       mp_regions[i].he_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_he_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_he_en_pc
       };
 
       mp_regions[i].start_page dist {
@@ -94,14 +94,14 @@
     foreach (mp_info_pages[i]) {
       if (cfg.seq_cfg.op_readonly_on_info_partition) {
         foreach (mp_info_pages[i][0][k]) {
-          mp_info_pages[i][0][k].program_en == 0;
-          mp_info_pages[i][0][k].erase_en == 0;
+          mp_info_pages[i][0][k].program_en == MuBi4False;
+          mp_info_pages[i][0][k].erase_en == MuBi4False;
         }
       }
       if (cfg.seq_cfg.op_readonly_on_info1_partition) {
         foreach (mp_info_pages[i][1][k]) {
-          mp_info_pages[i][1][k].program_en == 0;
-          mp_info_pages[i][1][k].erase_en == 0;
+          mp_info_pages[i][1][k].program_en == MuBi4False;
+          mp_info_pages[i][1][k].erase_en == MuBi4False;
         }
       }
     }
@@ -111,33 +111,33 @@
 
       foreach (mp_info_pages[i][j][k]) {
 
-        mp_info_pages[i][j][k].scramble_en == 0;
+        mp_info_pages[i][j][k].scramble_en == MuBi4False;
 
-        mp_info_pages[i][j][k].ecc_en == 0;
+        mp_info_pages[i][j][k].ecc_en == MuBi4False;
 
         mp_info_pages[i][j][k].he_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
         };
       }
     }
   }
 
   // Default flash ctrl region settings.
-  rand bit default_region_read_en;
-  rand bit default_region_program_en;
-  rand bit default_region_erase_en;
-  rand bit default_region_he_en;
-  bit default_region_scramble_en;
-  bit default_region_ecc_en;
+  rand mubi4_t default_region_read_en;
+  rand mubi4_t default_region_program_en;
+  rand mubi4_t default_region_erase_en;
+  rand mubi4_t default_region_he_en;
+  mubi4_t default_region_scramble_en;
+  mubi4_t default_region_ecc_en;
 
   // Bank erasability.
   rand bit [flash_ctrl_pkg::NumBanks-1:0] bank_erase_en;
 
   constraint default_region_he_en_c {
     default_region_he_en dist {
-      1 :/ cfg.seq_cfg.default_region_he_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
+      MuBi4True  :/ cfg.seq_cfg.default_region_he_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
     };
   }
 
@@ -172,12 +172,12 @@
   virtual task do_mp_reg();
     poll_fifo_status           = 1;
     // Default region settings
-    default_region_ecc_en      = 0;
-    default_region_scramble_en = 0;
+    default_region_ecc_en      = MuBi4False;
+    default_region_scramble_en = MuBi4False;
 
     // Configure the flash with scramble disable.
     foreach (mp_regions[k]) begin
-      mp_regions[k].scramble_en = 0;
+      mp_regions[k].scramble_en = MuBi4False;
       flash_ctrl_mp_region_cfg(k, mp_regions[k]);
       `uvm_info(`gfn, $sformatf("MP regions values %p", mp_regions[k]), UVM_HIGH)
     end
@@ -232,10 +232,10 @@
       controller_program_page(flash_op_pg_erase);
       flash_op_pg_erase.op = flash_ctrl_pkg::FlashOpErase;
       flash_op_pg_erase.addr       = {flash_op.addr[19:11], {11{1'b0}}};
-      `uvm_info(`gfn, $sformatf("ERASE OP %p", flash_op_pg_erase), UVM_HIGH)
+      `uvm_info(`gfn, $sformatf("ERASE OP %p", flash_op_pg_erase), UVM_LOW)
       flash_ctrl_start_op(flash_op_pg_erase);
       wait_flash_op_done(.timeout_ns(cfg.seq_cfg.erase_timeout_ns));
-      `uvm_info(`gfn, $sformatf("READ OP %p", flash_op_pg_erase), UVM_HIGH)
+      `uvm_info(`gfn, $sformatf("READ OP %p", flash_op_pg_erase), UVM_LOW)
       flash_op_pg_erase.addr       = {flash_op.addr[19:11], {11{1'b0}}};
       controller_read_page(flash_op_pg_erase);
     end
@@ -245,36 +245,36 @@
   virtual task do_bank_erase();
     poll_fifo_status           = 1;
     // Default region settings
-    default_region_read_en     = 1;
-    default_region_program_en  = 1;
-    default_region_ecc_en      = 0;
-    default_region_scramble_en = 0;
+    default_region_read_en     = MuBi4True;
+    default_region_program_en  = MuBi4True;
+    default_region_ecc_en      = MuBi4False;
+    default_region_scramble_en = MuBi4False;
 
     // No Protection due to sw wr/rd
     foreach (mp_regions[i]) begin
-      mp_regions[i].en = 1;
-      mp_regions[i].read_en = 1;
-      mp_regions[i].program_en = 1;
-      mp_regions[i].scramble_en = 0;
-      mp_regions[i].ecc_en = 0;
+      mp_regions[i].en = MuBi4True;
+      mp_regions[i].read_en = MuBi4True;
+      mp_regions[i].program_en = MuBi4True;
+      mp_regions[i].scramble_en = MuBi4False;
+      mp_regions[i].ecc_en = MuBi4False;
     end
 
     foreach (mp_info_pages[0][0][k]) begin
-      mp_info_pages[0][0][k].en          = 1;
-      mp_info_pages[0][0][k].read_en     = 1;
-      mp_info_pages[0][0][k].program_en  = 1;
-      mp_info_pages[0][0][k].scramble_en = 0;
-      mp_info_pages[0][0][k].ecc_en      = 0;
-      mp_info_pages[1][0][k].en          = 1;
-      mp_info_pages[1][0][k].read_en     = 1;
-      mp_info_pages[1][0][k].program_en  = 1;
-      mp_info_pages[1][0][k].scramble_en = 0;
-      mp_info_pages[1][0][k].ecc_en      = 0;
+      mp_info_pages[0][0][k].en          = MuBi4True;
+      mp_info_pages[0][0][k].read_en     = MuBi4True;
+      mp_info_pages[0][0][k].program_en  = MuBi4True;
+      mp_info_pages[0][0][k].scramble_en = MuBi4False;
+      mp_info_pages[0][0][k].ecc_en      = MuBi4False;
+      mp_info_pages[1][0][k].en          = MuBi4True;
+      mp_info_pages[1][0][k].read_en     = MuBi4True;
+      mp_info_pages[1][0][k].program_en  = MuBi4True;
+      mp_info_pages[1][0][k].scramble_en = MuBi4False;
+      mp_info_pages[1][0][k].ecc_en      = MuBi4False;
     end
 
     // Configure the flash with scramble disable.
     foreach (mp_regions[k]) begin
-      mp_regions[k].scramble_en = 0;
+      mp_regions[k].scramble_en = MuBi4False;
       flash_ctrl_mp_region_cfg(k, mp_regions[k]);
       `uvm_info(`gfn, $sformatf("MP regions values %p", mp_regions[k]), UVM_HIGH)
     end
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_phy_arb_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_phy_arb_vseq.sv
index 268af64..3d1b548 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_phy_arb_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_phy_arb_vseq.sv
@@ -132,21 +132,21 @@
     solve en_mp_regions before mp_regions;
 
     foreach (mp_regions[i]) {
-      mp_regions[i].en == en_mp_regions[i];
+      mp_regions[i].en == mubi4_bool_to_mubi(en_mp_regions[i]);
 
-      mp_regions[i].read_en == 1;
+      mp_regions[i].read_en == MuBi4True;
 
-      mp_regions[i].program_en == 1;
+      mp_regions[i].program_en == MuBi4True;
 
-      mp_regions[i].erase_en == 1;
+      mp_regions[i].erase_en == MuBi4True;
 
-      mp_regions[i].scramble_en == 0;
+      mp_regions[i].scramble_en == MuBi4False;
 
-      mp_regions[i].ecc_en == 0;
+      mp_regions[i].ecc_en == MuBi4False;
 
       mp_regions[i].he_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_he_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_he_en_pc
       };
 
       mp_regions[i].start_page inside {[0 : FlashNumPages - 1]};
@@ -180,21 +180,21 @@
 
       foreach (mp_info_pages[i][j][k]) {
 
-        mp_info_pages[i][j][k].en == 1;
+        mp_info_pages[i][j][k].en == MuBi4True;
 
-        mp_info_pages[i][j][k].read_en == 1;
+        mp_info_pages[i][j][k].read_en == MuBi4True;
 
-        mp_info_pages[i][j][k].program_en == 1;
+        mp_info_pages[i][j][k].program_en == MuBi4True;
 
-        mp_info_pages[i][j][k].erase_en == 1;
+        mp_info_pages[i][j][k].erase_en == MuBi4True;
 
-        mp_info_pages[i][j][k].scramble_en == 0;
+        mp_info_pages[i][j][k].scramble_en == MuBi4False;
 
-        mp_info_pages[i][j][k].ecc_en == 0;
+        mp_info_pages[i][j][k].ecc_en == MuBi4False;
 
         mp_info_pages[i][j][k].he_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
+          MuBi4True :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
         };
 
       }
@@ -202,18 +202,18 @@
   }
 
   // Default flash ctrl region settings.
-  rand bit default_region_read_en;
-  rand bit default_region_program_en;
-  rand bit default_region_erase_en;
-  bit default_region_scramble_en;
-  rand bit default_region_he_en;
-  rand bit default_region_ecc_en;
+  rand mubi4_t default_region_read_en;
+  rand mubi4_t default_region_program_en;
+  rand mubi4_t default_region_erase_en;
+  mubi4_t default_region_scramble_en;
+  rand mubi4_t default_region_he_en;
+  rand mubi4_t default_region_ecc_en;
 
-  constraint default_region_read_en_c {default_region_read_en == 1;}
+  constraint default_region_read_en_c {default_region_read_en == MuBi4True;}
 
-  constraint default_region_program_en_c {default_region_program_en == 1;}
+  constraint default_region_program_en_c {default_region_program_en == MuBi4True;}
 
-  constraint default_region_erase_en_c {default_region_erase_en == 1;}
+  constraint default_region_erase_en_c {default_region_erase_en == MuBi4True;}
 
   // Bank erasability.
   rand bit [flash_ctrl_pkg::NumBanks-1:0] bank_erase_en;
@@ -226,12 +226,12 @@
 
   constraint default_region_he_en_c {
     default_region_he_en dist {
-      1 :/ cfg.seq_cfg.default_region_he_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
+      MuBi4True :/ cfg.seq_cfg.default_region_he_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
     };
   }
 
-  constraint default_region_ecc_en_c {default_region_ecc_en == 0;}
+  constraint default_region_ecc_en_c {default_region_ecc_en == MuBi4False;}
 
   bit [TL_AW-1:0] read_addr;
 
@@ -253,7 +253,7 @@
     cfg.block_host_rd = 1;
 
     // Scramble disable
-    default_region_scramble_en = 0;
+    default_region_scramble_en = MuBi4False;
 
     //Enable Bank erase
     flash_ctrl_bank_erase_cfg(.bank_erase_en(bank_erase_en));
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_rand_ops_base_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_rand_ops_base_vseq.sv
index 48418d5..9b67e38 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_rand_ops_base_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_rand_ops_base_vseq.sv
@@ -107,26 +107,26 @@
     solve en_mp_regions before mp_regions;
 
     foreach (mp_regions[i]) {
-      mp_regions[i].en == en_mp_regions[i];
+      mp_regions[i].en == mubi4_bool_to_mubi(en_mp_regions[i]);
 
       mp_regions[i].read_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_read_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_read_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_read_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_read_en_pc
       };
 
       mp_regions[i].program_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_program_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_program_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_program_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_program_en_pc
       };
 
       mp_regions[i].erase_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_erase_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_erase_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_erase_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_erase_en_pc
       };
 
       mp_regions[i].he_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_he_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_he_en_pc
       };
 
       mp_regions[i].start_page inside {[0:FlashNumPages - 1]};
@@ -150,28 +150,28 @@
   }
 
   // Default flash ctrl region settings.
-  rand bit default_region_read_en;
-  rand bit default_region_program_en;
-  rand bit default_region_erase_en;
+  rand mubi4_t default_region_read_en;
+  rand mubi4_t default_region_program_en;
+  rand mubi4_t default_region_erase_en;
 
   constraint default_region_read_en_c {
     default_region_read_en dist {
-      1 :/ cfg.seq_cfg.default_region_read_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_read_en_pc)
+      MuBi4True  :/ cfg.seq_cfg.default_region_read_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_read_en_pc)
     };
   }
 
   constraint default_region_program_en_c {
     default_region_program_en dist {
-      1 :/ cfg.seq_cfg.default_region_program_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_program_en_pc)
+      MuBi4True  :/ cfg.seq_cfg.default_region_program_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_program_en_pc)
     };
   }
 
   constraint default_region_erase_en_c {
     default_region_erase_en dist {
-      1 :/ cfg.seq_cfg.default_region_erase_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_erase_en_pc)
+      MuBi4True :/ cfg.seq_cfg.default_region_erase_en_pc,
+      MuBi4False :/ (100 - cfg.seq_cfg.default_region_erase_en_pc)
     };
   }
 
@@ -186,40 +186,40 @@
       mp_info_pages[i][j].size() == flash_ctrl_pkg::InfoTypeSize[j];
 
       foreach (mp_info_pages[i][j][k]) {
-        
+
         mp_info_pages[i][j][k].en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_en_pc[i][j]
         };
 
         mp_info_pages[i][j][k].read_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_read_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_read_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_read_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_read_en_pc[i][j]
         };
 
         mp_info_pages[i][j][k].program_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_program_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_program_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_program_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_program_en_pc[i][j]
         };
 
         mp_info_pages[i][j][k].erase_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_erase_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_erase_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_erase_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_erase_en_pc[i][j]
         };
 
         mp_info_pages[i][j][k].scramble_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_scramble_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_scramble_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_scramble_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_scramble_en_pc[i][j]
         };
 
         mp_info_pages[i][j][k].ecc_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_ecc_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_ecc_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_ecc_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_ecc_en_pc[i][j]
         };
 
         mp_info_pages[i][j][k].he_en dist {
-          0 :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
-          1 :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
+          MuBi4False :/ (100 - cfg.seq_cfg.mp_info_page_he_en_pc[i][j]),
+          MuBi4True  :/ cfg.seq_cfg.mp_info_page_he_en_pc[i][j]
         };
 
       }
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_rd_buff_evict_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_rd_buff_evict_vseq.sv
index bf6e3b1..1333ab3 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_rd_buff_evict_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_rd_buff_evict_vseq.sv
@@ -73,19 +73,19 @@
     solve en_mp_regions before mp_regions;
 
     foreach (mp_regions[i]) {
-      mp_regions[i].en == en_mp_regions[i];
+      mp_regions[i].en == mubi4_bool_to_mubi(en_mp_regions[i]);
 
-      mp_regions[i].read_en == 1;
+      mp_regions[i].read_en == MuBi4True;
 
-      mp_regions[i].program_en == 1;
+      mp_regions[i].program_en == MuBi4True;
 
-      mp_regions[i].erase_en == 1;
+      mp_regions[i].erase_en == MuBi4True;
 
       mp_regions[i].he_en dist {
-        0 :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
-        1 :/ cfg.seq_cfg.mp_region_he_en_pc
+        MuBi4False :/ (100 - cfg.seq_cfg.mp_region_he_en_pc),
+        MuBi4True  :/ cfg.seq_cfg.mp_region_he_en_pc
       };
-      mp_regions[i].ecc_en == 0;
+      mp_regions[i].ecc_en == MuBi4False;
 
       mp_regions[i].start_page inside {[0 : FlashNumPages - 1]};
       mp_regions[i].num_pages inside {[1 : FlashNumPages - mp_regions[i].start_page]};
@@ -116,17 +116,17 @@
   }
 
   // Default flash ctrl region settings.
-  bit default_region_read_en;
-  bit default_region_program_en;
-  bit default_region_erase_en;
-  bit default_region_scramble_en;
-  bit default_region_ecc_en;
-  rand bit default_region_he_en;
+  mubi4_t default_region_read_en;
+  mubi4_t default_region_program_en;
+  mubi4_t default_region_erase_en;
+  mubi4_t default_region_scramble_en;
+  mubi4_t default_region_ecc_en;
+  rand mubi4_t default_region_he_en;
 
   constraint default_region_he_en_c {
     default_region_he_en dist {
-      1 :/ cfg.seq_cfg.default_region_he_en_pc,
-      0 :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
+      MuBi4False :/ cfg.seq_cfg.default_region_he_en_pc,
+      MuBi4True  :/ (100 - cfg.seq_cfg.default_region_he_en_pc)
     };
   }
 
@@ -140,18 +140,18 @@
     poll_fifo_status = 1;
 
     // Default region settings
-    default_region_read_en = 1;
-    default_region_program_en = 1;
-    default_region_erase_en = 1;
-    default_region_ecc_en = 0;
-    default_region_scramble_en = 0;
+    default_region_read_en     = MuBi4True;
+    default_region_program_en  = MuBi4True;
+    default_region_erase_en    = MuBi4True;
+    default_region_ecc_en      = MuBi4False;
+    default_region_scramble_en = MuBi4False;
 
     // Scoreboard knob
     cfg.block_host_rd = 1;
 
     // Configure the flash with scramble disable.
     foreach (mp_regions[k]) begin
-      mp_regions[k].scramble_en = 0;
+      mp_regions[k].scramble_en = MuBi4False;
       flash_ctrl_mp_region_cfg(k, mp_regions[k]);
       `uvm_info(`gfn, $sformatf("MP regions values %p", mp_regions[k]), UVM_HIGH)
     end
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_smoke_hw_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_smoke_hw_vseq.sv
index 5896828..3999672 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_smoke_hw_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_smoke_hw_vseq.sv
@@ -25,9 +25,9 @@
 
     int flash_depth = flash_ctrl_reg_pkg::BytesPerBank / 4;
 
-    bit default_region_read_en;
-    bit default_region_program_en;
-    bit default_region_erase_en;
+    mubi4_t default_region_read_en;
+    mubi4_t default_region_program_en;
+    mubi4_t default_region_erase_en;
 
     // Bank 0 is used
     uint bank;
@@ -41,9 +41,9 @@
     // Memory protection regions settings. One MP region, Single Page
     flash_mp_region_cfg_t mp_region;
 
-    default_region_read_en    = 1'b1;
-    default_region_program_en = 1'b1;
-    default_region_erase_en   = 1'b1;
+    default_region_read_en    = MuBi4True;
+    default_region_program_en = MuBi4True;
+    default_region_erase_en   = MuBi4True;
 
     bank = 0;
 
@@ -54,10 +54,10 @@
 
     en_mp_regions = cfg.seq_cfg.num_en_mp_regions;
 
-    mp_region.en = en_mp_regions;
-    mp_region.read_en = 1;
-    mp_region.program_en = 1;
-    mp_region.erase_en = 1;
+    mp_region.en = mubi4_bool_to_mubi(en_mp_regions);
+    mp_region.read_en = MuBi4True;
+    mp_region.program_en = MuBi4True;
+    mp_region.erase_en = MuBi4True;
     mp_region.start_page = 0;
     mp_region.num_pages = 1;
 
diff --git a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_sw_op_vseq.sv b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_sw_op_vseq.sv
index b6ec2f8..22991eb 100644
--- a/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_sw_op_vseq.sv
+++ b/hw/ip/flash_ctrl/dv/env/seq_lib/flash_ctrl_sw_op_vseq.sv
@@ -57,9 +57,9 @@
 
     logic                 [TL_DW-1:0] rdata;
     logic                 [TL_DW-1:0] exp_data [$];
-    bit                               default_region_read_en;
-    bit                               default_region_program_en;
-    bit                               default_region_erase_en;
+    mubi4_t                           default_region_read_en;
+    mubi4_t                           default_region_program_en;
+    mubi4_t                           default_region_erase_en;
 
     // Configure the FLASH Controller
 
@@ -67,17 +67,17 @@
     flash_mp_region_cfg_t             mp_regions                [flash_ctrl_pkg::MpRegions];
 
     foreach (mp_regions[i]) begin
-      mp_regions[i].en         = en_mp_regions[i];
-      mp_regions[i].read_en    = 1;
-      mp_regions[i].program_en = 1;
-      mp_regions[i].erase_en   = 1;
-      mp_regions[i].start_page = 0;
-      mp_regions[i].num_pages  = 1;
+      mp_regions[i].en         = mubi4_bool_to_mubi(en_mp_regions[i]);
+      mp_regions[i].read_en    = MuBi4True;
+      mp_regions[i].program_en = MuBi4True;
+      mp_regions[i].erase_en   = MuBi4True;
+      mp_regions[i].start_page = MuBi4False;
+      mp_regions[i].num_pages  = MuBi4True;
     end
 
-    default_region_read_en    = 1'b1;
-    default_region_program_en = 1'b1;
-    default_region_erase_en   = 1'b1;
+    default_region_read_en    = MuBi4True;
+    default_region_program_en = MuBi4True;
+    default_region_erase_en   = MuBi4True;
 
     // Configure the flash based on the given settings
     foreach (mp_regions[i]) begin