System verilog Systemverilog交叉覆盖点语法问题
嗨,我是stackoverflow和systemverilog/uvm的新手。我目前正在尝试获取a交叉覆盖点,以捕获a==b&&c==d的条件,而不管它们是什么值。我试过下面的十字架,但没有一个有效System verilog Systemverilog交叉覆盖点语法问题,system-verilog,uvm,System Verilog,Uvm,嗨,我是stackoverflow和systemverilog/uvm的新手。我目前正在尝试获取a交叉覆盖点,以捕获a==b&&c==d的条件,而不管它们是什么值。我试过下面的十字架,但没有一个有效 covergroup abcd_tracking with function sample (bit [7:0] a, bit [7:0] b, bit [7:0] c, bit [7:0] d); coverpoint a { bins a_bin[1] = {[0:$]};
covergroup abcd_tracking with function sample (bit [7:0] a, bit [7:0] b, bit [7:0] c, bit [7:0] d);
coverpoint a {
bins a_bin[1] = {[0:$]};
}
coverpoint b {
bins b_bin[1] = {[0:$]};
}
coverpoint c {
bins c_bin[1] = {[0:$]};
}
coverpoint d {
bins d_bin[1] = {[0:$]};
abcd_cross : cross a,b,c,d
{
bins abcd_bin = abcd_cross with( (a==b) && (c==d) );
}
abcd_cross_2 : cross a,b,c,d
{
bins abcd_2_bin = ( binsof(a) intersect(b) && binsof(c) intersect(d) );
}
abcd_cross_3 : cross a,b,c,d
{
bins abcd_3_bin = ( binsof(a) intersect{[0:$]} with (a==b) && binsof(c) intersect{[0:$]} with (c==d) );
}
这实际上应该是一个非法的条件,永远不会被击中,但3个交叉覆盖点似乎总是被击中,即使检查我的日志文件,采样变量不符合我试图在交叉覆盖点中定义的条件。捕捉这种特殊情况的正确语法是什么:a==b&&c==d?您有许多语法错误,但除此之外,我认为您对覆盖点和交叉点的工作方式有一些误解 对于所有可能的值,您的四个覆盖点只有一个箱子。这意味着每个箱子在第一个样本上都会被任何值击中,这是第一个样本上四个覆盖点的100%覆盖率。由于十字会为所有可能的箱子组合创建箱子,所以在第一个样品上只能得到一个十字箱子。因此,第一个样本涵盖了三个交叉点中的每一个 如果您希望coverpoint的每个值都有一个单独的存储箱,则需要写入
coverpoint a {
bins a_bin[256] = {[0:$]};
}
现在,a、b、c、d的简单交叉将创建256*256*257*256=232个交叉箱。十字的箱子是自动生成的,只有在希望合并或忽略箱子时才指定箱子。如果您只对a==b&&c==d的情况感兴趣,那么您必须忽略所有其他具有
abcd: cross a,b,c,d {
ignore_bins not_equal = abcd with( a!=b || c!=d);
}