类 数组中的约束相关项

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 来保证:

  1. 每个 idx 可选值 (0-9) 将至少设置为 arr_x[i].idx 之一。
  2. 对于所有具有相同 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 数组缩减方法 部分。