blob: 9f9ddead2c8046601cc3470f57d8dcf67ac56e35 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// coverage for sampling all the combination of valid and ready
covergroup valid_ready_cg(string name, string path) with function sample(bit valid, bit ready);
option.per_instance = 1;
option.name = {path, "::", name};
cp_valid_ready: coverpoint {valid, ready};
endgroup : valid_ready_cg
// coverage for sampling all the combination of valid and ready
covergroup req_ack_cg(string name, string path) with function sample(bit req, bit ack);
option.per_instance = 1;
option.name = {path, "::", name};
// Not a possible combination if this is non-4-phases mode.
// But this will happen in the 4 phases req-ack handshake.
// In that case, this value has to happen after 2'b11, so no need to sample it
cp_req_ack: coverpoint {req, ack} {
ignore_bins ack_wo_req = {2'b01};
}
endgroup : req_ack_cg
class push_pull_agent_cov #(parameter int HostDataWidth = 32,
parameter int DeviceDataWidth = HostDataWidth)
extends dv_base_agent_cov #(
push_pull_agent_cfg#(HostDataWidth, DeviceDataWidth)
);
`uvm_component_param_utils(push_pull_agent_cov#(HostDataWidth, DeviceDataWidth))
`uvm_component_new
valid_ready_cg m_valid_ready_cg;
req_ack_cg m_req_ack_cg;
function void build_phase(uvm_phase phase);
if (cfg.agent_type == PushAgent) begin
m_valid_ready_cg = new("m_valid_ready_cg", `gfn);
end else begin
m_req_ack_cg = new("m_req_ack_cg", `gfn);
end
endfunction : build_phase
endclass