シミュレーション コードでの Verilog genvar 生成インスタンスへのアクセス

StackOverflow https://stackoverflow.com/questions/7339696

質問

これは Verilog 関連の質問です。開発環境として XILINX ISE を使用しています。

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:71 dataY が接頭辞 xmod で宣言されていません

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

ありがとう!

役に立ちましたか?

解決

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

他のヒント

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

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

最近、パラメータ化可能なテストベンチ モニターを作成したときに同様の問題に遭遇しました。インスタンス化されるサブブロックの数は、 parameter. 。この中で、トップレベルが必要でした .start() を呼び出したタスク .start() インスタンス化された各モジュール内のタスク。使えなかった for この OOMR 問題のため、ループでこれを実行します。

それで私は最終的に次のことをしなければならなくなりました:

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

本当に覗き見する必要がある場合は、 generated モジュールについては、上記のような回避策を試してみてはいかがでしょうか?たとえば、トップレベルにバスがあり、generate オリジナルの中身を覗くステートメント generated インスタンス化して、対象の信号をこのトップレベルのバスにコピー/割り当てます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top