提问:
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);
打印: