我写了一个简单的代码来测试数组中的不同方法。这是代码:
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)。
为什么会出现这个警告?
答案 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()
方法运行。