我想随机化动态数组,以便特定值应该出现在最小元素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
写作.
您可以执行以下操作来计算表达式为 true 的次数
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;
}