0

UVMクックブックでは、クラスオブジェクトのインスタンス化は実行時に行うと書かれています。しかし、実行前、コンパイル/精緻化中に、クラスのすべての詳細を取得することもできます。

下の画像 (UVM クックブックから取得) に示されているように、モジュールとインターフェイスのインスタント作成はエラボレーション フェーズで行われますが、クラス オブジェクトの作成は実行時に行われます。

ここに画像の説明を入力

このサンプル例を検討してください。

// Inside any .sv file
class A;
  int a;
endclass

A x;

initial
  x=new();

この場合、実行時にクラスを作成する必要はありません。別のモジュールやインターフェイスの詳細と同様に、コンパイル/エラボレーション時にクラスのすべての詳細を利用できるからです。

では、なぜ Systemverilog では、実行時にクラスのインスタンス化だけが行われるのでしょうか?

C++ でもオブジェクトの作成は実行時に行われません。

注:質問では、継承を使用しない単純なクラスについて話しているため、実行時の作成が必須になる可能性があります。すべて (モジュール、インターフェイス、クラス) のメモリはシミュレーション中にのみ割り当てられるため、作成によるメモリ割り当てについては言及しません。画像のコンテキストを取っているだけです。

4

2 に答える 2

1

すべてのオブジェクトは実行時に作成されます。

ランタイムと実行フェーズを混同している可能性がありますか? 実行フェーズは、シミュレーション内の異なる期間を分離できるようにする uvm のフェーズ メカニズムの一部です。したがって、すべての uvm コンポーネントをフェーズごとに同期できます。

ここでのオブジェクトの作成は、ランタイムの一部である build_phase で行われます。

于 2016-10-31T20:42:22.307 に答える