一、数组约束
1.1 数组的属性约束
- 多数情况下,数组的大小应该给定范围,防止生成过大体积的数组或者空数组
- 此外还可以在约束中结合数组的其他方法sum(),product(),and(),or()和xor()。
- SV可以利用foreach对数组的每一个元素进行约束,和直接写出对固定大小数组的每一个元素的约束相比,foreach要更简洁。
- 针对动态数组,foreach更适合于对非固定大小数组中每个元素的约束。
class good_sum5;
rand uint len[]
constraint c_len {
foreach (len[i]) len[i] inside {[1:255]};
len.sum() <1024;
len.size() inside {[1:8]};
}
endclass
1.1.1 数据约束实例一(产生唯一元素值的数组)
如上图,其中i会从0增长到63,j也会从0增长到63。
也可以用randc变量辅助生成唯一元素值的数组。
LittleUniqueArray A;
A=new();
assert(A.randomize());
其中rc8 = new()要放在foreach外部,如果放在foreach内部是达不到上面的效果,每次循环都相当于从256张牌中抽一张。
1.1.2 数据约束实例二
答案是D,因为da.size=3时合理,此时bit [3:0] da[3] ,只有da[0],da[1] ,da[2] 三个值,但是约束 da[2]<da[3] 不合理,
没有da[3]。