我正在编写一个可配置的SystemVerilog功能覆盖点。我有一个枚举response_t如下:
typedef enum bit [1:0] {OK, ERR1, ERR2, ERR3} response_t;我想将枚举的所有条目添加到各个覆盖点回收箱中,如下所示:
response_t r;
r_cp : coverpoint r {
bins ok = {OK};
bins err_1 = {ERR1};
bins err_2 = {ERR2};
bins err_3 = {ERR3};
}上面的覆盖点是通用的。现在,我想让用户可以配置它,这样用户就可以通过将值添加到队列中(如下所示),选择性地添加几个忽略/非法的这些回收箱:
class cfg;
...
response_t ignore_bins_q[$];
response_t illegal_bins_q[$];
endclass现在,我试图修改我的覆盖点如下:
r_cp : coverpoint r {
bins ok = {OK};
bins err_1 = {ERR1};
bins err_2 = {ERR2};
bins err_3 = {ERR3};
ignore_bins ignore = {cfg.ignore_bins_q};
illegal_bins illegal = {cfg.illegal_bins_q};
}我使用的工具是vcs,当我尝试这样做时,我会得到以下错误:
在左值范围中使用的“数组”类型的
表达式是不合法的。
我该如何解决这个问题?
发布于 2020-05-12 23:29:01
去掉{}的
ignore_bins ignore = cfg.ignore_bins_q;
illegal_bins illegal = cfg.illegal_bins_q;请记住,在构造覆盖组时,需要填充队列。
https://stackoverflow.com/questions/61761297
复制相似问题