当数组的不同项之间存在依赖关系时,如何约束类数组中的 2 个变量?
class X;
rand bit en;
rand int idx;
constraint cnst1{
idx inside {[0:9]};
}
endclass
class Y;
rand X arr_x[100];
constraint cnst2{
???
}
endclass
我想创建 cnst2 来保证:
例如:
假设只有以下 idx == 9:
arr_x[0].idx == 9;
arr_x[13].idx == 9;
arr_x[44].idx == 9;
arr_x[75].idx == 9;
arr_x[81].idx == 9;
arr_x[93].idx == 9;
需要保证:
arr_x[0].en | arr_x[13].en | arr_x[44].en | arr_x[75].en | arr_x[81].en | arr_x[93].en == 1;
对每个 idx 值依此类推;
答案 0 :(得分:1)
您需要 or
数组缩减方法。还要创建一个辅助数组,以便您可以从 0-9 进行迭代。此约束为:如果至少有一个元素具有 0-9 的值,则必须设置这些元素之一。
bit iterator[10];
constraint cnst2{
foreach(iterator[i])
arr_x.or(x) with (i ==x.idx) -> // needed if idx will not have every value 0-9
arr_x.or(y) with (i == y.idx && y.en);
}
请参阅IEEE 1800-2017 SystemVerilog LRM中的18.5.8.2 数组缩减迭代约束和7.12.3 数组缩减方法部分。