是否可以将SystemVerilog中的整个数组约束为具有与另一个数组相同的值?
我尝试了这个:
class some_class;
rand bit array1[10][10];
rand bit array2[10][10];
constraint arrays_c {
array1 == array2;
}
enclass
我尝试过的2个Big3模拟器不允许这样做。一个说它当前不受支持,另一个说我是约束BNF,抱怨它不是有效的整数表达式。
除了设置foreach约束之外,还有其他方法可以这样做吗?我最终想要的是从一个函数返回一个数组,并使用它来约束另一个作为类字段的数组。
使用foreach
,参见IEEE Std 1800-2012§18.5.8.1了解每个迭代约束
constraint arrays_c {
foreach(array1[i,j]) {
array1[i][j] == array2[i][j];
}
}
如果要复制随机数组,更好的方法是在post_randomize
函数中分配副本。这是较少的CPU激励。
class some_class;
rand bit array1[10][10];
bit array2[10][10];
function void post_randomize();
array2 = array1;
endfuction : post_randomize
enclass
如果foreach
在约束块中并且post_randomize
计算不是可行的解决方案,则使用压缩数组。
class some_class;
rand bit [9:0][9:0] array1; // double packed
rand bit [9:0][9:0] array2;
constraint arrays_c {
array1 == array2;
}
enclass
或使用包数组和位流分配使最终结果解包
class some_class;
bit array1[10][10];
bit array2[10][10];
rand bit [$bits(array1)-1:0] flat_array1,flat_array2;
constraint arrays_c {
flat_array1 == flat_array2;
}
function void post_randomize();
{>>{array1}} = flat_array1; // bit-stream assignment
{>>{array2}} = flat_array2;
endfuction : post_randomize
enclass
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句