blob: f41663f5ae61e559144d9780015a76145315e6eb [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// Description:
// This test asserts glitch to power_reset and see
// dut can recover gracefully.
class pwrmgr_glitch_vseq extends pwrmgr_base_vseq;
`uvm_object_utils(pwrmgr_glitch_vseq)
`uvm_object_new
int trans_cnt = 0;
constraint num_trans_c {num_trans inside {[1 : 5]};}
virtual task body();
expect_fatal_alerts = 1;
for (int i = 0; i < num_trans; ++i) begin
wait_for_fast_fsm_active();
cfg.clk_rst_vif.wait_clks(4);
fork
send_power_glitch();
begin
cfg.pwrmgr_vif.update_ast_main_pok(0);
cfg.slow_clk_rst_vif.wait_clks(2);
cfg.pwrmgr_vif.update_ast_main_pok(1);
end
join
cfg.clk_rst_vif.wait_clks(cycles_before_reset);
`DV_SPINWAIT(wait(cfg.pwrmgr_vif.fast_state == pwrmgr_pkg::FastPwrStateResetPrep &&
cfg.pwrmgr_vif.pwr_rst_req.rstreqs[2] == 1);, $sformatf(
"checker timeout : fast_state %s, pwr_rst_req 0x%x",
cfg.pwrmgr_vif.fast_state.name,
cfg.pwrmgr_vif.pwr_rst_req.rstreqs
), 10000)
dut_init();
end
endtask : body
endclass