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

Adi*_*Adi 1 arrays methods for-loop system-verilog

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

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

但我手头没有 arraySize 。

sha*_*111 5

在使用 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
Run Code Online (Sandbox Code Playgroud)

还有一个foreach循环不需要知道数组的大小。上述任务可以如下调用。这里你希望第 i+1 个元素存在,所以你必须使用 size 方法。此后,此方法不再有任何额外好处。

foreach(data[i])
begin
if(i%2 == 0 && i+1<data.size)
  foo(data[i],data[i+1]);
end 
Run Code Online (Sandbox Code Playgroud)

注意i这里是一个内部变量,不需要声明i

可以通过此链接获取更多信息。SystemVerilog LRM 1800-2012一定非常有帮助。