0

これはVerilogに関連する質問です。XILINXISEを開発環境として使用しています。

genvarを使用して自動的に生成されるシミュレーションの変数にアクセスしようとしていますが、次のエラーが表示されます-> HDLCompiler:71

問題の例:

genvar i;

generate

for(i=0; i < N; i=i+1)

begin:Sys_Modules

  TypeXModule #(.width(10)) xmod(.dataY(dataY)));

end

endgenerate 

合成またはシミュレーションを実行すると、Sys_Modules[0..N-1].xmodインスタンスが作成されていることがわかります。

Sys_Modules配列にアクセスするシミュレーションに行を追加しようとすると、次のようになります。

Sys_Modules [i] .xmod.dataY

次のエラーが発生します。

HDLCompiler:71dataYはプレフィックスxmodで宣言されていません

シミュレーションで自動的に生成された値にアクセスする方法はありますか?

ありがとう!

4

4 に答える 4

2

合成されたVerilogではクロスインスタンス階層参照を使用できません。

于 2011-09-08T03:03:58.530 に答える
1

運が悪いと思います。シミュレーターは、あなたが発見したように、生成されたブロックを指すモジュール外参照(OOMR)を好まないようです。

最近、パラメーター化可能なテストベンチモニターを作成するときに、同様の問題が発生しました。に応じて、可変数のサブブロックをインスタンス化しますparameter。この中で、インスタンス化された各モジュールの.start()タスクを呼び出すトップレベルのタスクが必要でした。このOOMRの問題のため.start()、ループを使用してこれを行うことができませんでした。for

だから私はしなければならなくなった:

  • regトップレベルの.start()タスクが切り替わったことを定義する
  • always @これでトリガーされるブロックを書き込むreg
  • このalwaysブロック内に別の セクションを記述して、各サブモジュールを呼び出します。generate.start()

本当にgeneratedモジュールを調べる必要がある場合は、上記のような回避策を試すことができますか?たとえば、トップレベルにバスがあり、generateステートメントを使用して元のdインスタンス化の内部を覗きgenerate、興味深い信号をこのトップレベルバスにコピー/割り当てます。

于 2011-09-07T22:04:35.877 に答える
1

生成されたインスタンスへの階層参照を作成することは合法です。この機能は、IEEEVerilog標準のセクション2.7.2および12.1.3で説明されています。ただし、インスタンスの添え字は、コンパイル時に解決できるように定数である必要があります。

于 2011-09-08T02:52:38.263 に答える
0

私は別の解決策を見つけて使用しました。誰かがそれを役立つと思う場合に備えて、ここに投稿します。私はVivado2020で働いていました。

手順:

  1. tbで:印刷する必要のあるすべてのデータを宣言します(ワイヤーを宣言します)

    例:Sys_Modules [0..N-1]の場合、Sys_Modules [i].xmod.dataY=>が必要

    tb:ワイヤ[0:N-1] [`DATA_SIZE-1:0] tb_Sys_Modules_dataY;

  2. 生成ブロックを使用してすべての接続を生成します

    例:(Nは定義/パラメータである必要があります)

    for(i = 0; i <N; i = i + 1)割り当てtb_Sys_Modules_dataY [i] = Sys_Modules [i] .xmod.dataY;

  3. tbからの$displaywire:

    元:

    $ display( "%d"、tb_Sys_Modules_dataY [i]);

于 2020-11-25T08:42:27.140 に答える