ポインタと構造体のインスタンスの違いは何ですか。構造体でインスタンスとポインタをどのようにインスタンス化しますか? ポインターをどのように接続しますか?
誰でも例を挙げて説明できますか?
ポインタと構造体のインスタンスの違いは何ですか。構造体でインスタンスとポインタをどのようにインスタンス化しますか? ポインターをどのように接続しますか?
誰でも例を挙げて説明できますか?
ユニット インスタンスは、ユニットのインスタンスを宣言します。ユニット参照(ユニット ポインターとも呼ばれます) は、ユニット階層に既に存在するユニットを指すか、何も指していない場合は NULL の値を持ちます。
ユニットは静的なアイテムであり、実行前の生成中にのみ作成でき、破棄することはできません (逆参照してからガベージ コレクトします)。ユニットは、別のユニット内でのみインスタンス化できます。したがって、すべての e プログラムには、ルートに sys (唯一の定義済みユニット) を持つユニット インスタンスのツリーがあります。これは、テスト フェーズ中にいつでも動的に作成できる構造体とは対照的です。
unit simple_u {};
struct example_s {
generated_ref : simple_u;
generated_inst : simple_u is instance; // Illegal: Instance cannot be in struct
};
ユニット インスタンスは実行前の生成中にしか作成できないため、生成しない演算子 (!) を使用して宣言することはできません。
generated_inst : simple_u is instance;
!nongen_inst : simple_u is instance; // Illegal: Instances must be generated.
単位参照は、生成することも生成しないこともできます。生成される場合は、個別に宣言されたユニット インスタンスまたは NULL を指す制約が必要です。
!nongen_ref : simple_u;
generated_ref : simple_u; // Requires a generation constraint (like below)
keep soft generated_ref == NULL;
keep generated_ref == generated_inst;
ユニット インスタンスでgenアクションを使用することは違法です。単位参照はいつでも (オンザフライで) 生成できますが、既存の制約があるか、保持ブロックで指定されている必要があります。
gen generated_inst; // Illegal to explicitly generate an instance
gen generated_ref;
gen nongen_ref keeping {it == generated_inst};
手続き型コードでユニット参照に割り当てることは正当ですが、ユニット インスタンスを次のものに割り当てることはできません。
generated_ref = NULL;
generated_inst = NULL; // Illegal to assign to an instance
そして構造体について -
構造体では、「インスタンス」と「ポインター」はありません。ある意味では、すべての構造体フィールドは参照です。
ところで - デバッグ時に、構造体への参照を含むメッセージ (または dut エラー) が表示されます。何かのようなもの -
[1045] packet-@9: インジェクションを開始しています...
@9であるSpecmanコマンドを発行できます
この「インスタンス」へのすべての参照を出力します。リストは、この構造体を参照したすべてのものを含む、非常に長い場合があります。