【问题标题】: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 中非常常见和重要的方法。使用$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+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() 应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多