如何在systemverilog中获取数组中的元素数量?

时间:2015-11-11 15:30:20

标签: arrays for-loop methods system-verilog

我是systemverilog的新手; 我需要遍历一个我不知道它的大小的数组元素。 我需要在每次迭代中读取2个元素,所以我不能使用foreach(可以吗?)。 我需要做那样的事情:

for(int i = 0 ; i < arraySize ; i+=2 ){
foo(data[i],data[i+1]);
} 

但我手头没有arraySize。

2 个答案:

答案 0 :(得分:3)

使用SystemVerilog时,这必须是首先要学习的东西之一。这是SystemVerilog中非常常见且重要的方法。使用$sizearrayname.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

可以在this链接获取更多信息。 SystemVerilog LRM 1800-2012必须非常有帮助。

答案 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()看起来应该有用