【问题标题】:how to get the number of elements in an array in systemverilog?如何在systemverilog中获取数组中的元素数?
【发布时间】:2015-11-11 15:30:19
【问题描述】:
我是 systemverilog 的新手;
我需要遍历一个我不知道其大小的数组元素。
我需要在每次迭代中读取 2 个元素,所以我不能使用 foreach (可以吗?)。
我需要做这样的事情:
for(int i = 0 ; i < arraySize ; i+=2 ){
foo(data[i],data[i+1]);
}
但我手头没有arraySize。
【问题讨论】:
标签:
arrays
for-loop
methods
system-verilog
【解决方案1】:
在使用 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+1th 元素存在,所以你必须使用 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 一定很有帮助。
【解决方案2】:
是 Java 吗?如果是这样
for(int i = 0 ; i < data.length - 1 ; i+=2 ){
foo(data[i],data[i+1]);
}
如果不是,它可能相同或至少相似
data.length - 1 中的这个-1 很重要,因为您正在访问data[i+1],并且您必须确保不会越界。
对不起,我是瞎子,这是系统验证...好吧,我把 systemverilog array size 放到谷歌上,看起来 data.size() 应该可以工作