blob: 6808d1d0a7ae1ebf70271e6777db3c01d787633f [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// combine all sysrst_ctrl seqs (except below seqs) in one seq to run sequentially
// 1. csr seq, which requires scb to be disabled
class sysrst_ctrl_stress_all_vseq extends sysrst_ctrl_base_vseq;
`uvm_object_utils(sysrst_ctrl_stress_all_vseq)
`uvm_object_new
constraint num_trans_c {num_trans inside {[2 : 5]};}
task body();
uvm_reg_data_t rdata;
string seq_names[] = {"sysrst_ctrl_smoke_vseq",
"sysrst_ctrl_in_out_inverted_vseq",
"sysrst_ctrl_combo_detect_ec_rst_vseq",
"sysrst_ctrl_auto_blk_key_output_vseq",
"sysrst_ctrl_pin_access_vseq",
"sysrst_ctrl_pin_override_vseq",
"sysrst_ctrl_flash_wr_prot_vseq",
"sysrst_ctrl_ec_pwr_on_rst_vseq",
"sysrst_ctrl_flash_wr_prot_vseq",
"sysrst_ctrl_ultra_low_pwr_vseq",
"sysrst_ctrl_combo_detect_vseq",
"sysrst_ctrl_edge_detect_vseq",
"sysrst_ctrl_common_vseq"};
// Short delay after initial reset
cfg.clk_rst_vif.wait_clks($urandom_range(10, 5));
for (int i = 1; i <= num_trans; i++) begin
uvm_sequence seq;
sysrst_ctrl_base_vseq sysrst_ctrl_vseq;
uint seq_idx = $urandom_range(0, seq_names.size - 1);
// Test sequences which take a long time - restrict to one iteration
bit long_test = seq_names[seq_idx] inside {"sysrst_ctrl_ultra_low_pwr_vseq"};
`DV_CHECK_RANDOMIZE_FATAL(this)
seq = create_seq_by_name(seq_names[seq_idx]);
`downcast(sysrst_ctrl_vseq, seq)
sysrst_ctrl_vseq.set_sequencer(p_sequencer);
`DV_CHECK_RANDOMIZE_WITH_FATAL(sysrst_ctrl_vseq, if (long_test) num_trans == 1;)
if (seq_names[seq_idx] == "sysrst_ctrl_common_vseq") begin
sysrst_ctrl_common_vseq common_vseq;
`downcast(common_vseq, sysrst_ctrl_vseq);
common_vseq.common_seq_type = "intr_test";
end
`uvm_info(`gfn, $sformatf("body: executing sequence %s", sysrst_ctrl_vseq.get_type_name()),
UVM_LOW)
sysrst_ctrl_vseq.start(p_sequencer);
end
endtask : body
endclass