[rom_ctrl, dv] Added kmac_err_chk testcase
kmac_err_chk testcase added to the testplan along with changes necessary
to run the test.
Signed-off-by: Prajwala Puttappa <prajwalaputtappa@lowrisc.org>
diff --git a/hw/ip/rom_ctrl/data/rom_ctrl_testplan.hjson b/hw/ip/rom_ctrl/data/rom_ctrl_testplan.hjson
index 3a8fd33..6587c5d 100644
--- a/hw/ip/rom_ctrl/data/rom_ctrl_testplan.hjson
+++ b/hw/ip/rom_ctrl/data/rom_ctrl_testplan.hjson
@@ -65,6 +65,14 @@
milestone: V2
tests: ["rom_ctrl_stress_all"]
}
+ {
+ name: kmac_err_chk
+ desc: '''
+ - Generate error from KMAC when it responds with KMAC digest image.
+ - Check that ROM controller goes into invalid state'''
+ milestone: V2
+ tests: ["rom_ctrl_kmac_err_chk"]
+ }
]
covergroups: [
diff --git a/hw/ip/rom_ctrl/dv/env/rom_ctrl_env.core b/hw/ip/rom_ctrl/dv/env/rom_ctrl_env.core
index 3a9d146..cea9d59 100644
--- a/hw/ip/rom_ctrl/dv/env/rom_ctrl_env.core
+++ b/hw/ip/rom_ctrl/dv/env/rom_ctrl_env.core
@@ -29,6 +29,7 @@
- seq_lib/rom_ctrl_stress_all_vseq.sv: {is_include_file: true}
- seq_lib/rom_ctrl_throughput_vseq.sv: {is_include_file: true}
- seq_lib/rom_ctrl_corrupt_sig_fatal_chk_vseq.sv: {is_include_file: true}
+ - seq_lib/rom_ctrl_kmac_err_chk_vseq.sv: {is_include_file: true}
file_type: systemVerilogSource
generate:
diff --git a/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_kmac_err_chk_vseq.sv b/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_kmac_err_chk_vseq.sv
new file mode 100644
index 0000000..1fc73e0
--- /dev/null
+++ b/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_kmac_err_chk_vseq.sv
@@ -0,0 +1,33 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+class rom_ctrl_kmac_err_chk_vseq extends rom_ctrl_base_vseq;
+ `uvm_object_utils(rom_ctrl_kmac_err_chk_vseq)
+
+ `uvm_object_new
+
+ task body();
+ rom_ctrl_pkg::fsm_state_e rdata_state;
+ uvm_reg_data_t act_val;
+
+ cfg.m_kmac_agent_cfg.error_rsp_pct = 100;
+ cfg.scoreboard.set_exp_alert("fatal", .is_fatal(1'b1), .max_delay(10000));
+ fork
+ begin
+ ral.fatal_alert_cause.predict(.value('b1), .kind(UVM_PREDICT_READ), .be(4'hF));
+ wait_alert_trigger ("fatal", .max_wait_cycle(10000), .wait_complete(1));
+ csr_utils_pkg::csr_rd(.ptr(ral.fatal_alert_cause), .value(act_val));
+ end
+ begin
+ repeat(3) wait_alert_trigger ("fatal", .max_wait_cycle(10000), .wait_complete(1));
+ end
+ join
+ uvm_hdl_read("tb.dut.gen_fsm_scramble_enabled.u_checker_fsm.state_q", rdata_state);
+ `DV_CHECK_EQ(rdata_state, rom_ctrl_pkg::Invalid)
+ `DV_CHECK_EQ(cfg.rom_ctrl_vif.pwrmgr_data.done, MuBi4False)
+ cfg.m_kmac_agent_cfg.error_rsp_pct = 0;
+ dut_init();
+ endtask : body
+
+endclass : rom_ctrl_kmac_err_chk_vseq
diff --git a/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_stress_all_vseq.sv b/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_stress_all_vseq.sv
index d6e0b89..64bc62d 100644
--- a/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_stress_all_vseq.sv
+++ b/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_stress_all_vseq.sv
@@ -16,7 +16,8 @@
string seq_names[] = {"rom_ctrl_smoke_vseq",
"rom_ctrl_common_vseq",
"rom_ctrl_throughput_vseq",
- "rom_ctrl_corrupt_sig_fatal_chk_vseq"};
+ "rom_ctrl_corrupt_sig_fatal_chk_vseq",
+ "rom_ctrl_kmac_err_chk_vseq"};
for (int i = 1; i <= num_trans; i++) begin
uvm_sequence seq;
rom_ctrl_base_vseq rom_ctrl_vseq;
diff --git a/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_vseq_list.sv b/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_vseq_list.sv
index 7ad24a5..bbadb90 100644
--- a/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_vseq_list.sv
+++ b/hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_vseq_list.sv
@@ -8,3 +8,4 @@
`include "rom_ctrl_stress_all_vseq.sv"
`include "rom_ctrl_throughput_vseq.sv"
`include "rom_ctrl_corrupt_sig_fatal_chk_vseq.sv"
+`include "rom_ctrl_kmac_err_chk_vseq.sv"
diff --git a/hw/ip/rom_ctrl/dv/rom_ctrl_sim_cfg.hjson b/hw/ip/rom_ctrl/dv/rom_ctrl_sim_cfg.hjson
index 8ca5b82..6f31011 100644
--- a/hw/ip/rom_ctrl/dv/rom_ctrl_sim_cfg.hjson
+++ b/hw/ip/rom_ctrl/dv/rom_ctrl_sim_cfg.hjson
@@ -73,6 +73,10 @@
name: rom_ctrl_corrupt_sig_fatal_chk
uvm_test_seq: rom_ctrl_corrupt_sig_fatal_chk_vseq
}
+ {
+ name: rom_ctrl_kmac_err_chk
+ uvm_test_seq: rom_ctrl_kmac_err_chk_vseq
+ }
// TODO: add more tests here
]