[dv/lc_ctrl] Fix lc_ctrl regressin error
This PR fixed the regression assertion failure that caused by lc_ctrl
drives otp_inputs too late after reset.
This PR also fixes an issue with unmapped testnames.
Signed-off-by: Cindy Chen <chencindy@google.com>
diff --git a/hw/ip/lc_ctrl/data/lc_ctrl_testplan.hjson b/hw/ip/lc_ctrl/data/lc_ctrl_testplan.hjson
index 1471060..b5b902a 100644
--- a/hw/ip/lc_ctrl/data/lc_ctrl_testplan.hjson
+++ b/hw/ip/lc_ctrl/data/lc_ctrl_testplan.hjson
@@ -102,7 +102,7 @@
- Check if lc_trans_cnt is incremented
'''
milestone: V2
- tests: []
+ tests: ["lc_ctrl_errors"]
}
{
name: security_escalation
diff --git a/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_base_vseq.sv b/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_base_vseq.sv
index 27d65ce..3cbdc80 100644
--- a/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_base_vseq.sv
+++ b/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_base_vseq.sv
@@ -25,6 +25,8 @@
endtask
virtual task dut_init(string reset_kind = "HARD");
+ // OTP inputs `lc_state` and `lc_cnt` need to be stable before lc_ctrl's reset is deasserted
+ if (do_lc_ctrl_init) drive_otp_i();
super.dut_init();
if (do_lc_ctrl_init) lc_ctrl_init();
endtask
@@ -34,9 +36,8 @@
// TODO
endtask
- // setup basic lc_ctrl features
- virtual task lc_ctrl_init(bit rand_otp_i = 1);
- cfg.pwr_lc_vif.drive_pin(LcPwrInitReq, 1);
+ // Drive OTP input `lc_state` and `lc_cnt`.
+ virtual task drive_otp_i(bit rand_otp_i = 1);
if (rand_otp_i) begin
`DV_CHECK_STD_RANDOMIZE_FATAL(lc_state)
`DV_CHECK_STD_RANDOMIZE_WITH_FATAL(lc_cnt, (lc_state != LcStRaw) -> (lc_cnt != LcCnt0);)
@@ -45,13 +46,18 @@
lc_cnt = LcCnt0;
end
cfg.lc_ctrl_vif.init(lc_state, lc_cnt);
+ endtask
+
+ // Drive LC init pin.
+ virtual task lc_ctrl_init();
+ cfg.pwr_lc_vif.drive_pin(LcPwrInitReq, 1);
wait(cfg.pwr_lc_vif.pins[LcPwrDoneRsp] == 1);
cfg.pwr_lc_vif.drive_pin(LcPwrInitReq, 0);
endtask
// some registers won't set to default value until otp_init is done
virtual task read_and_check_all_csrs_after_reset();
- lc_ctrl_init(0);
+ lc_ctrl_init();
super.read_and_check_all_csrs_after_reset();
endtask
diff --git a/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_common_vseq.sv b/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_common_vseq.sv
index d89fb9c..4fa30db 100644
--- a/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_common_vseq.sv
+++ b/hw/ip/lc_ctrl/dv/env/seq_lib/lc_ctrl_common_vseq.sv
@@ -10,11 +10,6 @@
}
`uvm_object_new
- virtual task dut_init(string reset_kind = "HARD");
- super.dut_init();
- if (do_lc_ctrl_init) lc_ctrl_init(0);
- endtask
-
virtual task body();
run_common_vseq_wrapper(num_trans);
endtask : body