如何忽略多维动态数组覆盖组实例化的特定覆盖组实例



我有一个类似的覆盖组

covergroup cover_routers with function sample(bit inj_val,eje_val);
option.per_instance = 1; 
inj_val_cp : coverpoint inj_val
{
bins inject_valid[] = {[0:1]};
} 
eje_val_cp : coverpoint eje_val
{
bins eject_valid[] = {[0:1]};
}   
endgroup

下面我有覆盖群的多维动态数组实例。由于它是一个8x4数组,因此覆盖组covrouters将有32个实例,但我想根据I和j的值排除某些实例,其中I和j是数组的二维。如果我不这样做,它会在verdi 中显示覆盖组实例中的漏洞

对于i和j的一些值,我不想要覆盖率,例如,对于下面的覆盖组实例,我不需要覆盖率,

cov_routers[2][0];cov_router[2][1]、cov_rrouter[2][2]、cov_Router[7][3]和cov_rooter[7][2]

我不想对它们进行采样,所以我尝试了以下操作:

class my_cov extends ovm_component;
`ovm_component_utils_begin(my_cov)
`ovm_component_utils_end
cover_routers cov_routers[][];// ixj= 8x4 array
function new(input string name = "my_cov", ovm_component parent = null);
super.new(name,parent);
endfunction

function void build();
super.build();
cov_routers  = new[8]; 
foreach(cov_routers[i])
begin
if (i==2)
cov_routers[i] = new[1]; // since i want coverage only for 1 instance cov_routers[2][3] 
else if (i==7)
cov_routers[i] = new[2];// since i want cov only for cov_routers[7][0] & cov_routers[7][1]
else 
cov_routers[i] = new[4];
end
for (int i=0; i<8; i++) 
begin
for (int j=0; j<4; j++)
begin
if (((i==2) && (j ==0))||((i==2) && (j ==1))||((i==2) && (j ==2))||((i==7)&&(j==3))||((i==7)&&(j==2))
begin
//do nothing
end
else
begin
cov_routers[i][j] =new;
end
end
end
task run();
super.run();
fork
router_coverage();
join
endtask
task automatic router_coverage();
for (int p=0; p<8; p++) 
begin
automatic int i=p;
for (int q=0; q<4; q++)
begin
automatic int j=q;
if (((i==2) && (j ==0))||((i==2) && (j ==1))||((i==2) && (j ==2))||((i==7)&&(j==3))||((i==7)&&(j==2))
begin
// do nothing
end
else
begin
fork
begin
router_c(i,j)
end
join_none
end
endtask
task automatic router_c(int i, int j);
forever
begin
.....waiting for clock
.....sampling coverpoints inj_val  and eje_val through proprietary fns
cov_routers[i][j].sample(inj_val, eje_val)
end
endtask

但当我在运行任务中对以下实例进行采样时,它会给出低于的错误

cov_routers[2][3].sample(....) 

错误-[NOA]对象访问为Null该对象在构造/分配之前已被使用。请确保对象在使用前已分配。

请帮助我解决我在这里做错了什么,或者有没有其他更容易的方法来忽略覆盖组的某些实例的覆盖,我将非常感谢

如果不构建覆盖组,就无法对其进行采样。您必须使用与选择构建的覆盖组实例相同的逻辑,或者可以在采样前检查实例是否为null

if (cov_rbox_val[i][j] != null) cov_rbox_val[i][j].sample(....) 

最新更新