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 。
在使用 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一定非常有帮助。