动态数组约束,这样 8'h00 值应该出现在至少 4 个元素中

Dynamic array constraint such that 8'h00 value should come in min 4 elements

我想随机化动态数组,以便特定值应出现在最少 N 个元素中。

例如,在下面的例子中是约束条件

数组大小应为最小 20,最大 50

所有元素都应为 8'h0a、8'ha0、8'hff、8'h62

所有元素在数组中至少出现 5 次。

不能并排放置 2 个相同的元素(a[0] = 8'h0a 那么 a[1] 不能是 8'h0a)

这是相关代码。

class trans;
  rand bit [7:0] a [];

  // For 1st Constraint  
  constraint c_size {a.size() inside {[20:50]};}

  // For 2nd Constraint
  constraint c_element {foreach(a[i]) a[i] inside {8'h0a, 8'ha0, 8'hff, 8'h62};}

  // For 3rd Constraint
  constraint c_min {
    // Only valid if 20 entries and all values exact 5 times
    // a.sum() with (int'(item)) == ((10*5)+(160*5)+(255*5)+(98*5));
  }

  // For 4th Constraint
  constraint c_side {foreach (a[i]) (i > 0) -> (a[i] != a[i-1]);}
endclass

我不确定,min 5 times怎么写。

您可以执行以下操作来计算表达式为真的次数

a.sum() with (int'(item==value))

如果将值集放入数组中会更容易。然后你可以写

int values[]='{8'h0a, 8'ha0, 8'hff, 8'h62};

// For 2nd Constraint
constraint c_element {foreach(a[i]) a[i] inside {values};}
// For 3rd Constraint
constraint c_min {foreach(values[i]
    a.sum() with (int'(item==values[i])) >= 5;
}