gpt4 book ai didi

system-verilog - n 的倍数的 Systemverilog 覆盖点

转载 作者:行者123 更新时间:2023-12-03 09:13:36 31 4
gpt4 key购买 nike

我正在尝试在覆盖范围组中创建一个 bin,以对 n 倍数的值进行采样(其中 n 在我的情况下为 15 的常量整数)。到目前为止,我已经来了加上以下代码:

class rx_port;
int unsigned rx_rates[];
...
covergroup rx_cov with function sample (int unsigned rate);
coverpoint rate{
bins no_rate = {0};
bins mul_of_15 = {SOME_PRE_DEFINED_PATTERN};
}
endgroup;
....
endclass

其中 SOME_PRE_DEFINED_PATTERN 是一个从 0 到步长为 15 的系统宏的 int 数组。我不确定这是否是生成此 bin 的正确/最佳方式。还有更好的建议吗?

最佳答案

编写一些辅助函数怎么样:

module FIFTEEN;

class rx_port;

typedef enum {IS_ZERO, IS_DIVISIBLE_BY_15, IS_NOT_DIVISIBLE_BY_15} rate_type;

function new;
rx_cov=new;
endfunction

local function rate_type covergroup_helper(input int unsigned i);
if (i==0) return IS_ZERO;
if (i%15==0) return IS_DIVISIBLE_BY_15;
return IS_NOT_DIVISIBLE_BY_15;
endfunction

function sample (input int unsigned i);
rx_cov.sample(covergroup_helper(i));
endfunction

covergroup rx_cov with function sample (rate_type rate);
coverpoint rate;
endgroup;
endclass

rx_port R = new;

initial
begin
void'(R.sample(0));
void'(R.sample(30));
void'(R.sample(31));
$display("coverage R.rx_cov.get_coverage= %f", R.rx_cov.get_coverage);
end

endmodule

https://www.edaplayground.com/x/65v7

这里我编写了一个函数,用于确定其输入是否能被 15 整除,以及另一个调用该函数进行采样的函数。您可以将这些功能组合在一起,但我喜欢我的示例中的分工。

关于system-verilog - n 的倍数的 Systemverilog 覆盖点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39518522/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com