动态数组约束,这样 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;
}
我想随机化动态数组,以便特定值应出现在最少 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;
}