3

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

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)。

为什么显示此警告?

4

2 回答 2

4

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

first()方法的语法如下:

function int first( ref index );

whereindex是相关数组的适当类型的索引。不允许使用指定通配符索引类型的关联数组。

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

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

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

例子:

int temp[bit[15:0]];

于 2013-07-29T13:09:59.920 回答
0

如果您的关联数组的键总是且只有整数类型,您可以将其声明如下

int temp,imem[int];

然后您的代码应该能够使用first()next()方法运行。

于 2013-07-30T09:06:01.197 回答