提问:
rand bit[31:0] value;
constraint value_con{
foreach(value[i]) soft value[i] == 1;
}
constraint value_con{
soft value == '1;
}
这两种soft constraint有没有区别?
回答:
第一种方式是对每一比特进行软约束,第二种方式是增提软约束,当软约束生效时二者没有区别。但是当其中某一比特的与硬约束冲突时,比如在case中bit0约束为0,那么此时:
对于第一种foreach软约束方式,除去bit0外其他比特仍能保持约束为1;
对于第二种整体软约束方式,整体的软约束都失效了,因此其他比特相当于没有约束直接整体随机了;
实验:
class tv0;
rand bit[31:0] value;
constraint value_con{
foreach(value[i]) soft value[i] == 1;
}
endclass
class tv1;
rand bit[31:0] value;
constraint value_con{
soft value == '1;
}
endclass
case:
tv0 t0 = new();
tv1 t1 = new();
t0.randomize with {value[0] == 0;};
t1.randomize with {value[0] == 0;};
$display("'h%0h", t0.value);
$display("'h%0h", t1.value);
打印: