blob: c30f632b6e1a2a1ccf8e6026ffed3a5069dea548 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
/**
* Covergoups that are dependent on run-time parameters that may be available
* only in build_phase can be defined here
* Covergroups may also be wrapped inside helper classes if needed.
*/
class rstmgr_sw_rst_cg_wrap;
covergroup sw_rst_cg(string name) with function sample (bit enable, bit rst_n);
option.name = name;
option.per_instance = 1;
enable_cp: coverpoint enable;
rst_n_cp: coverpoint rst_n;
sw_rst_cross: cross enable, rst_n;
endgroup
function new(string name);
sw_rst_cg = new(name);
endfunction
function void sample (bit enable, bit rst_n);
sw_rst_cg.sample(enable, rst_n);
endfunction
endclass
class rstmgr_env_cov extends cip_base_env_cov #(
.CFG_T(rstmgr_env_cfg)
);
`uvm_component_utils(rstmgr_env_cov)
// the base class provides the following handles for use:
// rstmgr_env_cfg: cfg
rstmgr_sw_rst_cg_wrap sw_rst_cg_wrap[NumSwResets];
covergroup alert_info_capture_cg with function sample (logic [7:0] reset_info, logic enable);
reset_info_cp: coverpoint reset_info {
bins reset_info_cp[] = {1, 2, 4, 8, 16, 32, 64, 128};
bins others = default;
}
enable_cp: coverpoint enable;
capture_cross: cross reset_info_cp, enable_cp;
endgroup
covergroup alert_info_access_cg with function sample (logic [3:0] index);
index_cp: coverpoint index {
bins valid[] = {[0 : ($bits(alert_crashdump_t) + 31) / 32 - 1]};
bins others = default;
}
endgroup
covergroup cpu_info_capture_cg with function sample (logic [7:0] reset_info, logic enable);
reset_info_cp: coverpoint reset_info {
bins reset_info_cp[] = {1, 2, 4, 8, 16, 32, 64, 128};
bins others = default;
}
enable_cp: coverpoint enable;
capture_cross: cross reset_info_cp, enable_cp;
endgroup
covergroup cpu_info_access_cg with function sample (logic [3:0] index);
index_cp: coverpoint index {
bins valid[] = {[0 : ($bits(rv_core_ibex_pkg::cpu_crash_dump_t) + 31) / 32 - 1]};
bins others = default;
}
endgroup
covergroup reset_stretcher_cg with function sample (byte length, byte count);
length_cp: coverpoint length {
bins lb[8] = {[1 : 40]};
bins others = default;
}
count_cp: coverpoint count {
bins cb[4] = {[0 : 15]};
bins others = default;
}
endgroup
function new(string name, uvm_component parent);
super.new(name, parent);
foreach (sw_rst_cg_wrap[i]) begin
string cg_name = $sformatf("sw_rst_ctrl_n[%0d]", i);
sw_rst_cg_wrap[i] = new(cg_name);
end
alert_info_capture_cg = new();
alert_info_access_cg = new();
cpu_info_capture_cg = new();
cpu_info_access_cg = new();
reset_stretcher_cg = new();
endfunction : new
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
// [or instantiate covergroups here]
// Please instantiate sticky_intr_cov array of objects for all interrupts that are sticky
// See cip_base_env_cov for details
endfunction
endclass