systemverilog中的associative数组中的first(),next()方法

时间:2013-07-29 12:28:21

标签: system-verilog

我写了一个简单的代码来测试数组中的不同方法。这是代码:

module assoc_arr;
 int temp,imem[*];
 initial
 begin
  imem[ 2'd3 ] = 1;
  imem[ 16'hffff ] = 2;
  imem[ 4'b1000 ] = 3;
  if(imem.first(temp))
   $display(" First entry is at index %0db ",temp);
  if(imem.next(temp))
   $display(" Next entry is at index %0h after the index 3",temp);
// To print all the elements alone with its indexs
  if (imem.first(temp) )
   do
    $display( "%d : %d", temp, imem[temp] );
   while ( imem.next(temp) );
 end
endmodule

这里有一个警告::“在通配符关联数组上使用指示的方法是非标准的。”在imem.first(temp)和imem.next(temp)。

为什么会出现这个警告?

2 个答案:

答案 0 :(得分:4)

因为语言规范不允许这样做。来自1800-2012 SystemVerilog规范的第7.9.4节

  

first()方法的语法如下:

     

function int first( ref index );

     

其中index是相关数组的相应类型的索引。 指定a的关联数组   不允许使用通配符索引类型。

您可以在此处下载语言参考:

http://standards.ieee.org/getieee/1800/download/1800-2012.pdf

我相信如果您更改示例以使用非通配符数组,它将起作用,您将不会收到警告。

示例:

int temp[bit[15:0]];

答案 1 :(得分:0)

如果关联数组的键始终只是整数类型,则可以按如下方式声明它

int temp,imem[int];

然后,您的代码应该可以使用first()next()方法运行。