Icarus Verilog のメーリング リストに電子メールを送りました。ここにいくつかの答えがあります:
配列の単語をダンプするには、Icarus は名前をエスケープする必要があるため、VCD ダンプ形式と互換性があります。それが \data[0][31:0] です。これは、データ配列の 0 番目の 32 ビット ワードです。エスケープされた名前と配列名が競合する可能性があるため、Icarus は警告を生成します。エスケープされた識別子の競合をチェックして、問題がある場合にのみメッセージを出力できれば最高ですが、私が覚えているように、これは不可能でした。
すべてのダンパーが配列ワードを処理できるように、エスケープされた識別子を使用することにしました。もう 1 つの一般的な選択肢は、特定のダンプ形式でのみ機能する特別なダンプ コマンドを使用してのみサポートすることです。
警告をより正確にすることができれば良いと思いますが、通常は他の作業で忙しいため、修正が複雑に見える小さな問題は修正されないことがよくあります。私が覚えているように、何年も経ちましたが、問題は、エスケープされた識別子を検索すると、配列要素が見つかり、VPI で次の出現を検索する方法がないことです。Icarus の名前による検索の実装で配列要素を見つけるのはバグである可能性があります。
キャリー
「配列ワードをダンプするには、Icarus は名前をエスケープする必要があるため、VCD ダンプ形式と互換性があります。それが \data[0][31:0] です。データ配列の 0 番目の 32 ビット ワードです。エスケープされた名前と配列名が競合する可能性があるため、Icarus は警告を生成します。エスケープされた識別子の競合をチェックし、問題がある場合にのみメッセージを出力できれば最高ですが、私が覚えているように、これは不可能でした."
...名前をエスケープする必要はないと思います。VCS (fsdb2vcd が後に続く) と CVC の両方が問題なく名前を直接出力します。カット アンド ペーストの例を以下に示します。
$var wire 5 `' IC_DrAd0 [3][4:0] $end $var wire 5 a' IC_DrAd0 [2][4:0] $end $var wire 5 b' IC_DrAd0 [1][4:0] $ end $var wire 5 c' IC_DrAd0 [0][4:0] $end
VCD 仕様ではこれが定義されていないことは承知していますが、他のツールがこれらの構造を生成するため、長年にわたってこれらの種類の拡張機能の多くを gtkwave に組み込む必要がありました。エスケープは、iverilog と VCS でシミュレートしようとすると、保存ファイルの非互換性 (シグナルの欠落) を引き起こす可能性があります。
時間が経つにつれて、SV コンストラクトにより、VCD ファイルにさらに追加される可能性があります。私の知る限り、1364仕様のVCD部分はVerilog-XL以降まったく更新されていません。CVC は、 +dump_arrays plusarg を追加することで、考えられる非互換性を回避します (いいえ、各配列要素をループする必要もありません)。
-トニー
また、GTKWave の作成者 Tony Bybell にメールを送信しました。
こんにちは、
問題は、コンパイラがこれらの値をダンプ ファイルに出力していないことです。iverilog の開発者と連絡を取る必要があります。sim を実行し、アレイをダンプする +dump_arrays をオンにした CVC などの別のシミュレータと比較すると、同じ問題が発生し、それらは gtkwave で表示されます。
http://iverilog.wikia.com/wiki/Release_Notes_Icarus_Verilog_0_9_2 | $dumpvars がダンプ用の配列メンバーを受け入れることを許可し、
...「初期」時に、ダンプする配列要素ごとに $dumpvars ステートメントを追加する必要があるようです。配列名自体が機能するかどうかはわかりません。各要素を「ワイヤー」に割り当てることもうまくいくかもしれません。
私はiverilogでこの機能を試したことがないので、うまくいくかどうかわかりません。実験するか、開発者に尋ねる必要があるかもしれません。
-トニー