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

ここindexで、問題の配列の適切なタイプのインデックスです。ワイルドカード インデックス タイプを指定する連想配列は許可されません。

言語リファレンスは次の場所からダウンロードできます。

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 に答える