如何为功能覆盖交叉创建ignore_bins以排除覆盖点落在外部数组列表中的任何bin?

问题描述 投票:0回答:1

假设我有一个枚举类型的未打包数组:

client_e read_only_clients[] = {CLIENT1, CLIENT2};

还有这个封面组:

covergroup cg with function sample ( client_e client, dir_e dir );
  client_cp : coverpoint client;
  dir_cp : coverpoint dir;

  client_dir_cr : cross client_cp, dir_cp;
endgroup

我想为交叉创建一个ignore_bins,它将忽略client_cp属于read_only_clients的bin,并且dir是WRITE

我尝试过做这样的事情:

client_dir_cr : cross client_cp, dir_cp {
  ignore_bins ignore_read_only_clients = binsof(client_cp) intersect {read_only_clients} &&
                                         binsof(dir_cp) intersect {WRITE};
}

还有这个:

client_dir_cr : cross client_cp, dir_cp {
  ignore_bins ignore_read_only_clients = client_dir_cr with (client_cp inside {read_only_clients} &&
                                                             dir_cp == WRITE);
}

但是两者都给了我编译错误。有什么想法吗?

verilog system-verilog
1个回答
0
投票

您需要在coverpoint中定义read_only_clients和其他bin,然后将其用于ignore_bins。

 covergroup cg with function sample ( client_e client, dir_e dir );
  client_cp : coverpoint client { 
     bins read_only_clients = {CLIENT1, CLIENT2};
     bins others[] = default; 
  }
  dir_cp : coverpoint dir;

  client_dir_cr : cross client, dir  {
     ignore_bins ignore_read_only_clients = binsof(client_cp.read_only_clients) 
     &&  binsof(dir_cp) intersect {WRITE}; }
endgroup
© www.soinside.com 2019 - 2024. All rights reserved.