[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