2

私は SystemVerilog の比較的初心者です。

クラス A が定義されたパッケージがあります。このクラスは、テストベンチのドライバー (BFM) であるため、仮想インターフェイスを使用します。パッケージを使用しているので、他のデザインで同じ BFM を使用できます。

私のテストベンチでは、A クラスをインポートし、それに仮想インターフェイスのインスタンスを渡します。ただし、クラス内のタスクがインターフェイス内のシグナルに値を代入しようとすると、コンパイル エラーが発生します。

私は何を間違っていますか?仮想インターフェイスを使用して BFM をパッケージ化するにはどうすればよいですか?

ありがとう、ラン

4

3 に答える 3

5

SystemVerilog パッケージには、実際のパッケージ内にインターフェイスを含めることはできません。そのため、パッケージ ソースとともにインターフェイスをコンパイルする必要があります。定義するクラスはパッケージに常駐しますが、インターフェイス定義はモジュールが存在するグローバル スコープに常駐します。

パッケージ内のクラスは仮想インターフェイスを参照できますが、パッケージ ソースとは別に、インターフェイスがコンパイルされ、表示されていることを確認する必要があります。

于 2013-02-28T16:24:10.657 に答える
0

厳密に仕様によると、暗黙の外部依​​存関係が追加されるため、これは可能ではないと思います。

パッケージ内のアイテムは、通常、型定義、タスク、および関数です。パッケージ内のアイテムは、パッケージ内で作成されたもの、または別のパッケージのインポートによって可視化されたものを除いて、識別子への階層参照を持たないものとします。パッケージは、コンパイル ユニット スコープで定義された項目を参照してはなりません。

インターフェイス宣言が存在する設計要素の名前空間については何も述べていませんが、インターフェイスのメンバーにアクセスするには、階層参照が必要です。

パッケージは、プリプロセッサ ディレクティブとimport.

于 2013-02-28T20:23:24.757 に答える
-1

通常、使用前に存在しないクラス宣言は、systemverilog typedef 定義の助けを借りて解決されます。たとえば、「クラス A はクラス B を使用する」および「クラス B はクラス A を使用する」などの場合、typedef を使用して膠着状態を解決します。

上記のシナリオでパッケージを持ち込む場合、クラス A とクラス B の両方が同じパッケージに含まれている必要があります。そうでない場合、コンパイルは実行されません。

その理由は、SystemVerilog パーサーが、パッケージ解析の最後に typedef で示されるクラスの定義を必要とするためです。これは失敗します。

この問題は、「パッケージ全体で typedef が適用されない」ことに注意する必要があります。

于 2013-10-25T06:13:05.340 に答える