我是systemverilog的新手; 我需要遍历一个我不知道它的大小的数组元素。 我需要在每次迭代中读取2个元素,所以我不能使用foreach(可以吗?)。 我需要做那样的事情:
for(int i = 0 ; i < arraySize ; i+=2 ){
foo(data[i],data[i+1]);
}
但我手头没有arraySize。
答案 0 :(得分:3)
使用SystemVerilog时,这必须是首先要学习的东西之一。这是SystemVerilog中非常常见且重要的方法。使用$size
或arrayname.size
方法。
以下是您的示例代码,我使用了arrayname.size
方法,同样可以通过$size(arrayname)
完成。
for(int i = 0 ; i < data.size ; i+=2 )
begin // no curly braces here, except constraints
foo(data[i],data[i+1]);
end
还有一个foreach
循环,无需知道数组的大小。上述任务可以如下调用。在这里,您希望存在第i + 1个元素,因此您必须使用size方法。从此以后,这种方法没有额外的好处。
foreach(data[i])
begin
if(i%2 == 0 && i+1<data.size)
foo(data[i],data[i+1]);
end
请注意,此处i
是一个内部变量,无需声明i
。
答案 1 :(得分:0)
是Java吗?如果是的话
for(int i = 0 ; i < data.length - 1 ; i+=2 ){
foo(data[i],data[i+1]);
}
如果没有,它可能相同或至少相似
-1
中的data.length - 1
非常重要,因为您正在访问data[i+1]
并且您必须确保不会超出界限。
对不起,我是瞎子,这是系统验证......好吧我把systemverilog array size
放进谷歌看起来data.size()
看起来应该有用