类 数组中的约束相关项
constraint dependents in array of classes
当数组的不同项之间存在依赖关系时,如何在 类 的数组中约束 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 可选值 (0-9) 将至少设置为 arr_x[i].idx 之一。
- 对于所有具有相同 idx 值的 arr_x[i],至少有 1 个将 en 设置为 1。
例如:
假设只有以下 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 值依此类推;
您需要 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 数组缩减方法 部分。
当数组的不同项之间存在依赖关系时,如何在 类 的数组中约束 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 可选值 (0-9) 将至少设置为 arr_x[i].idx 之一。
- 对于所有具有相同 idx 值的 arr_x[i],至少有 1 个将 en 设置为 1。
例如:
假设只有以下 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 值依此类推;
您需要 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 数组缩减方法 部分。